TGC Codebase Backup



Gravity by BigMax

16th Jan 2004 11:08
Summary

A simple test 4 use a Gravity.



Description

Use Max 10 Object.

2 world variables:

Gravita#=world gravity
Attrito#=world attrition

Any object (Sphere) must be defined like "Rem Create Object 1"

so
1) creation,texture and real position of object
2) Insert all info in Oggetti(x), where
2.1) NObj = object number
2.2) PX = xposition
2.3) PY = yposition
2.4) PZ = zposition
2.5) RX = xangle
2.6) RY = yangle
2.7) RZ = zangle
2.8) ForzaX = power in the x axle
2.9) ForzaY = power in the y axle
2.10) ForzaZ = power in the z axle
2.11) Size = the Object's size.
2.12) Peso = the Object's weight
2.13) Rimbalzo = the Object's materials (1 = like rubber, 2 or + = iron)

In this example the object 1 is on the floor and take a power of 100 to up (Y Axle).

If you want to modify this test, an example could be that of an object that falls from the top.

Rem Create Object 1
Make object sphere 1,50
Texture Object 1,2
Position Object 1,0,500,0
Oggetti(1).NObj=1
Oggetti(1).PX=0
Oggetti(1).PY=500
Oggetti(1).PZ=0
Oggetti(1).RX=0
Oggetti(1).RY=0
Oggetti(1).RZ=0
Oggetti(1).ForzaX=0
Oggetti(1).ForzaY=0
Oggetti(1).ForzaZ=0
Oggetti(1).Size=50
Oggetti(1).Peso=1
Oggetti(1).Rimbalzo=1.4
rem End Create Object 1




Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    REM Progetto: Test Gravità
REM Creato:    12/01/2004 10.20.41
REM
REM ***** File Sorgente Principale *****
REM

Type Oggetto
 NObj As Byte
 PX As Float
 PY As Float
 PZ As Float
 RX As Float
 RY As Float
 RZ As Float
 Size As Float
 ForzaX As Float
 ForzaY As Float
 ForzaZ As Float
 Peso As Float
 Rimbalzo As Float
EndType

Global Dim Oggetti(10) As Oggetto

rem Sync On
rem Sync Rate 60

Set window on
Set window size 640,480
Set window title "Test"
Set window layout 1,1,0

Autocam off
Set Camera Range 1,5000
Fog On
Fog Distance 4000
Fog color rgb(128,128,128)
Hide mouse

Load Image "Objsand1.bmp",1
Load Image "Objmetal1.bmp",2

Rem World
Make Matrix 1,3000,3000,32,32
prepare matrix texture 1,1,1,1
position matrix 1,-1500,0,-1500
Rem World

Rem Create Object 1
Make object sphere 1,50
Texture Object 1,2
Position Object 1,0,0,0
Oggetti(1).NObj=1
Oggetti(1).PX=0
Oggetti(1).PY=0
Oggetti(1).PZ=0
Oggetti(1).RX=0
Oggetti(1).RY=0
Oggetti(1).RZ=0
Oggetti(1).ForzaX=0
Oggetti(1).ForzaY=100
Oggetti(1).ForzaZ=0
Oggetti(1).Size=50
Oggetti(1).Peso=1
Oggetti(1).Rimbalzo=1.4
rem End Create Object 1

Position Camera 0,500,500,500
Point Camera 0,Oggetti(1).PX,Oggetti(1).PY,Oggetti(1).PZ
rem set camera to follow object position x(1),object position y(1),object position z(1),180,10,10,50,0

Gravita#=0.5
Attrito#=0.05

Do
 For T=1 to 10
  If Oggetti(T).NObj>0 and (Oggetti(T).PY>Oggetti(T).Size/2) Or (Oggetti(T).ForzaX>0) Or (Oggetti(T).ForzaZ>0)
   If Oggetti(T).ForzaX>0 Then Oggetti(T).ForzaX=Oggetti(T).ForzaX-Attrito#
   If Oggetti(T).PY>Oggetti(T).Size/2 Then Oggetti(T).ForzaY=Oggetti(T).ForzaY-(Gravita#*Oggetti(T).Peso)
   If Oggetti(T).ForzaZ>0 Then Oggetti(T).ForzaZ=Oggetti(T).ForzaZ-Attrito#
   rem If Oggetti(T).Forza<-Gravita# Then Oggetti(T).Forza=-Gravita#

   Oggetti(T).PX=Oggetti(T).PX+Oggetti(T).ForzaX
   Oggetti(T).PY=Oggetti(T).PY+Oggetti(T).ForzaY
   Oggetti(T).PZ=Oggetti(T).PZ+Oggetti(T).ForzaZ

   Oggetti(T).RX=Oggetti(T).RX-Oggetti(T).ForzaZ
   rem Oggetti(T).RY=Oggetti(T).RY+Oggetti(T).ForzaY
   Oggetti(T).RZ=Oggetti(T).RZ-Oggetti(T).ForzaX

   If Oggetti(T).PY<Oggetti(T).Size/2
    If Abs(Oggetti(T).ForzaY)>Gravita#*Oggetti(T).Peso
     Oggetti(T).PY=(Oggetti(T).Size/2)+0.01
     Oggetti(T).ForzaY=abs(Oggetti(T).ForzaY/Oggetti(T).Rimbalzo)
    Else
     Oggetti(T).ForzaY=0
     Oggetti(T).PY=(Oggetti(T).Size/2)
    EndIf
   EndIf

   Position Object Oggetti(T).NObj,Oggetti(T).PX,Oggetti(T).PY,Oggetti(T).PZ
   Rotate Object Oggetti(T).NObj,Oggetti(T).RX,Oggetti(T).RY,Oggetti(T).RZ
   Point Camera 0,Oggetti(T).PX,Oggetti(T).PY,Oggetti(T).PZ
  EndIf
 Next T
Loop