; EntityType Example ; ------------------ Graphics3D 640,480,0,2 SetBuffer BackBuffer() ; Collision type ids type_player=1 type_scenery=2 ; NOTE: fixed overhead camera - the arrow keys steer the PLAYER, not the camera camera=CreateCamera() PositionEntity camera,0,13,-13 RotateEntity camera,45,0,0 light=CreateLight() RotateEntity light,60,30,0 floor=CreatePlane() EntityColor floor,70,110,70 ; The player ball is the collision SOURCE, so it needs an ellipsoid radius player=CreateSphere() EntityColor player,220,60,60 PositionEntity player,0,1,0 EntityRadius player,1 ; The star of the show: give the ball its collision type EntityType player,type_player ; A wall whose collision type we will toggle, plus a crate that stays solid wall=CreateCube() ScaleEntity wall,7,1.5,0.5 PositionEntity wall,0,1.5,7 EntityColor wall,150,150,160 EntityType wall,type_scenery crate=CreateCube() ScaleEntity crate,1.2,1.2,1.2 PositionEntity crate,-4,1.2,3 EntityColor crate,200,160,60 EntityType crate,type_scenery ; Ellipsoid-to-polygon collisions with a sliding response Collisions type_player,type_scenery,2,2 While Not KeyDown(1) ; Arrow keys steer the player ball If KeyDown(200) Then MoveEntity player,0,0,0.1 If KeyDown(208) Then MoveEntity player,0,0,-0.1 If KeyDown(203) Then MoveEntity player,-0.1,0,0 If KeyDown(205) Then MoveEntity player,0.1,0,0 ; Space toggles the wall's collision type between type_scenery and 0. ; Type 0 means the wall is ignored by all collision checking. If KeyHit(57) If GetEntityType(wall)=0 EntityType wall,type_scenery EntityAlpha wall,1 Else EntityType wall,0 EntityAlpha wall,0.4 EndIf EndIf ; UpdateWorld performs the collision checks and the slide response UpdateWorld RenderWorld Text 0,0,"Arrow keys: drive the ball Space: toggle the wall's type Esc: exit" Text 0,20,"EntityType wall,"+GetEntityType(wall)+" (0 = no collision checking)" Text 0,40,"Set it to 0 and the ball drives straight through the ghost wall" Flip Wend End