1 #using scripts\codescripts\struct;
3 #using scripts\shared\array_shared;
4 #using scripts\shared\sound_shared;
5 #using scripts\shared\system_shared;
7 #insert scripts\shared\shared.gsh;
115 platform_triggers = getEntArray(
"elevator_trigger",
"targetname");
116 if(platform_triggers.size <= 0)
121 platform_switches = [];
122 platforms_non_switched = [];
123 platforms_total = [];
124 trigger_target_targets = [];
126 for(i = 0; i < platform_triggers.size; i++)
128 trigger_target = getEnt(platform_triggers[i].target,
"targetname");
130 if(!isdefined(trigger_target))
132 AssertMsg(
"This trigger does not have a target: " + platform_triggers[i].origin);
136 if(isdefined(trigger_target))
138 trigger_target_targets = getEntArray(trigger_target.target,
"targetname");
141 if(isdefined(trigger_target_targets) && (trigger_target_targets.size == 1))
143 platform_switches[platform_switches.size] = trigger_target;
147 platforms_non_switched[platforms_non_switched.size] = trigger_target;
152 for(i = 0; i < platform_switches.size; i++)
154 platform = getEnt(platform_switches[i].target,
"targetname");
156 if(!isdefined(platform))
158 AssertMsg(
"This switch does not target a platform: " + platform_switches[i].origin);
164 for(x = 0; x < platforms_total.size; x++)
166 if(platform == platforms_total[x])
178 platforms_total[platforms_total.size] = platform;
183 for(i = 0; i < platforms_non_switched.size; i++)
187 for(x = 0; x < platforms_total.size; x++)
189 if(platforms_non_switched[i] == platforms_total[x])
201 platforms_total[platforms_total.size] = platforms_non_switched[i];
212 klaxon_speakers = [];
214 platform_start = undefined;
217 platform_name = platform.targetname;
218 platform.at_start =
true;
220 platform_triggers = [];
221 targets_platform = getEntArray(platform_name,
"target");
224 for(i = 0; i < targets_platform.size; i++)
226 if(targets_platform[i].classname ==
"script_model" || targets_platform[i].classname ==
"script_brushmodel")
228 switch_trigger = getEnt(targets_platform[i].targetname,
"target");
229 platform_triggers[platform_triggers.size] = switch_trigger;
233 platform_triggers[platform_triggers.size] = targets_platform[i];
237 platform_targets_Ents = getEntArray(platform.target,
"targetname");
239 platform_targets = ArrayCombine(platform_targets_Ents, platform_targets_Structs,
true,
false);
241 if(platform_targets.size <= 0)
243 AssertMsg(
"This platform does not have any targets: " + platform.origin);
246 if(isdefined(platform_targets))
248 for(i = 0; i < platform_targets.size; i++)
250 if(isdefined(platform_targets[i].script_noteworthy))
252 if(platform_targets[i].script_noteworthy ==
"audio_point")
254 audio_points[audio_points.size] = platform_targets[i];
257 if(platform_targets[i].script_noteworthy ==
"elevator_gate")
259 elevator_gates[elevator_gates.size] = platform_targets[i];
262 if(platform_targets[i].script_noteworthy ==
"elevator_klaxon_speaker")
264 klaxon_speakers[klaxon_speakers.size] = platform_targets[i];
267 if(platform_targets[i].script_noteworthy ==
"platform_start")
269 platform_start = platform_targets[i];
275 if(!isdefined(platform_start))
277 AssertMsg(
"This platform does not target a script_struct with a script_noteworthy of platform_start: " + platform.origin);
280 if(isdefined(elevator_gates) && (elevator_gates.size >0))
285 if(isdefined(klaxon_speakers) && (klaxon_speakers.size >0))
287 array::thread_all(klaxon_speakers,&
elevator_looping_sounds,
"elevator_" + platform_name +
"_move",
"stop_" + platform_name +
"_movement_sound");
290 if(isdefined(audio_points) && (audio_points.size >0))
292 array::thread_all(audio_points,&
elevator_looping_sounds,
"start_" + platform_name +
"_klaxon",
"stop_" + platform_name +
"_klaxon");
295 array::thread_all(platform_triggers,&
trigger_think, platform_name);
306 self waittill(
"trigger");
309 level notify(
"start_" + platform_name +
"_klaxon");
314 level notify(
"elevator_" + platform_name +
"_move");
316 level waittill(
"elevator_" + platform_name +
"_stop");
319 level notify(
"stop_" + platform_name +
"_klaxon");
327 level waittill(notify_play);
329 if(isdefined(
self.script_sound))
339 if(!isdefined(
struct))
341 AssertMsg(
"This gate does not target a script_struct: " +
self.origin);
344 self.origin =
struct.origin;
345 self.angles =
struct.angles;
359 if(isdefined(
self.script_int))
361 amount = (
self.script_int);
368 if(direction ==
"raise_")
370 amount = (amount * -1);
375 speed =
self.script_delay;
384 level waittill(direction + platform_name +
"_gates");
385 self rotatePitch(amount, speed);
395 move_up[move_up.size] = platform_start;
397 platform_start_first_target =
struct::get(platform_start.target,
"targetname");
399 if(!isdefined(platform_start_first_target))
401 AssertMsg(
"This platform start point does not have a script_struct target to move to. There needs to be at least two script_structs to make a path for the elevator to move along: " + platform_start.origin);
405 pstruct = platform_start;
409 if(isdefined(pstruct.target))
413 if(isdefined(pstruct))
415 move_up[move_up.size] = pstruct;
424 for(i = move_up.size - 1; i >= 0; i--)
426 move_down[move_down.size] = move_up[i];
431 level waittill(
"elevator_" + platform_name +
"_move");
435 if(isdefined(level.scr_sound[
"elevator_start"]))
437 self playSound(level.scr_sound[
"elevator_start"]);
444 for(i = 0; i < move_up.size; i++)
446 org = move_up[i + 1];
453 time = distance(
self.origin, org.origin) / speed;
454 self moveto(org.origin, time);
460 if(isdefined(
self.script_sound))
462 self playSound(level.scr_sound[
self.script_sound]);
465 level notify(
"elevator_" + platform_name +
"_stop");
466 level notify(
"stop_" + platform_name +
"_movement_sound");
467 level notify(
"stop_" + platform_name +
"_klaxon");
468 level notify(
"lower_" + platform_name +
"_gates");
470 if(isdefined(level.scr_sound[
"elevator_end"]))
472 self playSound(level.scr_sound[
"elevator_end"]);
475 self.at_start =
false;
479 level notify(
"raise_" + platform_name +
"_gates");
483 level notify(
"elevator_" + platform_name +
"_move");
485 if(isdefined(level.scr_sound[
"elevator_start"]))
487 self playSound(level.scr_sound[
"elevator_start"]);
492 for(i = 0; i < move_down.size; i++)
494 org = move_down[i + 1];
501 time = distance(
self.origin, org.origin) / speed;
502 self moveto(org.origin, time);
508 if(isdefined(
self.script_sound))
510 self playSound(level.scr_sound[
self.script_sound]);
513 level notify(
"elevator_" + platform_name +
"_stop");
514 level notify(
"stop_" + platform_name +
"_movement_sound");
515 level notify(
"stop_" + platform_name +
"_klaxon");
517 if(isdefined(level.scr_sound[
"elevator_end"]))
519 self playSound(level.scr_sound[
"elevator_end"]);
522 self.at_start =
true;
535 if(isdefined(path_point.speed))
537 speed = path_point.speed;