#include <default.c>
#include <ackphysx.h>
VECTOR dragon_force;
VECTOR rotatedragon_force;
ENTITY* dragon;
ENTITY* helper;
ENTITY* forceobject;
var follow = 0;
var zoomvar = 400;
var gravityvar = -10;
var flyvar=0;
var wingvar=0;
function camera_follow(ENTITY* ent)
{
while(1)
{
vec_set(camera.x,vector(zoomvar,0,25)); // camera position relative to the player
vec_rotate(camera.x,ent.pan); // rotate the camera position with the player
vec_add(camera.x,ent.x); // add player position
vec_set(camera.pan,vector(ent.pan-180,-ent.tilt,0));
//camera.roll = (helper.roll*-1)+90; ////////// sehr realistische Kameraführung... nicht zu empfehlen, aber lustig
wait(1);
}
}
action my_dragon()
{
dragon = my;
}
action my_forceobject()
{
forceobject = my;
while(1)
{
vec_set(my.x,vector(2,-60,5)); // camera position relative to the player
vec_rotate(my.x,dragon.pan); // rotate the camera position with the player
vec_add(my.x,dragon.x); // add player position
vec_set(my.pan,vector(dragon.pan-180,-dragon.tilt,0));
wait(1);
}
}
function main()
{
physX_open();
level_load ("Dragontestlevel.wmb");
video_mode=10;//auflösung:11 beste (chiras bildschirm),10 ursprung (cb)
//video_screen=1;
screen_size.x = 1000;
screen_size.y = 750;
mouse_mode=4;
wait(2);
pX_setgravity (vector(0, 0, -9.81)); // set the gravity
pXent_settype (dragon, PH_RIGID, PH_BOX); // set the physics entity type
pXent_setmass (dragon, 1); // and its mass
pXent_setfriction (dragon, 100); // set the friction
pXent_setdamping (dragon, 10, 200); // set the damping
pXent_setelasticity (dragon, 1); // set the elasticity
while (1)
{
if (key_x)
{
if(follow==1)
{
follow=0;
}
else
{
follow=1;
}
wait(-1);
}
rotatedragon_force.x = -4000 * time_step * (key_cur - key_cul); // move the dragon using the cursor keys
rotatedragon_force.z = 4000 * time_step * (key_cuu - key_cud);
rotatedragon_force.y = 4000 * time_step * (key_a -key_d);
dragon_force.x = 0;
dragon_force.y = 0;
dragon_force.z = 0;
//pXent_addcentralforce(dragon, dragon_force);
pXent_addtorquelocal (dragon, rotatedragon_force);
if(key_space && wingvar==0)
{
pXent_addexplosion(dragon, vector(forceobject.x,forceobject.y,forceobject.z),20,30);
wingvar=1;
}
if(key_space)
{
pXent_setdamping (dragon,100,200);
}
else
{
pXent_setdamping (dragon,10,200);
wingvar=0;
}
wait (1);
}
}
action my_uoc()
{
////////////////////////////////////////////////////////////////////////////
//hilfe für die kamera... //
//auf uoc basiert die gesamte zoom und drehsache,da die kamera uoc folgt //
////////////////////////////////////////////////////////////////////////////
helper = my;
set(my,PASSABLE);
set(my,IGNORE_PASSENTS);
vec_set(camera.pan,vector(my.pan-180,-my.tilt,0));
camera_follow(me);
while (1)
{
my.x = dragon.x;
my.y = dragon.y;
my.z = dragon.z+8;
if(follow==1)
{
my.pan = dragon.pan;
my.tilt = dragon.tilt;
my.roll = dragon.roll;
}
if (key_e)
{
my.pan += 5 * time_step;
}
if (key_q)
{
my.pan -= 5 * time_step;
}
if (key_pressed(74))
{
zoomvar += 10 * time_step;
}
if (key_pressed(78))
{
if (zoomvar>125)
{
zoomvar -= 10 * time_step;
}
}
if (key_r)
{
my.tilt += 5 * time_step;
}
if (key_f)
{
my.tilt -= 5 * time_step;
}
if (key_g)
{
my.pan = dragon.pan;
}
if (key_t)
{
my.pan = dragon.pan;
my.tilt = dragon.tilt;
zoomvar = 400;
}
wait(1);
}
}