home *** CD-ROM | disk | FTP | other *** search
- # Droids Cog Script
- #
- # 00_Door_switch.cog
- #
- # Generic Door Script
- #
- # [IS]
- # 01/30/98 [DGS] Added the switch
- # ========================================================================================
-
- symbols
- message startup
- message activate
- message arrived
- message timer
- message blocked
- message pulse
-
- thing door0 linkid=0 mask=0x405
- thing door1 linkid=1 mask=0x405
- thing door2 linkid=2 mask=0x405
- thing door3 linkid=3 mask=0x405
-
- float moveSpeed=8.0
- float sleepTime=2.0
- float lightValue=0.5
-
- surface button0 linkid=5
- surface button1 linkid=5
-
- sector doorSector local
-
- int numDoors=0 local
- int doorStatus local
- int moveStatus local
- int i local
-
- sound act_snd=SWT00DrSwtch.WAV local
- end
-
- # ========================================================================================
-
- code
-
- startup:
- setwallcel(button0,1);
- setwallcel(button1,1);
- for (i=0; i<=3; i=i+1)
- if (door0[i] >= 0) numDoors = numDoors + 1;
-
- doorSector = GetThingSector(door0);
- SetSectorAdjoins(doorSector, 0);
- SetSectorLight(doorSector, lightValue, 0.0); // add some light to door sector
- return;
-
- # ........................................................................................
-
- activate:
- if (getsenderid() == 5)
- {
- call CheckStatus;
- if (moveStatus) return;
- if (doorStatus == 0)
- { // all pieces are at frame 0
- garbage = playsoundpos(act_snd,getsurfacecenter(button0),0.5,-1,-1,0);
- garbage = playsoundpos(act_snd,getsurfacecenter(button1),0.5,-1,-1,0);
- SetSectorAdjoins(doorSector, 1);
- setwallcel(button0,2);
- setwallcel(button1,2);
- call OpenDoors;
- }
- }
- return;
-
- # ........................................................................................
- pulse:
- setwallcel(button0,2-getwallcel(button0));
- setwallcel(button1,2-getwallcel(button1));
- return;
- arrived:
- call CheckStatus;
- if (moveStatus) return;
- if (doorStatus == numDoors)
- { // all pieces are at frame 1
- SetTimer(sleepTime);
- setpulse(0.4);
- }
- else if (doorStatus == 0)
- { // all pieces are at frame 0
- SetSectorAdjoins(doorSector, 0);
- setwallcel(button0,1);
- setwallcel(button1,1);
- }
- return;
-
- # ........................................................................................
-
- blocked:
- call OpenDoors;
- return;
-
- # ........................................................................................
-
- timer:
- setpulse(0);
- setwallcel(button0,2);
- setwallcel(button1,2);
- call CloseDoors;
- return;
-
- # ........................................................................................
-
- OpenDoors:
- for (i=0; i<=3; i=i+1)
- if (door0[i] >= 0) MoveToFrame(door0[i], 1, moveSpeed);
- return;
-
- # ........................................................................................
-
- CloseDoors:
- for (i=0; i<=3; i=i+1)
- if (door0[i] >= 0) MoveToFrame(door0[i], 0, moveSpeed);
- return;
-
- # ........................................................................................
-
- CheckStatus:
- moveStatus = 0;
- doorStatus = 0;
-
- for (i=0; i<=3; i=i+1) {
- if (door0[i] >= 0) {
- moveStatus = moveStatus + IsThingMoving(door0[i]);
- doorStatus = doorStatus + GetCurFrame(door0[i]);
- }
- }
- return;
-
- end
-
-