Verständnisproblem bei Trace / c_trace

Posted By: PloKoon

Verständnisproblem bei Trace / c_trace - 12/10/07 18:23

Hallo zusammen !

Ich bin neu hier ! Darum kurz was zu meinem Hintergrund ! Ich programmiere seit Jahren Software mit c / c++ / basic etc. und wollte mich nun mal mit lite-c befassen ! Ich hänge jetzt allerdings bei dem Befehl "trace" bzw. "c_trace".

Ich habe folgendes Script zu Testzwecken geschrieben :


#include <acknex.h>
#include <default.c>

ENTITY* obj1;

VECTOR vecFrom;
VECTOR vecTo;

function shoot_event()
{
if (event_type==EVENT_SHOOT)
{
obj1.ambient=-300;
obj1.lightrange=200;
}
}

function steuerung()
{
if(mouse_left)
{
vecFrom.x = mouse_cursor.x;
vecFrom.y = mouse_cursor.y;
vecFrom.z = 0;
vec_set(vecTo,vecFrom);
vec_for_screen(vecTo,camera);
vecTo.z = 20000;
//trace_mode=IGNORE_ME+IGNORE_PASSABLE+ACTIVATE_SHOOT;
//trace(vecFrom, vecTo);
c_trace(vecFrom, vecTo, IGNORE_PASSABLE|ACTIVATE_SHOOT);
}
}

action feuer()
{
obj1=my;
my.ambient=0;
set(my,ENABLE_SHOOT);
my.event=shoot_event;
}

action player_act()
{
player=me;
vec_set(camera.x,player.x);
camera.pan=player.pan;
wait(1);
}

void main()
{
video_mode=7;
video_depth=16;
level_load("level.wmb");
wait (2);
while(1)
{
steuerung();
wait(1);
}
}


Ich habe das Script schon mit Hilfe von anderen Forenusern umgeschrieben, aber es funktioniert trotzdem nicht.

Das Level besteht aus einem Terrain, einer Skybox, einem Playermodell und einem Kugekobjekt. Das Ziel ist es, dass bei einem Mausklick auf die Kugel (obj1) die
Funktion "shoot_event" ausgeführt wird und die Kugel dann das ambiente und die lightrange ändert (bei event_type==EVENT_SHOOT) ! Nur irgendwie scheint das event nicht ausgelöst zu werden !?

Danke schon mal für die Hilfe !!
Posted By: TripleX

Re: Verständnisproblem bei Trace / c_trace - 12/10/07 18:44

Hey,

Ich habe jetzt nicht dein ganzes script angeschaut, aber leider ist set(my,ENABLE_SHOOT); falsch.

ENABLE_SHOOT ist ein Flag der NICHT in entity_struct->flags enthalten ist (den die set funktion verändert) sondern in den emask (event enable) flags.

==> me->eflags |= ENABLE_SHOOT; ist die richtige Version.
Posted By: ARAS

Re: Verständnisproblem bei Trace / c_trace - 12/10/07 19:36

Hi,

TripleX hat Dir ja das mit den emask flag schon gesagt. Was noch nicht stimmt ist Deine
Trace Anweisung. Dort fehlt etwas. Ich habe Dir jetzt Dein Skript einmal so umgeschrieben,
das es eigentlich funktionieren müsste. Hoffe ich zumindest.

Code:
 
#include <acknex.h>
#include <default.c>

ENTITY* obj1;

VECTOR vecFrom;
VECTOR vecTo;

function shoot_event()
{
if (event_type==EVENT_SHOOT)
{
obj1.ambient=-300;
obj1.lightrange=200;
}
}

function steuerung()
{
if(mouse_left)
{
vecFrom.x = mouse_cursor.x;
vecFrom.y = mouse_cursor.y;
vecFrom.z = 20;
vec_set(vecTo,vecFrom);
vec_for_screen(vecFrom,camera);
vecTo.z = 20000;
vec_for_screen(vecTo,camera);
c_trace(vecFrom, vecTo, IGNORE_PASSABLE|ACTIVATE_SHOOT);
}
}

action feuer()
{
obj1=my;
my.ambient=0;
my.emask = ENABLE_SHOOT;
my.event=shoot_event;
}

action player_act()
{
player=me;
vec_set(camera.x,player.x);
camera.pan=player.pan;
wait(1);
}

void main()
{
video_mode=7;
video_depth=16;
level_load("level.wmb");
wait (2);
while(1)
{
steuerung();
wait(1);
}
}


Posted By: PloKoon

Re: Verständnisproblem bei Trace / c_trace - 12/10/07 20:22

Hey danke !

Das ging ja schnell !
Ich habe den Startvektor (z) noch auf 40 gesetzt und dann ging es !

Vielen Dank

Gruß

PloKoon
© 2024 lite-C Forums