59 lines
1.8 KiB
Lua
59 lines
1.8 KiB
Lua
local Movement = {}
|
|
local RoleUtils = require("GamePlay.Utils.RoleUtils")
|
|
local Vector2D = require("Utils.Vector2D")
|
|
|
|
function Movement:ctor()
|
|
self.speed = 300.0
|
|
self.accelerate = 300.0
|
|
self.rate = 0.0
|
|
self.direction = Vector2D.New()
|
|
end
|
|
function Movement:ReceiveBeginPlay()
|
|
self.rate = 0.0
|
|
self.direction = Vector2D.Normalize(self.direction)
|
|
end
|
|
|
|
function Movement:SetMoveOriginDirection(vector)
|
|
self.direction = Vector2D.Normalize(vector)
|
|
end
|
|
|
|
function Movement:SetMoveOriginSpeed(speed, accelerate)
|
|
self.speed = speed
|
|
self.accelerate = accelerate
|
|
end
|
|
|
|
function Movement:ReceiveTick(DeltaSeconds)
|
|
local owner = self:GetOwner()
|
|
local role = RoleUtils.GetRole(self)
|
|
|
|
local role_location = role:K2_GetActorLocation()
|
|
local curr_location = owner:K2_GetActorLocation()
|
|
|
|
local accelerate_vector = Vector2D.New(
|
|
role_location.X - curr_location.X,
|
|
role_location.Y - curr_location.Y
|
|
)
|
|
accelerate_vector = Vector2D.Normalize(accelerate_vector)
|
|
|
|
self.rate = self.rate + DeltaSeconds * 0.1
|
|
|
|
local velocity_vector = Vector2D.Mul(self.direction, self.speed)
|
|
local direction_vector= Vector2D.Mul(accelerate_vector, self.speed * self.rate)
|
|
self.direction = Vector2D.Normalize(Vector2D.Add(velocity_vector, direction_vector))
|
|
local new_velocity = Vector2D.Mul(self.direction, self.speed)
|
|
local new_location = Vector2D.New(
|
|
curr_location.X + new_velocity.X * DeltaSeconds,
|
|
curr_location.Y + new_velocity.Y * DeltaSeconds
|
|
)
|
|
self.speed = self.speed + self.accelerate * DeltaSeconds
|
|
owner:K2_SetActorLocation(
|
|
Vector2D.ToUnrealEngine3D(new_location, curr_location.Z),
|
|
true, nil, false
|
|
)
|
|
end
|
|
|
|
function Movement:ReceiveEndPlay()
|
|
print("Movement:ReceiveEndPlay 123")
|
|
end
|
|
|
|
return Class(nil, nil, Movement) |