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.
160 lines
4.1 KiB
C#
160 lines
4.1 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.move.IsFlowing && e.hasHp)
|
|
{
|
|
return e.hp.LastDamageDir;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
} |