; strelki: LEFT, RIGHT - povorot, UP\DOWN - camera UP\DOWN ; A - vpered, Z - nazad Graphics3D 800,600,32,2 Global ssp# = .05 Type Player Field entity,model Field anim_speed#,player_y# End Type Type SmartCam Field entity,camera,target, heading End Type Const TYPE_PLAYER=1, TYPE_TARGET=2, TYPE_WALL=3 Collisions TYPE_PLAYER,TYPE_WALL,2,2 Collisions TYPE_TARGET,TYPE_WALL,2,2 Global level,player_model LoadGameObjects() player.Player=CreatePlayer( 0,5,0 ) camera.SmartCam=CreateSmartCam( player\entity ) While Not KeyHit(1) UpdateGame() UpdateWorld For c.SmartCam=Each SmartCam UpdateSmartCam( c ) Next RenderWorld Flip Wend End ;--------- Functions ------------- Function UpdateGame() For p.Player=Each Player UpdatePlayer( p ) Next End Function Function CreatePlayer.Player( x#,y#,z# ) p.Player=New Player p\entity=CreatePivot() p\model=CopyEntity( player_model,p\entity ) p\player_y=y PositionEntity p\entity,x,y,z EntityType p\entity,TYPE_PLAYER EntityRadius p\entity,2 Return p End Function Function UpdatePlayer( p.Player ) If KeyDown(203) ;left/right TurnEntity p\entity,0,5,0 Else If KeyDown(205) TurnEntity p\entity,0,-5,0 EndIf If KeyDown(30) ;forward If p\anim_speed<=0 p\anim_speed=1.75 Animate p\model, 1, 1.5, 1, 10 EndIf MoveEntity p\entity,0,0,1 Else If KeyDown(44) ;back If p\anim_speed>=0 p\anim_speed=-1.75 Animate p\model, 1, 1.5, 1, 10 EndIf MoveEntity p\entity,0,0,-1 Else If p\anim_speed ;stop animating p\anim_speed=0 Animate p\model, 2, 1, 0, 10 EndIf ty#=EntityY(p\entity) y_vel#=(ty-p\player_y) p\player_y=ty y_vel=y_vel-.5 TranslateEntity p\entity,0,y_vel,0 End Function Function CreateSmartCam.SmartCam( entity ) c.SmartCam=New SmartCam c\entity=entity c\camera=CreateCamera() c\target=CreatePivot( entity ) PositionEntity c\target,0,5,-10 EntityType c\target,TYPE_TARGET c\heading=CreatePivot( entity ) PositionEntity c\heading,0,0,20 Return c End Function Function UpdateSmartCam( c.SmartCam ) If KeyDown(200) TranslateEntity c\heading,0,-3,0 Else If KeyDown(208) TranslateEntity c\heading,0,+3,0 EndIf dx#=EntityX(c\target,True)-EntityX(c\camera,True) dy#=EntityY(c\target,True)-EntityY(c\camera,True) dz#=EntityZ(c\target,True)-EntityZ(c\camera,True) TranslateEntity c\camera,dx*ssp,dy*ssp,dz*ssp PointEntity c\camera,c\heading PositionEntity c\target,0,0,0 ResetEntity c\target PositionEntity c\target,0,20,-15 End Function Function LoadGameObjects() level=LoadMesh( "maps\tur.b3d" ) ScaleEntity level,.15,.15,.15 EntityType level,TYPE_WALL player_model = LoadAnimMesh( "ROBOT\robotic.3DS" ) ScaleEntity player_model,.2,.2,.2 LoadAnimSeq player_model, ("ROBOT\running.3DS" ) TurnEntity player_model,0,-180,0 HideEntity player_model End Function