Sprache Deutsch Language English

Script Dokumentation LS 2015 - SlideDoorTrigger (Patch 1.3)

Script Dokumentation Übersicht

scripts/triggers/SlideDoorTrigger.lua

Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1-- SlideDoorTrigger class
2--
3-- Upon player entry, this trigger moves its children. Each child is assumed to be a slide door and contains user attributes that indicate in which direction it moves.
4-- The slide doors pause when fully opened and then close automatically (if the player does not remain inside the trigger).
5--
6-- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
7
8SlideDoorTrigger = {}
9
10local SlideDoorTrigger_mt = Class(SlideDoorTrigger);
11
12function SlideDoorTrigger:onCreate(id)
13 g_currentMission:addUpdateable(SlideDoorTrigger:new(id));
14 --print("Created SlideDoorTrigger, id: ", id);
15end;
16
17function SlideDoorTrigger:new(triggerId)
18 local self = {};
19 setmetatable(self, SlideDoorTrigger_mt);
20
21 self.triggerId = triggerId;
22 addTrigger(triggerId, "triggerCallback", self);
23
24 local num = getNumOfChildren(triggerId);
25
26 self.slideDoors = {};
27
28 for i = 1, num do
29 local slideDoor = {};
30 slideDoor.node = getChildAt(triggerId, i - 1);
31 slideDoor.startX, slideDoor.startY, slideDoor.startZ = getTranslation(slideDoor.node);
32 slideDoor.endX = slideDoor.startX + tonumber(Utils.getNoNil(getUserAttribute(slideDoor.node, "translateX"), "0"));
33 slideDoor.endY = slideDoor.startY + tonumber(Utils.getNoNil(getUserAttribute(slideDoor.node, "translateY"), "0"));
34 slideDoor.endZ = slideDoor.startZ + tonumber(Utils.getNoNil(getUserAttribute(slideDoor.node, "translateZ"), "0"));
35 table.insert(self.slideDoors, slideDoor);
36 end;
37
38 self.opening = false;
39 self.closing = false;
40 self.pausing = false;
41
42 self.playerLeft = false;
43
44 self.speed = tonumber(Utils.getNoNil(getUserAttribute(triggerId, "speed"), "0.001"));
45
46 self.pauseDuration = tonumber(Utils.getNoNil(getUserAttribute(triggerId, "pauseDuration"), "2000"));
47 self.pauseTime = self.pauseDuration;
48
49 self.doorPos = 0;
50
51 self.isEnabled = true;
52
53
54 return self;
55end;
56
57function SlideDoorTrigger:delete()
58 if self.triggerId ~= nil then
59 removeTrigger(self.triggerId);
60 self.triggerId = nil;
61 end;
62end;
63
64function SlideDoorTrigger:update(dt)
65 if self.isEnabled then
66 local moving = false;
67
68 if self.pausing then
69 self.pauseTime = self.pauseTime - dt;
70 if self.pauseTime <= 0 then
71 self.pausing = false;
72 self.closing = true;
73 end;
74 end;
75
76 if self.opening then
77 moving = true;
78 self.doorPos = self.doorPos + self.speed * dt;
79 if self.doorPos > 1 then
80 self.doorPos = 1;
81 self.opening = false;
82 if self.playerLeft then
83 self.pausing = true;
84 self.pauseTime = self.pauseDuration;
85 end;
86 end;
87 end;
88
89 if self.closing then
90 moving = true;
91 self.doorPos = self.doorPos - self.speed * dt;
92 if self.doorPos < 0 then
93 self.doorPos = 0;
94 self.closing = false;
95 end;
96 end;
97
98 if moving then
99 for _, slideDoor in pairs(self.slideDoors) do
100 local x = (1 - self.doorPos) * slideDoor.startX + self.doorPos * slideDoor.endX;
101 local y = (1 - self.doorPos) * slideDoor.startY + self.doorPos * slideDoor.endY;
102 local z = (1 - self.doorPos) * slideDoor.startZ + self.doorPos * slideDoor.endZ;
103 setTranslation(slideDoor.node, x, y, z);
104 end;
105 end;
106
107 end;
108end;
109
110function SlideDoorTrigger:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
111 if self.isEnabled and (onEnter or onLeave) then
112 if g_currentMission.players[otherId] ~= nil then
113 if onEnter then
114 self.playerLeft = false;
115
116 if self.pausing then
117 self.pausing = false;
118 end;
119
120 self.opening = true;
121 self.closing = false;
122 else
123 self.playerLeft = true;
124 if not self.opening then
125 self.pausing = true;
126 self.pauseTime = self.pauseDuration;
127 end;
128 end;
129 end;
130 end;
131end;
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
Script Dokumentation Übersicht