Worklog for Prym

Galaxang46

Return to Worklogs

orbital attraction(Posted 2014-06-10)
I have make a special orbital gravity for some planets of my project Galaxang .
Here I post a simple code , the same in Galaxang ,
which has thrown the mondial FPS gaming into the cosmos !

http://prymprog.wikeo.net - Galaxang46

Look at this chunk code ( it uses "EntityParent" and "AlignToVector" )

--------



;;;;
;;;; orbital pivot demo
;;;;

Global mouse_move_speed# = 0.25
Global GW% = 800 , GH% = 600 , type_ellipsoide% = 1
Global spaceplanet% = 0 , x% = -2 , y% = -2 , z% = -2
Global parentplayer0% = 0 , player0% = 0 , camera% = 0
Global pivotplanete4% = 0 , pivotorbiplanete4% = 0
Global planete4% = 0 , textureplanete4% = 0 , rndscale% = 0
Global mvx% = 0 , mvz% = 0 , vitesse% = 10
Global deplacy# = 0.0 , deplacx# = 0.0
Global campitch# = 0.0 , camyaw# = 0.0 , camroll# = 0.0
Global oldpitch# = 0.0 , oldyaw# = 0.0 , oldroll# = 0.0

Graphics3D GW , GH , 32 , 2
textureplanete4 = CreateTexture ( 32 , 32 )
SetBuffer TextureBuffer ( textureplanete4 )
ClsColor 100 , 110 , 130
Color 200 , 190 , 180
Cls
Text 0 , 0 , "++++"
Text 0 , 8 , "++++"
Text 0 , 16 , "++++"
Text 0 , 24 , "++++"
SetBuffer BackBuffer ( )
;player
parentplayer0 = CreatePivot ( )
player0 = CreateSphere ( )
EntityRadius player0 , 100
EntityType player0 , type_ellipsoide
ScaleEntity player0 , 10 , 10 , 10
camera = CreateCamera ( player0 )
CameraViewport camera , 0 , 0 , GW , GH
PositionEntity player0 , 0 , 0 , -5000
;scene
For x = -2 To 2 Step 4
For y = -2 To 2 Step 4
For z = -2 To 2 Step 4
rndscale = Rand ( 5 , 30 )
spaceplanet = CreateSphere ( )
ScaleEntity spaceplanet , 10 * rndscale , 10 * rndscale , 10 * rndscale
EntityColor spaceplanet , Rand ( 100 , 150 ) , Rand ( 50 , 200 ) , Rand ( 50 , 250 )
PositionEntity spaceplanet , 100 * x * Rand ( 5 , 20 ) , 100 * y * Rand ( 5 , 20 ) , 100 * z * Rand ( 5 , 20 )
Next : Next : Next
;planete4
pivotplanete4 = CreatePivot ( )
PositionEntity pivotplanete4 , 0 , 0 , 0
pivotorbiplanete4 = CreatePivot ( pivotplanete4 )
planete4 = CreateSphere ( 32 , pivotplanete4 )
EntityRadius planete4 , 1100
EntityType planete4 , type_ellipsoide
ScaleEntity planete4 , 1000 , 1000 , 1000
EntityTexture planete4 , textureplanete4
Collisions type_ellipsoide , type_ellipsoide , 1 , 3

HidePointer
; api_ShowWindow(SystemProperty$("AppHWND"), 1) ; with user32.dll

While Not KeyHit ( 1 )

;pivot ref change
If parentplayer0 = 0 Then
If EntityDistance ( player0 , pivotplanete4 ) < 3000 Then
oldpitch# = EntityPitch# ( player0 , 1 )
oldyaw# = EntityYaw# ( player0 , 1 )
oldroll# = EntityRoll# ( player0 , 1 )
EntityParent player0 , pivotplanete4 , 1
AlignToVector pivotorbiplanete4 , EntityX ( player0 ) , EntityY ( player0 ) , EntityZ ( player0 ) , 2
EntityParent player0 , pivotorbiplanete4 , 1
RotateEntity player0 , oldpitch# , oldyaw# , oldroll# , 1
;memo local rotations
campitch# = EntityPitch# ( player0 , 0 )
camyaw# = EntityYaw# ( player0 , 0 )
camroll# = 0 ; EntityRoll# ( player0 , 0 )
EndIf
ElseIf parentplayer0 = pivotorbiplanete4 Then
If EntityDistance ( player0 , pivotplanete4 ) > 3200 Then
oldpitch# = EntityPitch# ( player0 , 1 )
oldyaw# = EntityYaw# ( player0 , 1 )
oldroll# = EntityRoll# ( player0 , 1 )
EntityParent player0 , 0 , 1
RotateEntity player0 , oldpitch# , oldyaw# , oldroll# , 1
;memo local rotations
campitch# = EntityPitch# ( player0 , 0 )
camyaw# = EntityYaw# ( player0 , 0 )
camroll# = 0 ; EntityRoll# ( player0 , 0 )
ElseIf EntityDistance ( player0 , pivotplanete4 ) < 3100 Then
EntityParent player0 , pivotplanete4 , 1
AlignToVector pivotorbiplanete4 , EntityX ( player0 ) , EntityY ( player0 ) , EntityZ ( player0 ) , 2
EntityParent player0 , pivotorbiplanete4 , 1
EndIf
EndIf

RotateEntity player0 , campitch# , camyaw# , camroll#
MoveEntity player0 , mvx , 0 , mvz
parentplayer0 = GetParent ( player0 )
Collisions type_ellipsoide , type_ellipsoide , 1 , 3

UpdateWorld
RenderWorld
If parentplayer0 = 0 Then Text GW/4 , 100 , "Free cosmos" , 1 Else
If parentplayer0 = pivotorbiplanete4 Then Text 3*GW/4 , 100 , "Planet orbit" , 1
deplacy# = MouseYSpeed ( ) * mouse_move_speed#
deplacx# = MouseXSpeed ( ) * mouse_move_speed#
MoveMouse GW / 2 , GH / 2

Flip 0
Delay 1

mvx = 0
mvz = 0
If KeyDown ( 200 ) Or KeyDown ( 17 ) Then mvz = vitesse
If KeyDown ( 208 ) Or KeyDown ( 31 ) Then mvz = - vitesse
If KeyDown ( 205 ) Or KeyDown ( 32 ) Then mvx = vitesse
If KeyDown ( 203 ) Or KeyDown ( 30 ) Then mvx = - vitesse

campitch# = ( campitch# + deplacy# ) Mod 360
camyaw# = ( camyaw# - deplacx# ) Mod 360
If campitch# > 90.0 Then campitch# = 90.0
If campitch# < -90.0 Then campitch# = -90.0

Wend

End

Prym