22 | function MorphPositionEffect:loadEffectAttributes(xmlFile, key, node, i3dNode, i3dMapping) |
23 | if not MorphPositionEffect:superClass().loadEffectAttributes(self, xmlFile, key, node, i3dNode, i3dMapping) then |
24 | return false |
25 | end |
26 | |
27 | self.speed = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "speed"), 1) |
28 | self.fadeCur = {0, 0} |
29 | self.fadeDir = {0, 0} |
30 | |
31 | self.scrollLength = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "scrollLength"), 1) |
32 | self.scrollSpeed = Utils.getNoNil(Effect.getValue(xmlFile, key, getXMLFloat, node, "scrollSpeed"), 1)*0.001 |
33 | self.scrollPosition = 0 |
34 | self.scrollUpdate = true |
35 | |
36 | setShaderParameter(self.node, "morphPosition", 0.0, 1.0, 1.0, 0.0, false) |
37 | setVisibility(self.node, false) |
38 | |
39 | return true |
40 | end |
125 | function MorphPositionEffect:reset() |
126 | self.fadeCur = {math.min(self.offset, 0), math.min(self.offset, 0)} |
127 | self.fadeDir = {0, 1} |
128 | setShaderParameter(self.node, "morphPosition", self.fadeCur[1], self.fadeCur[2], 0.0, self.scrollSpeed, false ) |
129 | setVisibility(self.node, false) |
130 | |
131 | self.state = ShaderPlaneEffect.STATE_OFF |
132 | end |
44 | function MorphPositionEffect:update(dt) |
45 | local running = false |
46 | |
47 | if self.currentDelay > 0 then |
48 | self.currentDelay = self.currentDelay - dt |
49 | end |
50 | |
51 | if self.currentDelay <= 0 and self.state ~= ShaderPlaneEffect.STATE_OFF then |
52 | local fadeTime = self.fadeInTime |
53 | if self.state == ShaderPlaneEffect.STATE_TURNING_OFF then |
54 | fadeTime = self.fadeOutTime |
55 | end |
56 | |
57 | self.fadeCur[1] = math.max(0, math.min(1, self.fadeCur[1] + self.fadeDir[1] * (dt / fadeTime))) |
58 | self.fadeCur[2] = math.max(0, math.min(1, self.fadeCur[2] + self.fadeDir[2] * (dt / fadeTime)), self.offset) |
59 | |
60 | if self.state ~= ShaderPlaneEffect.STATE_OFF and self.state ~= ShaderPlaneEffect.STATE_TURNING_OFF then |
61 | self.fadeCur[1] = self.offset |
62 | end |
63 | setShaderParameter(self.node, "morphPosition", self.fadeCur[1], self.fadeCur[2], 1.0, self.speed, false) |
64 | |
65 | local isVisible = true |
66 | if self.state == ShaderPlaneEffect.STATE_TURNING_OFF then |
67 | if self.fadeCur[1] == 1 then |
68 | isVisible = false |
69 | self.fadeCur[1] = 0 |
70 | self.fadeCur[2] = 0 |
71 | self.state = ShaderPlaneEffect.STATE_OFF |
72 | end |
73 | end |
74 | setVisibility(self.node, isVisible) |
75 | |
76 | if not ((self.state == ShaderPlaneEffect.STATE_TURNING_ON and self.fadeCur[1] == 0 and self.fadeCur[2] == 1) or (self.state == ShaderPlaneEffect.STATE_TURNING_OFF and self.fadeCur[1] == 1 and self.fadeCur[2] == 1) ) then |
77 | running = true |
78 | end |
79 | else |
80 | running = true |
81 | end |
82 | |
83 | if self.scrollUpdate then |
84 | self.scrollPosition = (self.scrollPosition + dt*self.scrollSpeed) % self.scrollLength |
85 | local _, y, z, w = getShaderParameter(self.node, "offsetUV") |
86 | setShaderParameter(self.node, "offsetUV", self.scrollPosition, y, z, w, false) |
87 | end |
88 | |
89 | if not running then |
90 | if self.state == ShaderPlaneEffect.STATE_TURNING_ON then |
91 | self.state = ShaderPlaneEffect.STATE_ON |
92 | elseif self.state == ShaderPlaneEffect.STATE_TURNING_OFF then |
93 | self.state = ShaderPlaneEffect.STATE_OFF |
94 | end |
95 | end |
96 | end |