TGC Codebase Backup



Simple Sun, Earth, Moon Orbit Simulation by Alexb Orsova

6th Dec 2005 20:02
Summary

An orbit simulation of a sun, earth, moon and some space junk. Use arrow keys to move camera and + - keys to adjust zoom.



Description

An orbit simulation of a sun, earth, moon and some space junk.
Use arrow keys to move camera and + - keys to adjust zoom.
It's not so accurate, meant for demonstration of DB Pro capabilities.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    rem Prepare Environment
hide mouse : color backdrop RGB(0, 0, 0)
sync on : sync rate 0

rem Loading Prompt
center text screen width() / 2, screen height() / 2, "Loading, please wait..." : sync

rem Create First Row of Debris
for p = 1 to 36
 make object plain p, 3, 3
 color object p, RGB(rnd(20) + 90, rnd(20) + 90, rnd(20) + 90)
next p

rem Create Second Row of Debris
for p = 37 to 72
 make object plain p, 3, 3
 color object p, RGB(rnd(20) + 90, rnd(20) + 90, rnd(20) + 90)
next p

rem Assign values to the placeholder variables
sun = 73
planet = 74
moon = 75
asteroid = 76

rem Create Planets
make object sphere sun, 15
make object sphere planet, 10
make object sphere moon, 5

rem Position Planets
position object sun, 0, 0, 0
position object planet, 0, 0, 0
position object moon, 0, 0, 0

rem Fix the Planet's Pivot
fix object pivot sun
fix object pivot planet
fix object pivot moon

rem Color Planets
rem texture object sun, 1
color object sun, RGB(255, 255, 0)
set object light sun, 0
color object planet, RGB(100, 255, 100)
color object moon, RGB(100, 100, 100)

rem Position First Row of Debris
for p = 1 to 36
 position object p, object position x(sun), object position y(sun), object position z(sun)
 yrotate object p, wrapvalue(p * 10)
 move object p, -60
 rotate object p, rnd(180), 0, rnd(180)
 fix object pivot p
next p

rem Position Second Row of Debris
for p = 37 to 72
 position object p, object position x(sun), object position y(sun), object position z(sun)
 yrotate object p, wrapvalue((p + 0.5) * 10)
 move object p, -65
 rotate object p, rnd(180), 0, rnd(180)
 fix object pivot p
next p

rem Setup Fog
fog on : fog distance 150
fog color RGB(0, 0, 0)

rem Position Camera
position camera 0, 100, 0
point camera 0, 0, 0

rem Setup Camera Variables
camera_angle_x# = 90
camera_angle_y# = 0
camera_zoom# = 100

rem Setup Text
draw to front

rem Setup Light
set point light 0, 0, 0, 0

rem Setup Variables
paused = 0

rem Clear the Screen
cls

rem User Prompt
text 10, 20, "Use the Arrow Keys to Move the Camera."
text 10, 40, "Use P to Pause the Simulation."
text 10, 60, "Use the + and - keys to adjust zoom."
text 10, 80, "Press any key to continue."

sync : wait key

Do

 rem handle pause
 if keystate(25) = 1
  if paused = 0
   paused = 1
   wait 500
  else
   paused = 0
   wait 500
  endif
 endif

 rem handle controls
 if keystate(200) = 1 then camera_angle_x# = camera_angle_x# + 0.2
 if keystate(208) = 1 then camera_angle_x# = camera_angle_x# - 0.2
 if keystate(205) = 1 then camera_angle_y# = camera_angle_y# + 0.2
 if keystate(203) = 1 then camera_angle_y# = camera_angle_y# - 0.2
 if keystate(78) = 1 then camera_zoom# = camera_zoom# - 0.2
 if keystate(74) = 1 then camera_zoom# = camera_zoom# + 0.2
 if keystate(13) = 1 then camera_zoom# = camera_zoom# - 0.2
 if keystate(12) = 1 then camera_zoom# = camera_zoom# + 0.2

 rem wrap camera angles
 camera_angle_x# = wrapvalue(camera_angle_x#)
 camera_angle_y# = wrapvalue(camera_angle_y#)
 if camera_zoom# > 1000 then camera_zoom# = 1000
 if camera_zoom# < 20 then camera_zoom# = 20

 if paused = 1 then goto skip

 rem Position Planet
 position object planet, object position x(sun), object position y(sun), object position z(sun)
 yrotate object planet, wrapvalue(object angle y(planet) - 0.6)
 move object planet, -40

 rem Position Moon
 position object moon, object position x(planet), object position y(planet), object position z(planet)
 yrotate object moon, wrapvalue(object angle y(moon) + 2)
 move object moon, -15

 rem Set Debris Angle
 if debris_angle# = 360 then debris_angle# = 0.0
 debris_angle# = debris_angle# + 0.01

 rem Position Debris Field
 for p = 1 to 36
  ax# = object angle x(p) : az# = object angle z(p)
  position object p, object position x(sun), object position y(sun), object position z(sun)
  rotate object p, 0, 0,0
  yrotate object p, wrapvalue((p * 10) + debris_angle#)
  move object p, -60
  rotate object p, ax#, 0, az#
 next p
 for p = 37 to 72
  ax# = object angle x(p) : az# = object angle z(p)
  position object p, object position x(sun), object position y(sun), object position z(sun)
  rotate object p, 0, 0, 0
  yrotate object p, wrapvalue(((p + 0.5) * 10) + debris_angle#)
  move object p, -65
  rotate object p, ax#, 0, az#
 next p

 skip:

 rem Update Camera
 position camera 0, 0, 0
 rotate camera camera_angle_x#, camera_angle_y#, 0
 move camera camera_zoom# - (camera_zoom# * 2)

 rem Refresh Screen
 sync

Loop