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