You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			154 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
		
		
			
		
	
	
			154 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
| 
											2 years ago
										 | using Entitas; | ||
|  | using UnityEngine; | ||
|  | using Game; | ||
|  | 
 | ||
|  | public class MoveParam | ||
|  | { | ||
|  |     public float MoveForce; | ||
|  |     public float MoveSpeedMax; | ||
|  |     public float AirSpeedMaxRate; | ||
|  |     public float JumpTimeMax; | ||
|  |     public float JumpTimeMin; | ||
|  |     public float JumpForce; | ||
|  |     public float FallForce; | ||
|  |     public float AirDrag; | ||
|  |     public float GroundDrag; | ||
|  |     public float Gravity; | ||
|  |     public bool NeedScale; | ||
|  | } | ||
|  | 
 | ||
|  | [Game] | ||
|  | public class MoveComponent : IComponent | ||
|  | { | ||
|  |     public Transform Transform; | ||
|  |     public Transform TransformViewMain; | ||
|  |     public Rigidbody Rigidbody; | ||
|  |     public MoveParam MoveParam; | ||
|  | 
 | ||
|  |     public Vector3 Position | ||
|  |     { | ||
|  |         get => Transform.position; | ||
|  |         set => Rigidbody.position = value; | ||
|  |     } | ||
|  | 
 | ||
|  |     public Vector3 Velocity | ||
|  |     { | ||
|  |         get => Rigidbody.velocity; | ||
|  |         set => Rigidbody.velocity = value; | ||
|  |     } | ||
|  | 
 | ||
|  |     public float JumpTimeNow; | ||
|  |     public bool IsRight = true; | ||
|  |     public bool IsGround = false; | ||
|  |     public bool IsGroundLogic = false; | ||
|  |     public bool IsAgainstWall = false; | ||
|  |     public bool IsCrashToWall = false; | ||
|  |     public bool IsFlowing = false; | ||
|  |     public bool IsWalk = false; | ||
|  |     public bool IsJumpCommand = false; | ||
|  |     public bool IsJumpPressed = false; | ||
|  |     public bool IsFreeTurn = true; | ||
|  |     public bool IsSlide = false; | ||
|  |     public bool IsSkillAble = true; | ||
|  |     public float MoveSpeedScale = 0f; //移动速度缩放 | ||
|  |     public float TempMoveForceScale = 0f; //移动力临时缩放 时间轴结束时重置 | ||
|  |     public EJumpState JumpState = EJumpState.InAir; | ||
|  |     public Vector3 GroundPosition = Vector3.zero; | ||
|  |     public Vector3 CrashWallPosition = Vector3.zero; | ||
|  |     public Vector3 CrashWallNormal = Vector3.zero; | ||
|  |     public Vector3 MoveDir = Vector3.zero; | ||
|  |     public EMovestepType StepType; | ||
|  |     public Vector3 StepValue; | ||
|  | } | ||
|  | 
 | ||
|  | namespace Game | ||
|  | { | ||
|  |     public abstract partial class Util | ||
|  |     { | ||
|  |         public static void EntityTurn(GameEntity entity, bool isRight) | ||
|  |         { | ||
|  |             entity.move.IsRight = isRight; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void EntityMove(int entity, Vector3 direction) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null) | ||
|  |             { | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             EntityTurn(e, direction.x > 0); | ||
|  |             e.move.IsWalk = true; | ||
|  |             e.move.MoveDir = direction; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void EntityStopMove(int entity) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null) | ||
|  |             { | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             e.move.IsWalk = false; | ||
|  |             e.move.MoveDir = GameConst.NoneDir; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void EntitySetTempMoveForceScale(int entity, float scale) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null) | ||
|  |             { | ||
|  |                 return; | ||
|  |             } | ||
|  | 
 | ||
|  |             e.move.TempMoveForceScale = scale; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static bool EntityInAir(int entity) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null || !e.hasMove) | ||
|  |             { | ||
|  |                 return false; | ||
|  |             } | ||
|  | 
 | ||
|  |             return !e.move.IsGround; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static bool EntityIsWalk(int entity) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null || !e.hasMove) | ||
|  |             { | ||
|  |                 return false; | ||
|  |             } | ||
|  | 
 | ||
|  |             return e.move.IsWalk; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static Vector3 EntityVelocity(int entity) | ||
|  |         { | ||
|  |             var e = Util.GetEntity(entity); | ||
|  |             if (e == null || !e.hasMove) | ||
|  |             { | ||
|  |                 return Vector3.zero; | ||
|  |             } | ||
|  | 
 | ||
|  |             if (e.hasPause && e.pause.IsPause) | ||
|  |             { | ||
|  |                 return e.pause.VelocityCache; | ||
|  |             } | ||
|  |             return e.move.Velocity; | ||
|  |         } | ||
|  | 
 | ||
|  |         public static void ClearMove(GameEntity entity) | ||
|  |         { | ||
|  |             EntityStopMove(entity.ID()); | ||
|  |             var move = entity.move; | ||
|  |             move.Velocity = Vector3.zero; | ||
|  |             move.IsAgainstWall = false; | ||
|  |         } | ||
|  |     } | ||
|  | } |