LightSaberScript
Makes an object retractable on trigger with trail & sounds.
Code
local table = {}
function table:Awake()
--system will cache up cols, we should do this manual before disabling collider
self.host.interact:GetCols()
self.initLocalScale = self.blade.localScale
self.blade.localScale = UE.Vector3.zero
self.blade.gameObject:SetActive(false)
self.host.interact:SetAsNoTrail()
self.scaleActId = -1
self.lightUp = false
self.soundPlayTime = 0
self.delayScaleAct = -1
self.isOpen = false
end
function table:UpdateSkill()
local shootInterval = self.shootInterval or 0.1
local st = self.shootTime or 0
local ct = UE.Time.time
if ct - st < shootInterval then
return
end
self:ToggleSaber()
end
function table:ToggleSaber()
if (self.isOpen) then
if (lightUp == false) then
return
end
self.isOpen = self.isOpen == false;
self.host.interact.rb.centerOfMass = UE.Vector3(0, 0, 0)
self.host.interact.rb.mass = 6
self.saberEndSound:PlaySound()
self.soundPlayTime = UE.Time.time
self.trail:StopSmoothly(0.1)
self:DoScale(false)
return
end
self.isOpen = self.isOpen == false;
self.saberBeginSound:PlaySound()
self:DoScale(true)
self.trail:Activate()
self.host.interact.rb.centerOfMass = UE.Vector3(0, 0, 0.5)
self.host.interact.rb.mass = 12
end
function table:DoScale(scaleUp)
self.lightUp = scaleUp
local so = self.host.interact:GetStabObject()
local blade = self.blade
local startScale = blade.localScale
--local endScale = scaleUp ? initLocalScale : Vector3.zero;
local endScale = UE.Vector3.zero
if (scaleUp) then
endScale = self.initLocalScale
end
if (scaleUp) then
blade.gameObject:SetActive(true)
so.scalingForward = true
else
so:BreakAllStab()
end
CL.Scheduler.RemoveSchedule(self.scaleActId)
self.scaleActId = CL.Scheduler.Create(self.host,
function (sche, t, s)
self.blade.localScale = UE.Vector3.Lerp(startScale, endScale, CL.EasingEquations.QuadEaseInOut(t, 0, 1, s))
self.rigidBody.centerOfMass = UE.Vector3(0,0,0);
if (t>=s) then
so.scalingForward = false
if (scaleUp == false) then
self.blade.gameObject:SetActive(false)
so:BreakAllStab()
end
end
end
, 0, 0.1):
SetUpdateChannel(CL.Scheduler.UpdateChannel.FixedUpdate).actionId
end
return Class(nil,nil,table)