Here's the code in a simpler form. I'm at my wits end
with this...can someone please take a look.
with this...can someone please take a look.
Graphics3D 800,600,0 SetBuffer BackBuffer() WBuffer False Global light Global gravity#=-0.04 Global puck_under_control,puck_under_control_player_num ;Player 1 Global Player_1_UP=200 Global Player_1_Down=208 Global Player_1_Left=203 Global Player_1_Right=205 Global Player_1_Shoot=54 Global Player_1_Pass=157 Const player_1_col=1 Const world_col=3 Const Puck_col=4 Collisions player_1_col,world_col,2,2 Collisions Puck_col,world_col,2,2 Global Main_Camera_1=CreateCamera() MoveEntity Main_Camera_1,0,125,-150 TurnEntity Main_Camera_1,50,0,0 CameraZoom Main_Camera_1,1.5 Type ball Field e ;entity Field sphere Field pivot Field x#,y#,z# ; position in 3d-space Field vx#,vy#,vz# ; velocity Field ax#,ay#,az# ; acceleration Field bounce# ; bounce factor Field vel# Field vx2#,vy2#,vz2# ; temp velocity End Type Global puck_shot,pass_1,pass_2,pass_3 Global Player_1_Under_Control=1 Global Pass_Target=CreateCube() ScaleEntity Pass_Target,3,3,3 EntityAlpha Pass_Target,.5 EntityColor Pass_Target,0,10,255 Type Team_1_P1 Field entity ;entity Field t1x#,t1y#,t1z# ; position in 3d-space Field t1vx#,t1vy#,t1vz# ; velocity Field t1ax#,t1ay#,t1az# ; acceleration Field speed#,maxspeed# Field stick_Pivot,stick_pivot_aim Field Player_Number Field passed_puck Field aimer End Type Type Team_1_P2 Field entity ;entity Field t1x#,t1y#,t1z# ; position in 3d-space Field t1vx#,t1vy#,t1vz# ; velocity Field t1ax#,t1ay#,t1az# ; acceleration Field speed#,maxspeed# Field stick_Pivot,stick_pivot_aim Field Player_Number Field passed_puck Field aimer End Type Setup_rink() Create_Player1(0,20,0) Create_Player2(75,20,-40) create_puck(0,4,-120,0.8) While Not KeyHit(1) Sort_Distance() Player1_update() Player1_control() update_Camera() puck_control_update() If puck_shot>0 Then puck_shot=puck_shot-1 If puck_under_control=0 ballupdate() EndIf ballcontrol() If puck_under_control=1 If puck_shot=0 UpdateWorld EndIf ;UpdateWorld is in ballupdate RenderWorld Flip Wend End Function Setup_rink() light=CreateLight() ice=CreateCube() ScaleEntity ice,400,1,300 EntityColor ice,255,255,255 EntityType ice,3 EntityAlpha ice,.5 EntityFX ice,1 reflection=CreateMirror(ice) cube=CreateCube() FitMesh cube,-400,0,200,800,50,200 EntityType cube,3 EntityColor cube,50,100,225 pass_1=CreateCylinder() ScaleMesh pass_1,2,3.5,2 PositionEntity pass_1,75,4,-20 EntityColor pass_1,255,50,50 pass_2=CreateCylinder() ScaleMesh pass_2,2,3.5,2 PositionEntity pass_2,-85,4,30 EntityColor pass_2,255,255,50 End Function Function puck_control_update() For c.ball=Each ball ;T1_P2 For T1_P1.Team_1_P1=Each Team_1_P1 If puck_under_control=0 If puck_shot=0 If T1_P1\passed_puck=0 If EntityDistance(T1_P1\stick_pivot,c\sphere)<6 puck_under_control=1 puck_under_control_player_num=1 Player_1_Under_Control=1 TFormVector 0,0,0,T1_P1\aimer,0 EndIf EndIf EndIf EndIf If puck_under_control=1 And puck_under_control_player_num=1 EntityParent c\sphere,T1_P1\stick_pivot PositionEntity c\sphere,0,0,0 EntityParent c\e,T1_P1\stick_pivot PositionEntity c\e,0,0,0 EntityParent c\pivot,T1_P1\stick_pivot PositionEntity c\pivot,0,0,0 EndIf Next ;T1_P2 For T1_P2.Team_1_P2=Each Team_1_P2 If puck_under_control=0 If puck_shot=0 If T1_P2\passed_puck=0 If EntityDistance(T1_P2\stick_pivot,c\sphere)<6 puck_under_control=1 puck_under_control_player_num=2 Player_1_Under_Control=2 TFormVector 0,0,0,T1_P2\aimer,0 EndIf EndIf EndIf EndIf If puck_under_control=1 And puck_under_control_player_num=2 EntityParent c\sphere,T1_P2\stick_pivot PositionEntity c\sphere,0,0,0 EntityParent c\e,T1_P2\stick_pivot PositionEntity c\e,0,0,0 EntityParent c\pivot,T1_P2\stick_pivot PositionEntity c\pivot,0,0,0 EndIf Next Next End Function Function create_puck(x#,y#,z#,bounce#=0.9) c.ball=New ball c\x#=x# c\y#=y# c\z#=z# c\bounce#=bounce# c\e=CreatePivot() c\sphere=CreateCylinder() c\pivot=CreatePivot() EntityType c\e,Puck_col EntityRadius c\e,.15 PositionEntity c\e,c\x,c\y,c\z ScaleEntity c\sphere,1,.5,1 EntityColor c\sphere,30,30,30 End Function Function ballupdate() For c.ball=Each ball c\vy#=c\vy#+gravity# c\vx#=c\vx#+c\ax# c\vy#=c\vy#+c\ay# c\vz#=c\vz#+c\az# c\x#=EntityX(c\e) c\y#=EntityY(c\e) c\z#=EntityZ(c\e) TranslateEntity c\e,c\vx,c\vy,c\vz Next UpdateWorld() For c.ball=Each ball ;correct velocity if collided c\vx2=(EntityX(c\e)-c\x) c\vy2=(EntityY(c\e)-c\y) c\vz2=(EntityZ(c\e)-c\z) c\x#=EntityX(c\e) c\y#=EntityY(c\e) c\z#=EntityZ(c\e) PositionEntity c\sphere,c\x,c\y,c\z PositionEntity c\pivot,c\x,c\y,c\z ;collide_with world If EntityCollided(c\e,world_col) For i = 1 To CountCollisions(c\e) ; Get the normal of the surface which the entity collided with. Nx# = CollisionNX(c\e, i) Ny# = CollisionNY(c\e, i) Nz# = CollisionNZ(c\e, i) ; Compute the dot product of the entity's motion vector and the normal of the surface collided with. VdotN# = c\vx#*Nx# + c\vy#*Ny# + c\vz#*Nz# ; Calculate the normal force. NFx# = -2.0 * Nx# * VdotN# NFy# = -2.0 * Ny# * VdotN# NFz# = -2.0 * Nz# * VdotN# ; Add the normal force to the direction vector. c\vx# = c\vx# + NFx# * c\bounce# c\vy# = c\vy# + NFy# * c\bounce# c\vz# = c\vz# + NFz# * c\bounce# avx#=EntityPitch(c\sphere) avy#=EntityYaw(c\sphere) avz#=EntityRoll(c\sphere) ;Rotate stuff ;Get vector from center to collision dx1#=(CollisionX(c\e,i)-c\x) dy1#=(CollisionY(c\e,i)-c\y) dz1#=(CollisionZ(c\e,i)-c\z) dx2#=c\vx dy2#=c\vy dz2#=c\vz ;Cross product cx# = ( dy1 * dz2 ) - ( dz1 * dy2 ) cy# = ( dz1 * dx2 ) - ( dx1 * dz2 ) cz# = ( dx1 * dy2 ) - ( dy1 * dx2 ) AlignToVector c\pivot,cx,cy,cz,1 Next Nx# = CollisionNX(c\e, 1) Ny# = CollisionNY(c\e, 1) Nz# = CollisionNZ(c\e, 1) AlignToVector c\e,Nx#,Ny#,Nz#,2,0.5 c\vel#=Sqr(c\vx2*c\vx2+c\vy2*c\vy2+c\vz2*c\vz2) ;slow down due to friction c\vx#=c\vx*0.98 c\vy#=c\vy*0.98 c\vz#=c\vz*0.98 EndIf EntityParent c\sphere,c\pivot EntityParent c\sphere,0 c\ax#=0 c\ay#=0 c\az#=0 Next End Function Function ballcontrol() For c.ball=Each ball If puck_under_control=1 ;SHOOT DA PUCK!!!!!!!!!!!!!!!!!!!!!! If KeyHit(Player_1_Shoot) For T1_P1.Team_1_P1=Each Team_1_P1 If puck_under_control_player_num=1 PointEntity c\e,T1_P1\stick_pivot_aim Next For T1_P2.Team_1_P2=Each Team_1_P2 If puck_under_control_player_num=2 PointEntity c\e,T1_P2\stick_pivot_aim Next puck_under_control=0 puck_under_control_player_num=0 EntityParent c\sphere,0 EntityParent c\e,0 EntityParent c\pivot,0 If puck_shot=0 TFormVector 0,2,5,c\e,0 c\ax#=TFormedX() c\ay#=TFormedY() c\az#=TFormedZ() EndIf puck_shot=5 EndIf ;PASS DA PUCK!!!!!!!!!!!!!!!!!!!! If KeyHit(Player_1_Pass) ;==================player_1_Pass If puck_under_control_player_num=1 For T1_P1.Team_1_P1=Each Team_1_P1 RotateEntity c\e,0,EntityYaw(T1_P1\aimer),0,True value_3#=EntityYaw(T1_P1\aimer) value_4#=EntityYaw(c\e,True) puck_under_control=0 puck_under_control_player_num=0 EntityParent c\sphere,0 EntityParent c\e,0 EntityParent c\pivot,0 TFormVector 0,0,EntityDistance(c\e,Pass_Target)*.035,T1_P1\aimer,0 c\ax#=TFormedX() c\ay#=TFormedY() c\az#=TFormedZ() T1_P1\passed_puck=20 puck_shot=5 Next EndIf ;================end Player_1_Pass ;==================player_2_Pass If puck_under_control_player_num=2 For T1_P2.Team_1_P2=Each Team_1_P2 RotateEntity c\e,0,EntityYaw(T1_P2\aimer),0,True value_3#=EntityYaw(T1_P2\aimer) value_4#=EntityYaw(c\e,True) puck_under_control=0 puck_under_control_player_num=0 EntityParent c\sphere,0 EntityParent c\e,0 EntityParent c\pivot,0 TFormVector 0,0,EntityDistance(c\e,Pass_Target)*.035,T1_P2\aimer,0 c\ax#=TFormedX() c\ay#=TFormedY() c\az#=TFormedZ() T1_P2\passed_puck=20 puck_shot=5 Next EndIf ;================end Player_2_Pass EndIf EndIf Next End Function Function update_Camera() For c.ball=Each ball PositionEntity Main_Camera_1,EntityX(c\e,True),155,EntityZ(c\e,True)-100 Next End Function Function Create_Player1(xpos#,ypos#,zpos#) T1_P1.Team_1_P1 = New Team_1_P1 T1_P1\t1x#=xpos# : T1_P1\t1y#=ypos# :T1_P1\t1z#=zpos# T1_P1\entity=CreateCube() ScaleEntity T1_P1\entity,2,2,2 EntityType T1_P1\entity,1 PositionEntity T1_P1\entity,T1_P1\t1x#,T1_P1\t1y#,T1_P1\t1z# EntityRadius T1_P1\entity,2,2 T1_P1\maxspeed#=.2 T1_P1\stick_pivot=CreateCube(T1_P1\entity) MoveEntity T1_P1\stick_pivot,1,-1,1 ScaleEntity T1_P1\stick_pivot,.25,.25,.25 EntityColor T1_P1\stick_pivot,200,150,125 T1_P1\stick_pivot_aim=CreateCube(T1_P1\entity) MoveEntity T1_P1\stick_pivot_aim,1,-1,10 ScaleEntity T1_P1\stick_pivot_aim,.25,.25,.25 EntityColor T1_P1\stick_pivot_aim,255,100,100 T1_P1\aimer=CreateCube() T1_P1\Player_Number=1 End Function Function Create_Player2(xpos#,ypos#,zpos#) T1_P2.Team_1_P2 = New Team_1_P2 T1_P2\t1x#=xpos# : T1_P2\t1y#=ypos# :T1_P2\t1z#=zpos# T1_P2\entity=CreateCube() EntityColor T1_P2\entity,100,255,100 ScaleEntity T1_P2\entity,2,2,2 EntityType T1_P2\entity,1 PositionEntity T1_P2\entity,T1_P2\t1x#,T1_P2\t1y#,T1_P2\t1z# EntityRadius T1_P2\entity,2,2 T1_P2\maxspeed#=.2 T1_P2\stick_pivot=CreateCube(T1_P2\entity) MoveEntity T1_P2\stick_pivot,1,-1,1 ScaleEntity T1_P2\stick_pivot,.25,.25,.25 EntityColor T1_P2\stick_pivot,200,150,125 T1_P2\stick_pivot_aim=CreateCube(T1_P2\entity) MoveEntity T1_P2\stick_pivot_aim,1,-1,10 ScaleEntity T1_P2\stick_pivot_aim,.25,.25,.25 EntityColor T1_P2\stick_pivot_aim,255,100,100 T1_P2\aimer=CreateCube() T1_P2\Player_Number=2 End Function Function Player1_update() ;player 1 For T1_P1.Team_1_P1=Each Team_1_P1 PointEntity T1_P1\aimer,Pass_Target T1_P1\t1vy#=T1_P1\t1vy#+gravity# T1_P1\t1vx#=T1_P1\t1vx#+T1_P1\t1ax# T1_P1\t1vy#=T1_P1\t1vy#+T1_P1\t1ay# T1_P1\t1vz#=T1_P1\t1vz#+T1_P1\t1az# T1_P1\t1x#=EntityX(T1_P1\entity) T1_P1\t1y#=EntityY(T1_P1\entity) T1_P1\t1z#=EntityZ(T1_P1\entity) TranslateEntity T1_P1\entity,T1_P1\t1vx,T1_P1\t1vy,T1_P1\t1vz If T1_P1\passed_puck>0 Then T1_P1\passed_puck=T1_P1\passed_puck-1 PositionEntity T1_P1\aimer,EntityX(T1_P1\stick_pivot,True),EntityY(T1_P1\stick_pivot,True),EntityZ(T1_P1\stick_pivot,True) Next For T1_P1.Team_1_P1=Each Team_1_P1 ;correct velocity if collided T1_P1\t1vx=(EntityX(T1_P1\entity)-T1_P1\t1x) T1_P1\t1vy=(EntityY(T1_P1\entity)-T1_P1\t1y) T1_P1\t1vz=(EntityZ(T1_P1\entity)-T1_P1\t1z) ;slow down due to friction If EntityCollided(T1_P1\entity,world_col) T1_P1\t1vx#=T1_P1\t1vx*0.98 T1_P1\t1vy#=T1_P1\t1vy*0.98 T1_P1\t1vz#=T1_P1\t1vz*0.98 EndIf T1_P1\t1ax#=0 T1_P1\t1ay#=0 T1_P1\t1az#=0 Next ;player 2 For T1_P2.Team_1_P2=Each Team_1_P2 PointEntity T1_P2\aimer,Pass_Target T1_P2\t1vy#=T1_P2\t1vy#+gravity# T1_P2\t1vx#=T1_P2\t1vx#+T1_P2\t1ax# T1_P2\t1vy#=T1_P2\t1vy#+T1_P2\t1ay# T1_P2\t1vz#=T1_P2\t1vz#+T1_P2\t1az# T1_P2\t1x#=EntityX(T1_P2\entity) T1_P2\t1y#=EntityY(T1_P2\entity) T1_P2\t1z#=EntityZ(T1_P2\entity) TranslateEntity T1_P2\entity,T1_P2\t1vx,T1_P2\t1vy,T1_P2\t1vz If T1_P2\passed_puck>0 Then T1_P2\passed_puck=T1_P2\passed_puck-1 PositionEntity T1_P2\aimer,EntityX(T1_P2\stick_pivot,True),EntityY(T1_P2\stick_pivot,True),EntityZ(T1_P2\stick_pivot,True) Next For T1_P2.Team_1_P2=Each Team_1_P2 ;correct velocity if collided T1_P2\t1vx=(EntityX(T1_P2\entity)-T1_P2\t1x) T1_P2\t1vy=(EntityY(T1_P2\entity)-T1_P2\t1y) T1_P2\t1vz=(EntityZ(T1_P2\entity)-T1_P2\t1z) ;slow down due to friction If EntityCollided(T1_P2\entity,world_col) T1_P2\t1vx#=T1_P2\t1vx*0.98 T1_P2\t1vy#=T1_P2\t1vy*0.98 T1_P2\t1vz#=T1_P2\t1vz*0.98 EndIf T1_P2\t1ax#=0 T1_P2\t1ay#=0 T1_P2\t1az#=0 Next ;puck_aim End Function Function Player1_control() If Player_1_Under_Control=1 For T1_P1.Team_1_P1=Each Team_1_P1 If KeyDown(Player_1_UP) TFormVector 0,0,0.02,T1_P1\entity,0 T1_P1\t1ax#=TFormedX() T1_P1\t1ay#=TFormedY() T1_P1\t1az#=TFormedZ() EndIf If KeyDown(Player_1_Down) If T1_P1\t1vx > 0 And T1_P1\t1vy > 0 And T1_P1\t1vz > 0 T1_P1\t1vx=T1_P1\t1vx*0.97 T1_P1\t1vy=T1_P1\t1vy*0.97 T1_P1\t1vz=T1_P1\t1vz*0.97 Else TFormVector 0,0,-0.01,T1_P1\entity,0 T1_P1\t1ax#=TFormedX() T1_P1\t1ay#=TFormedY() T1_P1\t1az#=TFormedZ() EndIf EndIf If KeyDown(57) TFormVector 0,0.05,0,T1_P1\entity,0 T1_P1\t1ax#=T1_P1\t1ax+TFormedX() T1_P1\t1ay#=T1_P1\t1ay+TFormedY() T1_P1\t1az#=T1_P1\t1az+TFormedZ() EndIf If KeyDown(Player_1_Left) TurnEntity T1_P1\entity,0,3,0 EndIf If KeyDown(Player_1_Right) TurnEntity T1_P1\entity,0,-3,0 EndIf ;additional speed MoveEntity T1_P1\entity,0,0,T1_P1\speed# If KeyDown(Player_1_UP) If T1_P1\speed#<T1_P1\maxspeed# Then T1_P1\speed#=T1_P1\speed#+.01 EndIf If Not KeyDown(Player_1_UP) If T1_P1\speed#>0 Then T1_P1\speed#=T1_P1\speed#-.0005 EndIf If T1_P1\speed#<0 Then T1_P1\speed#=0 If KeyDown(Player_1_DOWN) Then T1_P1\speed#=T1_P1\speed#-.01 Next EndIf If Player_1_Under_Control=2 For T1_P2.Team_1_P2=Each Team_1_P2 If KeyDown(Player_1_UP) TFormVector 0,0,0.02,T1_P2\entity,0 T1_P2\t1ax#=TFormedX() T1_P2\t1ay#=TFormedY() T1_P2\t1az#=TFormedZ() EndIf If KeyDown(Player_1_Down) If T1_P2\t1vx > 0 And T1_P2\t1vy > 0 And T1_P2\t1vz > 0 T1_P2\t1vx=T1_P2\t1vx*0.97 T1_P2\t1vy=T1_P2\t1vy*0.97 T1_P2\t1vz=T1_P2\t1vz*0.97 Else TFormVector 0,0,-0.01,T1_P2\entity,0 T1_P2\t1ax#=TFormedX() T1_P2\t1ay#=TFormedY() T1_P2\t1az#=TFormedZ() EndIf EndIf If KeyDown(57) TFormVector 0,0.05,0,T1_P2\entity,0 T1_P2\t1ax#=T1_P2\t1ax+TFormedX() T1_P2\t1ay#=T1_P2\t1ay+TFormedY() T1_P2\t1az#=T1_P2\t1az+TFormedZ() EndIf If KeyDown(Player_1_Left) TurnEntity T1_P2\entity,0,3,0 EndIf If KeyDown(Player_1_Right) TurnEntity T1_P2\entity,0,-3,0 EndIf ;additional speed MoveEntity T1_P2\entity,0,0,T1_P2\speed# If KeyDown(Player_1_UP) If T1_P2\speed#<T1_P2\maxspeed# Then T1_P2\speed#=T1_P2\speed#+.01 EndIf If Not KeyDown(Player_1_UP) If T1_P2\speed#>0 Then T1_P2\speed#=T1_P2\speed#-.0005 EndIf If T1_P2\speed#<0 Then T1_P2\speed#=0 If KeyDown(Player_1_DOWN) Then T1_P2\speed#=T1_P2\speed#-.01 Next EndIf End Function Function Sort_Distance() For c.ball=Each ball If puck_under_control_player_num=1 For T1_P2.Team_1_P2=Each Team_1_P2 ;player 2 If EntityDistance(c\e,T1_P2\entity)<=EntityDistance(c\e,pass_1) If EntityDistance(c\e,T1_P2\entity)<=EntityDistance(c\e,pass_2) EntityParent Pass_Target,T1_P2\entity EndIf EndIf ;pass 1 If EntityDistance(c\e,pass_1)<=EntityDistance(c\e,pass_2) If EntityDistance(c\e,pass_1)<=EntityDistance(c\e,T1_P2\entity) EntityParent Pass_Target,pass_1 EndIf EndIf ;pass 2 If EntityDistance(c\e,pass_2)<EntityDistance(c\e,pass_1) If EntityDistance(c\e,pass_2)<=EntityDistance(c\e,T1_P2\entity) EntityParent Pass_Target,pass_2 EndIf EndIf PositionEntity Pass_Target,0,0,0 Next EndIf If puck_under_control_player_num=2 For T1_P1.Team_1_P1=Each Team_1_P1 ;player 2 If EntityDistance(c\e,T1_P1\entity)<=EntityDistance(c\e,pass_1) If EntityDistance(c\e,T1_P1\entity)<=EntityDistance(c\e,pass_2) EntityParent Pass_Target,T1_P1\entity EndIf EndIf ;pass 1 If EntityDistance(c\e,pass_1)<=EntityDistance(c\e,pass_2) If EntityDistance(c\e,pass_1)<=EntityDistance(c\e,T1_P1\entity) EntityParent Pass_Target,pass_1 EndIf EndIf ;pass 2 If EntityDistance(c\e,pass_2)<EntityDistance(c\e,pass_1) If EntityDistance(c\e,pass_2)<=EntityDistance(c\e,T1_P1\entity) EntityParent Pass_Target,pass_2 EndIf EndIf PositionEntity Pass_Target,0,0,0 Next EndIf Next End Function