Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1 | -- TeleportTrigger class |
2 | -- |
3 | -- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved. |
4 | |
5 | TeleportTrigger = {} |
6 | |
7 | local TeleportTrigger_mt = Class(TeleportTrigger); |
8 | |
9 | function TeleportTrigger:onCreate(id) |
10 | g_currentMission:addUpdateable(TeleportTrigger:new(id)); |
11 | --print("Created TeleportTrigger, id: ", id); |
12 | end; |
13 | |
14 | function TeleportTrigger:new(name) |
15 | local instance = {}; |
16 | setmetatable(instance, TeleportTrigger_mt); |
17 | |
18 | instance.triggerId = name; |
19 | if g_currentMission:getIsClient() then |
20 | addTrigger(name, "triggerCallback", instance); |
21 | end; |
22 | |
23 | instance.triggerSymbol = getChildAt(name, 0); |
24 | instance.triggerPlayerSpawn = getChildAt(name, 1); |
25 | local x, y, z = getTranslation(instance.triggerSymbol); |
26 | instance.posY = y; |
27 | instance.jump = 0.05; |
28 | |
29 | instance.isEnabled = true; |
30 | |
31 | return instance; |
32 | end; |
33 | |
34 | function TeleportTrigger:delete() |
35 | if g_currentMission:getIsClient() then |
36 | removeTrigger(self.triggerId); |
37 | end; |
38 | end; |
39 | |
40 | function TeleportTrigger:update(dt) |
41 | if self.isEnabled then |
42 | rotate(self.triggerSymbol, 0, 0.001 * dt, 0); |
43 | |
44 | self.jump = self.jump - 0.00015 * dt; |
45 | local x, y, z = getTranslation(self.triggerSymbol); |
46 | setTranslation(self.triggerSymbol, x, y + self.jump, z); |
47 | |
48 | if y + self.jump <= self.posY then |
49 | self.jump = 0.05; |
50 | end; |
51 | end; |
52 | end; |
53 | |
54 | function TeleportTrigger:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay) |
55 | if onEnter and self.isEnabled and g_currentMission.controlPlayer and g_currentMission.player ~= nil and otherId == g_currentMission.player.rootNode then |
56 | -- TODO: do a black fade here |
57 | |
58 | local x,y,z = getWorldTranslation(self.triggerPlayerSpawn); |
59 | local dx, dy, dz = localDirectionToWorld(self.triggerPlayerSpawn, 0, 0, 1); |
60 | g_currentMission.player:moveToAbsolute(x,y,z); |
61 | g_client:getServerConnection():sendEvent(PlayerTeleportEvent:new(x,y,z)); |
62 | g_currentMission.player.rotY = Utils.getYRotationFromDirection(dx, dz) + math.pi; |
63 | end; |
64 | end;
|
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de