Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiþii Proiecte Forum DevBlogs Locuri de muncã GDROMag Issue#1 GDROCon 2007

 
Forum » Resurse » Cod sursă (code snippets) » [C++/GDK]Gravity Simulation




Pagina 1 din 1 [ 1 ]

Mesaj Info autor
    Postat la 07 May 2009 11:37:06    Subiect: [C++/GDK]Gravity Simulation
BacioiuC info:

BacioiuC:

Un snippet care simuleaza "atractia gravitationala" a pamantului(in cazu' de fata, sfera) asupra unei nave spatiale(cubu).
http://www.youtube.com/watch?v=PvYY2XGsjA8
Cod sursã:

#include "DarkGDK.h"
#include "SC_Collision.h"
#include "math.h"

void MovementSiColliziune();


float gravity = -0.28f;
float radius = 2;
float radious = 1;
int playervar = 2;
float playerspeed = 0.3;
float speed = 0;
float px;
float py;
float pz;
float dist;
float G = 6.67428 * pow(10.0,-11);
float acceleration;
void DarkGDK ( void )
{
    dbSyncOn   ( );
    dbSyncRate ( 60 );
    dbSetDisplayModeAntialias(1024,768,32,1,4,0);
    dbAutoCamOff();
    SC_Start( );

    //World - 1
    dbMakeObjectSphere(1,50);
    SC_SetupComplexObject(1,1,2);
    //dbGhostObjectOn(1);
    //Player - 2
    dbMakeObjectCube(playervar,radius);
    dbPositionObject(playervar,dbObjectPositionX(1),dbObjectPositionY(1)+30,dbObjectPositionZ(1));

    SC_SetupObject(playervar,0,0);

    //Debug Object
    dbMakeObjectCube(5,1);
    dbColorObject(5,dbRGB(255,0,0));
    dbPositionObject(5,dbObjectPositionX(1),dbObjectPositionY(1)+30,dbObjectPositionZ(1));
    SC_SetupObject(5,0,0);
    while ( LoopGDK ( ) )
    {
        MovementSiColliziune();
    dbControlCameraUsingArrowKeys(0,0.7,0.7);

        dbSync ( );
    }

    return;
}

void MovementSiColliziune()
{

    float oldx = dbObjectPositionX(playervar);
    float oldy = dbObjectPositionY(playervar);
    float oldz = dbObjectPositionZ(playervar);
    
    if(dbKeyState(17))
    {
        dbMoveObject(playervar,playerspeed);    
    }
    if(dbKeyState(31))
    {
        dbMoveObject(playervar,-playerspeed);
    }
dbPositionObject(5,dbObjectPositionX(playervar),dbObjectPositionY(playervar),dbObjectPositionZ(playervar));

px = dbObjectPositionX(1)-dbObjectPositionX(playervar);
py = dbObjectPositionY(1)-dbObjectPositionY(playervar);
pz = dbObjectPositionZ(1)-dbObjectPositionZ(playervar);
dist = (px*px)+(py*py)+(pz*pz);   
acceleration = 0-(20000000000*G)/dist;
speed-=acceleration;

dbPointObject(5,dbObjectPositionX(1),dbObjectPositionY(1),dbObjectPositionZ(1));
dbMoveObject(5, speed);
dbPositionObject(playervar,dbObjectPositionX(5),dbObjectPositionY(5),dbObjectPositionZ(5));

    float newx = dbObjectPositionX(playervar);
    float newy = dbObjectPositionY(playervar);
    float newz = dbObjectPositionZ(playervar);

    int collide = SC_SphereSlideGroup( 1, oldx,oldy,oldz, newx,newy,newz,radious, 0 );
    if(collide)
    {
        dbPositionObject(playervar,SC_GetCollisionSlideX(),SC_GetCollisionSlideY(),SC_GetCollisionSlideZ());
speed = 0;
    }


    
    if(dbKeyState(30))
    {
        dbTurnObjectLeft(playervar,1);
    }

    if(dbKeyState(32))
    {
        dbTurnObjectRight(playervar,1);
    }
    if(dbSpaceKey())
    {
        dbPitchObjectUp(playervar,1);
    }
    if(dbReturnKey())
    {
        dbPitchObjectDown(playervar,2);
    }


}
 

Ultima editare efectuatã de BacioiuC pe 07 May 2009 11:44:39; 1 editãri în total


Status:
Înregistrat pe:
14 Mar 2009 23:58:07
Vârsta: 21 ani
Mesaje: 89
Locatie: Bucuresti
Game designer
Freelancer
 

Pagina 1 din 1 [ 1 ]


Server time: 09:15:55 19.05.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2006 - 2012 Copyright 7thFACTOR Entertainment - All rights reserved