You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.4 KiB
Lua
189 lines
4.4 KiB
Lua
----------------------------------------------------------------------------------------------------
|
|
--
|
|
-- All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
-- its licensors.
|
|
--
|
|
-- For complete copyright and license terms please see the LICENSE at the root of this
|
|
-- distribution (the "License"). All use of this software is governed by the License,
|
|
-- or, if provided, by the license below or the license accompanying this file. Do not
|
|
-- remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
--
|
|
--
|
|
----------------------------------------------------------------------------------------------------
|
|
Wind = {
|
|
type = "WindController",
|
|
Properties = {
|
|
vVelocity={x=1.0,y=0.0,z=0.0},
|
|
|
|
fFadeTime = 1,--used only when the fog is triggered manually, with activate/deactivate events.
|
|
},
|
|
|
|
Editor={
|
|
Icon="Tornado.bmp",
|
|
},
|
|
}
|
|
|
|
|
|
function Wind:OnInit()
|
|
self.oldVelocity = {x=0.0,y=0.0,z=0.0};
|
|
self.occupied = 0;
|
|
self.lasttime = 0;
|
|
|
|
self:OnReset();
|
|
|
|
self:RegisterForAreaEvents(1);
|
|
end
|
|
|
|
function Wind:OnPropertyChange()
|
|
self:OnReset();
|
|
end
|
|
|
|
function Wind:OnReset()
|
|
self:RegisterForAreaEvents(1);
|
|
end
|
|
|
|
function Wind:OnSave(tbl)
|
|
tbl.bTriggered = self.bTriggered
|
|
tbl.oldVelocity = self.oldVelocity
|
|
tbl.fadeamt = self.fadeamt
|
|
tbl.Who = self.Who
|
|
end
|
|
|
|
function Wind:OnLoad(tbl)
|
|
self.bTriggered = tbl.bTriggered
|
|
self.oldVelocity = tbl.oldVelocity
|
|
self.fadamt = tbl.fadeamt
|
|
self.Who = tbl.Who
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
-- fade: 0-out 1-in
|
|
function Wind:OnProceedFadeArea( player,areaId,fadeCoeff )
|
|
self:Fade(fadeCoeff);
|
|
end
|
|
|
|
function Wind:ResetValues()
|
|
System.SetWind(self.oldVelocity);
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
function Wind:OnEnterArea( player,areaId )
|
|
|
|
if((player and (not player.actor:IsPlayer())) or self.occupied == 1) then
|
|
return
|
|
end
|
|
|
|
self.oldVelocity = System.GetWind();
|
|
|
|
self.occupied = 1;
|
|
end
|
|
|
|
-----------------------------------------------------------------------------
|
|
function Wind:OnLeaveArea( player,areaId )
|
|
|
|
if(player and (not player.actor:IsPlayer())) then
|
|
return
|
|
end
|
|
|
|
self:ResetValues();
|
|
|
|
self.occupied = 0;
|
|
end
|
|
-----------------------------------------------------------------------------
|
|
function Wind:OnShutDown()
|
|
self:RegisterForAreaEvents(0);
|
|
end
|
|
|
|
function Wind:Event_Enable( sender )
|
|
|
|
if(self.occupied == 0 ) then
|
|
|
|
if (self.fadeamt and self.fadeamt<1) then
|
|
self:ResetValues();
|
|
end
|
|
|
|
self:OnEnterArea( );
|
|
|
|
self.fadeamt = 0;
|
|
self.lasttime = _time;
|
|
self.exitfrom = nil;
|
|
end
|
|
|
|
self:SetTimer(0, 1);
|
|
|
|
BroadcastEvent( self,"Enable" );
|
|
end
|
|
|
|
function Wind:Event_Disable( sender )
|
|
|
|
if(self.occupied == 1 ) then
|
|
|
|
--self:OnLeaveArea( );
|
|
self.occupied = 0;
|
|
|
|
self.fadeamt = 0;
|
|
self.lasttime = _time;
|
|
self.exitfrom = 1;
|
|
end
|
|
|
|
self:SetTimer(0, 1);
|
|
|
|
BroadcastEvent( self,"Disable" );
|
|
end
|
|
|
|
function Wind:OnTimer()
|
|
|
|
--System.Log("Ontimer ");
|
|
|
|
self:SetTimer(0, 1);
|
|
|
|
if (self.fadeamt) then
|
|
|
|
local delta = _time - self.lasttime;
|
|
self.lasttime = _time;
|
|
|
|
self.fadeamt = self.fadeamt + (delta / self.Properties.fFadeTime);
|
|
|
|
if (self.fadeamt>=1) then
|
|
|
|
self.fadeamt = 1;
|
|
self:KillTimer(0);
|
|
end
|
|
|
|
----------------------------------------------
|
|
--fade
|
|
local fadeCoeff = self.fadeamt;
|
|
|
|
if (self.exitfrom) then
|
|
fadeCoeff = 1 - fadeCoeff;
|
|
end
|
|
|
|
fadeCoeff = math.sqrt( fadeCoeff );
|
|
fadeCoeff = math.sqrt( fadeCoeff );
|
|
|
|
self:Fade(fadeCoeff);
|
|
--self:OnProceedFadeArea( nil,0,self.fadeamt );
|
|
else
|
|
self:KillTimer(0);
|
|
end
|
|
end
|
|
|
|
function Wind:Fade(fadeCoeff)
|
|
System.SetWind(LerpColors(self.oldVelocity, self.Properties.vVelocity, fadeCoeff));
|
|
end
|
|
|
|
Wind.FlowEvents =
|
|
{
|
|
Inputs =
|
|
{
|
|
Disable = { Wind.Event_Disable, "bool" },
|
|
Enable = { Wind.Event_Enable, "bool" },
|
|
},
|
|
Outputs =
|
|
{
|
|
Disable = "bool",
|
|
Enable = "bool",
|
|
},
|
|
}
|