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) |