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#
		
	
| 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;
 | |
|         }
 | |
|     }
 | |
| } |