Help With Children

Blitz3D Forums/Blitz3D Beginners Area/Help With Children

Gauge(Posted 2006) [#1]
I'm trying to get my shooter to work, and I am having some problems. I need my weapons to shoot right, and when I parent my gun to my pivot, it is not storing the global cooords, it keeps them from when i first started. Even if I set the parent global to true/false.

I am using:
player model-for collisions
pivot- parented to player
camera-parented to pivot
gun-parented to camera

I'm using mouse x/y to determine the gun angle, however I need to know the barrel angle of the gun when it shoots, however it entityroll#, etc won't use the right variables. heres my gun code. And it needs to be edited....... I hacked the castle\demo for a quick level.


Graphics3D 800,600,16,2
Global MOVE#
Global turn#
Global rot#
Global fdelay
BULLX=CreateSphere()

;LOAD SKYBOX
	m=CreateMesh()
	;front face
	b=LoadBrush( file$+"_FR.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
	AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3:
	FreeBrush b
	;right face
	b=LoadBrush( file$+"_LF.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
	AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;back face
	b=LoadBrush( file$+"_BK.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
	AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;left face
	b=LoadBrush( file$+"_RT.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
	AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;top face
	b=LoadBrush( file$+"_UP.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
	AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;bottom face	
	b=LoadBrush( file$+"_DN.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
	AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	ScaleMesh m,100,100,100
	FlipMesh m
	EntityFX m,1
	HideEntity M
;LOAD CASTLE!!!!!!!!!!!!!!!!!!
cast=LoadMesh( "c:\castle\castle1.x" )
	ScaleEntity cast,.4,.15,.2
	EntityType cast,TYPE_SCENERY

	player_model=LoadAnimMesh( "c:\castle\mariorun.x" )
	ScaleEntity player_model,.2,.2,.2
	TranslateEntity player_model,0,-1.25,0
	;HideEntity player_model
		spark_sprite=LoadSprite( "c:\castle\bigspark.bmp" )
	HideEntity spark_sprite

	bull_sprite=LoadSprite( "c:\castle\bluspark.bmp" )
	ScaleSprite bull_sprite,3,3
	EntityRadius bull_sprite,1.5
	EntityType bull_sprite,TYPE_BULLET
	HideEntity bull_sprite
	
	hole_sprite=LoadSprite( "c:\castle\bullet_hole.bmp",1 )
	EntityBlend hole_sprite,2
	SpriteViewMode hole_sprite,2
	HideEntity hole_sprite

;LOAD ENVIROMENT
light=CreateLight()
	;"terrain-1.jpg","water-2_mip.bmp","sky","heightmap_256.bmp"
	TurnEntity light,45,45,0
	LAND_TEX=LoadTexture ("C:\CASTLE\TERRAIN-1.JPG")
	ScaleTexture land_tex,10,10

	;land=LoadTerrain("C:\CASTLE\HEIGHTMAP_256.BMP")
	;EntityTexture land,land_tex
	
	;TerrainShading land,True
	;PositionEntity land,-1000,-100,-1000
	;ScaleEntity land,2000.0/256,100,2000.0/256
	;EntityType land,TYPE_TERRAIN
	;TerrainDetail land,750,True
		
	ground=CreatePlane()
	EntityTexture ground,land_tex
	PositionEntity ground,0,-100,0
	EntityOrder ground,9
	OFLOOR=CreatePlane()
	LAND_TEX2=LAND_TEX
	EntityTexture OFLOOR,LAND_TEX2
	EntityOrder OFLOOR,15
	PositionEntity OFLOOR,0,-31,0
	water_tex=LoadTexture("C:\CASTLE\WATER-2_MIP.BMP",3 )
	ScaleTexture water_tex,20,20
	
	water=CreatePlane()
	EntityTexture water,water_tex
	PositionEntity water,0,-30,0
		
	
;END LOAD ENVIROMENT
EntityRadius OFLOOR,1
EntityType OFLOOR,2
EntityRadius GROUND,1
EntityRadius PLAYER_MODEL,1.5
EntityType PLAYER_MODEL,1
;EntityType WATER,2
EntityType GROUND,2
EntityRadius CAST,.025
EntityType CAST,3
;EntityType LAND,2
;EntityType BULLET,4
Collisions 1,3,2,3
Collisions 1,2,2,2
Collisions 1,2,2,2

cam=CreateCamera()
PositionEntity CAM,0,16,-8
CameraRange CAM,.1,1000
PositionEntity PLAYER_MODEL,0,4,3


light=CreateLight()
RotateEntity light,90,0,0

MoveEntity cast,0,-2,0

gun=LoadMesh("c:\gun1.b3d")
;FitMesh gun,0,0,0,.02,.025,.1,1

PositionEntity gun,1,14,-5.4
ScaleEntity GUN,.5,1,1
pivot=CreatePivot()
EntityParent PIVOT,PLAYER_MODEL,True
EntityParent GUN,PIVOT,True
EntityParent cam,pivoT,True
MoveMouse 400,300

While Not KeyHit(1)
FDELAY=FDELAY-1
GUN_ROT#=0
GUN_PITCH#=0
PositionEntity PIVOT,1,14,-5.4

STRIFE#=0
msg$=""
move#=0
turn#=0
shoot=0
If KeyHit(17)=True Or KeyDown(17)=True MOVE#=1
If KeyHit(31)=True Or KeyDown(31)=True MOVE#=-1
If KeyHit(30)=True Or KeyDown(30)=True TURN#=1
If KeyHit(32)=True Or KeyDown(32)=True TURN#=-1
If KeyHit(51)=True Or KeyDown(51)=True STRIFE#=-2
If KeyHit(52)=True Or KeyDown(52)=True STRIFE#=2
curr_my=MouseY()
curr_mx=MouseX()
If MouseHit(1)=True Or MouseDown(1)=True SHOOT=1
If MouseHit(2)=True Or MouseDown(2)=True SHOOT=2
gun_rot#=0
gun_pitch#=0



Select True
;rem next line exclude
Case curr_mx<150
	gun_rot#=90
Case curr_mx<200
	gun_rot#=75
Case curr_mx<250
	gun_rot#=60
Case curr_mx<300
	gun_rot#=45
Case curr_mx<350
	gun_rot#=30
Case curr_mx>650
	gun_rot#=-90
Case curr_mx>600
	gun_rot#=-75
Case curr_mx>550
	gun_rot#=-60
Case curr_mx>500
	gun_rot#=-45
Case curr_mx>450
	gun_rot#=-30
End Select
;SET GUN_PITCH
Select True
Case curr_my<100
	gun_pitch#=-50
Case curr_my<125
	gun_pitch#=-40
Case curr_my<150
	gun_pitch#=-30
Case curr_my<175
	gun_pitch#=-20
Case curr_my<225
	gun_pitch#=-10
Case curr_my>600
	gun_pitch#=50
Case curr_my>500
	gun_pitch#=40
Case curr_my>450
	gun_pitch#=30
Case curr_my>400
	gun_pitch#=20
Case curr_my>350
	gun_pitch#=10
End Select

If shoot=1 And FDELAY<1
;msg$="FIRE FIRE FIRE FIRE FIRE FIRE"
P.bullet=New bullet
P\mesh=CopyEntity(bullx)
PositionEntity P\mesh,(EntityX#(PLAYER_MODEL)),( EntityY#(PLAYER_MODEL)),(EntityZ#(PLAYER_MODEL))
TurnEntity P\mesh,GUN_PITCH#,ROT#+GUN_ROT#,0
MoveEntity P\mesh,1.9,16,-3.5
fdelay=20
EndIf


ROT#=ROT#+TURN#

MoveEntity PLAYER_MODEL,STRIFE#,-.25,MOVE#
TurnEntity PLAYER_MODEL,0,TURN#,0
RotateEntity PIVOT,GUN_PITCH#,GUN_ROT#,0

For P.BULLET=Each BULLET
MoveEntity P\MESH,0,0,4
Next

UpdateWorld
RenderWorld
roll#=EntityRoll#(GUN)
pitch#=EntityPitch#(GUN)
yaw#=EntityYaw#(GUN)
x#=EntityX#(GUN)
y#=EntityY#(GUN)
z#=EntityZ#(GUN)
Text 10,10,"ROLL: "+ROLL#
Text 10,30,"PITCH: "+PITCH#
Text 10,50,"YAW: "+YAW#
Text 10,70,"X#= "+X#
Text 10,90,"Y#= "+Y#
Text 10,110,"Z#= "+Z#
Text 10,150,"TRISRENDERED="+TrisRendered()
			
Flip
Wend
End

Type BULLET
Field MESH
Field DURATION
End Type



_PJ_(Posted 2006) [#2]
Oops, thought you meant this! :D

Just kidding.

Try adding

Global GUN_ROT#
Global GUN_PITCH#

also, with these commands:

roll#=EntityRoll#(GUN)
pitch#=EntityPitch#(GUN)
yaw#=EntityYaw#(GUN)
x#=EntityX#(GUN)
y#=EntityY#(GUN)
z#=EntityZ#(GUN)


Add the GLOBAL parameter like this:


roll#=EntityRoll#(GUN,1)

I think that should work. Havent reied it, haven't even run your code, because Id have to find/make all the files to load in!


Stevie G(Posted 2006) [#3]
You've got a parenting extravaganza going on there which it probably unecessary :-O

If you could provide a version of the above that does not require any external media then I'm sure this could be made to be more efficient and less complicated.

Up to you I guess.

Cheers
Stevie


Gauge(Posted 2006) [#4]
thank you very much, doing entityroll#(gun,true) worked. I'll edit the code and post it so you all can see.
as soon as I can. laters