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