// CSCAN.c
#include <default.c>
#include <acknex.h>
#define SRV_CAM 1
#define ON 1
#define OFF 0
SOUND* alarm = "Alarm.wav";
var alarm_handle;
var alarm_mode = OFF;
var alarm_launched = OFF;
function alarming()
{
if(alarm_mode == ON && alarm_launched != ON)
{
alarm_launched = ON;
snd_start(alarm_handle);
}
else if (alarm_mode ==OFF && alarm_launched ==ON)
{
alarm_launched = OFF;
snd_pause(alarm_handle);
}
}
function detected()
{
ENTITY* playerAvatar = you;
ENTITY* cameraAvatar = me;
while (event_type == EVENT_DETECT)
{
c_trace(my.x,you.x,IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT|IGNORE_CONTENT);
if (you == player)
{
alarm_mode = ON;
alarming();
wait(1);
}
}
if (event_type != EVENT_DETECT)
{
alarm_mode =OFF;
alarming();
}
}
SOUND* cam_actuator = "Actuator.wav";
var cam_actuator_handle;
action SRVCamera()
{
var counter = 0;
var cam_step = 2;
var cam_max_rot = 60;
var cam_stop_time = 250;
var cam_scan_range = 150;
var cam_scan_cone_horizontal = 45;
var cam_scan_cone_vertical = 45;
my.emask |= ENABLE_DETECT;
my.event = detected;
//Playing the actuator sound as the camera moves
cam_actuator_handle= ent_playloop(my,cam_actuator,40);
//Rotating the camera for one time for 90 degrees
for (counter=0;counter<=cam_max_rot;counter+=cam_step*time_step)
{
my.pan =counter;
c_scan(my.x,my.pan,vector(cam_scan_cone_horizontal,cam_scan_cone_vertical,cam_scan_range),SCAN_ENTS | SCAN_LIMIT|IGNORE_ME);
wait(1);
}
my.pan = counter = cam_max_rot;
//The actuator sound stops when the camera stops
snd_pause(cam_actuator_handle);
wait(cam_stop_time);
while (1)
{
//The actuator sound plays again when the camera starts moving
snd_start(cam_actuator_handle);
while (counter <= cam_max_rot && counter> -cam_max_rot)
{
counter -= cam_step *time_step;
my.pan =counter;
c_scan(my.x,my.pan,vector(cam_scan_cone_horizontal,cam_scan_cone_vertical,cam_scan_range),SCAN_ENTS | SCAN_LIMIT|IGNORE_ME);
wait (1);
}
my.pan =counter = -cam_max_rot;
snd_pause(cam_actuator_handle);
wait(cam_stop_time);
snd_start(cam_actuator_handle);
while (counter <= cam_max_rot && counter>= -cam_max_rot)
{
counter += cam_step *time_step;
my.pan =counter;
c_scan(my.x,my.pan,vector(cam_scan_cone_horizontal,cam_scan_cone_vertical,cam_scan_range),SCAN_ENTS | SCAN_LIMIT|IGNORE_ME);
wait (1);
}
my.pan =counter = cam_max_rot;
snd_pause(cam_actuator_handle);
wait(cam_stop_time);
wait(1);
}
}
var MoveSpeed = 8;
var TurnSpeed = 8;
action move()
{
alarm_handle = snd_loop(alarm,100,0);
snd_pause(alarm_handle);
player = me;
my.emask|=ENABLE_SCAN;
while (1)
{
if(key_w)
{
c_move(me,vector(MoveSpeed*time_step,0,0),nullvector, GLIDE);
}
if(key_s)
{
c_move(me,vector(MoveSpeed* -time_step,0,0),nullvector, GLIDE);
}
if(key_a)
{
me.pan +=TurnSpeed*time_step;
}
if(key_d)
{
me.pan -=TurnSpeed*time_step;
}
wait(1);
}
}
function main()
{
level_load("CSCAN.wmb");
wait (2);
}