Camera and Door Cog


[ Follow Ups ] [ Post Followup ] [ The Massassi Temple Message Board ]

Posted by matt on October 27, 1998 at 16:48:00:

I have another cog question. What I want this cog to do is open a door and go to an external camera view at a specified ghost point from hitting one console. The point being to press the console that opens a door in another room, and then the camera shows you what you've done. The camera part works fine but I can't get the door to work. It's strange because the door worked one time but after it started to open it disappeared and the doorway started HOMming. Is it possible to put 2 different actions like this in one cog and have them activated by only one console? Thanks. Here's the cog:

symbols

thing console desc=console
thing camera0 desc=camera_ghost
thing door0

flex delay=1.5 desc=delay
flex movespeed=8.0
flex sleeptime=2.0
flex lightvalue=0.5


int doorsector local
int numdoors=0 local
int doorstatus=0 local
int movestatus=0 local
int garbage=-1 local
int dummy=0 local


int old_camera local
int player local
int active=0 local

sound onSound=set_hi2.wav local
sound offSound=lgclick1.wav local
sound locksound=df_door2-3.wav local

message startup
message arrived
message blocked
message activated
message timer
end

# ========================================================================================
code
startup:
if(door0 >= 0) numdoors = numdoors + 1;
if(door1 >= 0) numdoors = numdoors + 1;
if(door2 >= 0) numdoors = numdoors + 1;
if(door3 >= 0) numdoors = numdoors + 1;

doorsector = GetThingSector(door0);
SectorAdjoins(doorsector, 0);
SectorLight(doorsector, lightvalue, 0.0);
return;

# ........................................................................................

activated:
if(active) Return;
active = 1;

if (GetSenderId() == 1)
{
dummy=PlaySoundLocal(locksound, 1, 0, 0);
}
else if (GetSenderId() == 2)
{
call checkstatus;
if (movestatus) return;
if (doorstatus == 0)
{
garbage = PlaySoundThing(onSound, door0, 0.6, -1, -1, 0);
garbage = setwallcel(console, 1);
if (console >= 0) garbage = setwallcel(console, 1);
sectoradjoins(doorsector, 1);
call open_doors;
}
}
player = GetSourceRef();

if(player == GetLocalPlayerThing())

SetActorFlags(player, 0xa00000);
old_camera = GetCurrentCamera();
SetCurrentCamera(0);
SetCameraFocus(0, camera0);

Sleep(delay);

SetTimer(delay);

Return;

timer:
ClearActorFlags(player, 0xa00000);
SetCameraFocus(0, player);
SetCurrentCamera(old_camera);
active = 0;

Return;

# ........................................................................................

arrived:
call checkstatus;
if(movestatus) return;
if(doorstatus == numdoors)
{
sleep(sleeptime);
call close_doors;
}
else if(doorstatus == 0)
{
garbage = PlaySoundThing(offSound, door0, 0.6, -1, -1, 0);
garbage = setwallcel(console, 0);
if(console >= 0) garbage = setwallcel(console, 0);
sectoradjoins(doorsector, 0);
}
return;

# ........................................................................................

blocked:
call open_doors;
return;

# ........................................................................................

open_doors:
movetoframe(door0, 1, movespeed);
if (door1 >= 0) movetoframe(door1, 1, movespeed);
if (door2 >= 0) movetoframe(door2, 1, movespeed);
if (door3 >= 0) movetoframe(door3, 1, movespeed);
return;

close_doors:
movetoframe(door0, 0, movespeed);
if (door1 >= 0) movetoframe(door1, 0, movespeed);
if (door2 >= 0) movetoframe(door2, 0, movespeed);
if (door3 >= 0) movetoframe(door3, 0, movespeed);
return;

checkstatus:
movestatus = ismoving(door0);
if (door1 >= 0) movestatus = movestatus + ismoving(door1);
if (door2 >= 0) movestatus = movestatus + ismoving(door2);
if (door3 >= 0) movestatus = movestatus + ismoving(door3);

doorstatus = getcurframe(door0);
if (door1 >= 0) doorstatus = doorstatus + getcurframe(door1);
if (door2 >= 0) doorstatus = doorstatus + getcurframe(door2);
if (door3 >= 0) doorstatus = doorstatus + getcurframe(door3);
return;


end



Follow Ups:



Post a Followup

Name:
E-Mail:

Subject:

Comments:

Optional Link URL:
Link Title:
Optional Image URL:


[ Follow Ups ] [ Post Followup ] [ The Massassi Temple Message Board ]