initial commit
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
local ____lualib = require("lualib_bundle")
|
||||
local __TS__Class = ____lualib.__TS__Class
|
||||
local __TS__ClassExtends = ____lualib.__TS__ClassExtends
|
||||
local __TS__Decorate = ____lualib.__TS__Decorate
|
||||
local ____exports = {}
|
||||
local ____dota_ts_adapter = require("lib.dota_ts_adapter")
|
||||
local BaseModifierMotionBoth = ____dota_ts_adapter.BaseModifierMotionBoth
|
||||
local registerModifier = ____dota_ts_adapter.registerModifier
|
||||
____exports.modifier_general_arc = __TS__Class()
|
||||
local modifier_general_arc = ____exports.modifier_general_arc
|
||||
modifier_general_arc.name = "modifier_general_arc"
|
||||
modifier_general_arc.____file_path = "scripts/vscripts/abilities/modifiers/modifier_general_arc.lua"
|
||||
__TS__ClassExtends(modifier_general_arc, BaseModifierMotionBoth)
|
||||
function modifier_general_arc.prototype.____constructor(self, ...)
|
||||
BaseModifierMotionBoth.prototype.____constructor(self, ...)
|
||||
self.direction = Vector(0, 0, 0)
|
||||
self.interrupted = false
|
||||
self.duration = 0
|
||||
self.distance = 0
|
||||
self.speed = 0
|
||||
self.height = 0
|
||||
self.const1 = 0
|
||||
self.const2 = 0
|
||||
self.isFlail = false
|
||||
end
|
||||
function modifier_general_arc.prototype.IsHidden(self)
|
||||
return true
|
||||
end
|
||||
function modifier_general_arc.prototype.IsPurgable(self)
|
||||
return false
|
||||
end
|
||||
function modifier_general_arc.prototype.RemoveOnDeath(self)
|
||||
return false
|
||||
end
|
||||
function modifier_general_arc.prototype.OnCreated(self, params)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
local origin = parent:GetOrigin()
|
||||
if not not params.isFlail then
|
||||
self:SetStackCount(1)
|
||||
end
|
||||
if not not params.x then
|
||||
local targetOrigin = Vector(params.x, params.y, 0)
|
||||
local dir = targetOrigin - origin
|
||||
dir = dir:Normalized()
|
||||
self.direction = dir
|
||||
self.distance = (targetOrigin - origin):Length()
|
||||
else
|
||||
self.direction = parent:GetForwardVector()
|
||||
self.distance = params.distance
|
||||
end
|
||||
self.duration = params.duration
|
||||
self.height = params.height
|
||||
self.speed = self.distance / self.duration
|
||||
if self:ApplyHorizontalMotionController() == false or self:ApplyVerticalMotionController() == false then
|
||||
self:Destroy()
|
||||
return
|
||||
end
|
||||
local posEnd = origin + self.direction * self.distance
|
||||
local heightStart = GetGroundHeight(origin, parent)
|
||||
local heightEnd = GetGroundHeight(posEnd, parent)
|
||||
local tempmin = heightStart
|
||||
local tempmax = heightEnd
|
||||
if tempmin > tempmax then
|
||||
tempmin = tempmax
|
||||
tempmax = tempmin
|
||||
end
|
||||
local delta = (tempmax - tempmin) * 2 / 3
|
||||
local heightMax = tempmin + delta + self.height
|
||||
heightEnd = heightEnd - heightStart
|
||||
heightMax = heightMax - heightStart
|
||||
if heightMax < heightEnd then
|
||||
heightMax = heightEnd + 0.01
|
||||
end
|
||||
if heightMax <= 0 then
|
||||
heightMax = 0.01
|
||||
end
|
||||
local durationEnd = (1 + math.sqrt(1 - heightEnd / heightMax)) / 2
|
||||
self.const1 = 4 * heightMax * durationEnd / self.duration
|
||||
self.const2 = 4 * heightMax * durationEnd * durationEnd / (self.duration * self.duration)
|
||||
end
|
||||
function modifier_general_arc.prototype.OnDestroy(self)
|
||||
if IsClient() then
|
||||
return
|
||||
end
|
||||
local parent = self:GetParent()
|
||||
parent:RemoveHorizontalMotionController(self)
|
||||
parent:RemoveVerticalMotionController(self)
|
||||
end
|
||||
function modifier_general_arc.prototype.GetVerticalSpeed(self, time)
|
||||
return self.const1 - 2 * self.const2 * time
|
||||
end
|
||||
function modifier_general_arc.prototype.UpdateHorizontalMotion(self, me, dt)
|
||||
local pos = me:GetOrigin() + self.direction * self.speed * dt
|
||||
me:SetOrigin(pos)
|
||||
end
|
||||
function modifier_general_arc.prototype.UpdateVerticalMotion(self, me, dt)
|
||||
local pos = me:GetOrigin()
|
||||
local time = self:GetElapsedTime()
|
||||
local height = pos.z
|
||||
local speed = self:GetVerticalSpeed(time)
|
||||
pos.z = height + speed * dt
|
||||
me:SetOrigin(pos)
|
||||
end
|
||||
function modifier_general_arc.prototype.OnHorizontalMotionInterrupted(self)
|
||||
self.interrupted = true
|
||||
end
|
||||
function modifier_general_arc.prototype.OnVerticalMotionInterrupted(self)
|
||||
self:Destroy()
|
||||
end
|
||||
function modifier_general_arc.prototype.DeclareFunctions(self)
|
||||
return {MODIFIER_PROPERTY_OVERRIDE_ANIMATION}
|
||||
end
|
||||
function modifier_general_arc.prototype.CheckState(self)
|
||||
return {[MODIFIER_STATE_STUNNED] = true}
|
||||
end
|
||||
function modifier_general_arc.prototype.GetOverrideAnimation(self)
|
||||
if self:GetStackCount() == 1 then
|
||||
return ACT_DOTA_FLAIL
|
||||
else
|
||||
return ACT_DOTA_OVERRIDE_ABILITY_2
|
||||
end
|
||||
end
|
||||
modifier_general_arc = __TS__Decorate(
|
||||
modifier_general_arc,
|
||||
modifier_general_arc,
|
||||
{registerModifier(nil)},
|
||||
{kind = "class", name = "modifier_general_arc"}
|
||||
)
|
||||
____exports.modifier_general_arc = modifier_general_arc
|
||||
return ____exports
|
||||
Reference in New Issue
Block a user