2
0
Fork 0
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.

114 lines
4.0 KiB
C#

using Entitas;
using UnityEngine;
using Game;
public class InputSystem : IExecuteSystem, IInitializeSystem
{
public void Initialize()
{
}
public void Execute()
{
BuildFunctionKey();
}
private static void BuildFunctionKey()
{
BuildPlayerAction();
if (!Util.IsControl()) return;
BuildMove();
BuildJump();
BuildTest();
}
private static void BuildTest()
{
if (Input.GetKeyDown(KeyCode.I))
{
var master = Util.GetMaster();
// var castDir = master.move.moveDir;
// castDir = new Vector3(castDir.x, 0, castDir.z);//忽略y
// var rotf = Util.Vec3ToRot(castDir);
// Util.CastEffect(GameConst.EffectHitKill, master.Pos(), rotf, targetEntity: master.ID());
// Util.SetTimeScaleEffect(0, 1, 0.8f);
// Util.SetAberrationEffect(1, 0, 0.7f);
// Util.SetFovEffect(0.9f, 1, 0.7f);
// Util.EntityShake(master, 7);
foreach (var item in Util.GetAllEnemies())
{
var entity = Util.GetEntity(item);
entity.SetPos(master.Pos() + Vector3.up * 3);
}
}
}
private static void BuildPlayerAction()
{
foreach (var item in GameSetting.KeyMap)
{
var functionKey = item.Key;
if (Input.GetKeyDown(item.Value))
{
EventManager.Instance.SendEvent<PPlayerInput>(EEvent.PlayerInput, new PPlayerInput()
{
Key = functionKey,
Action = EKeyActionType.Press,
});
}
if (Input.GetKeyUp(item.Value))
{
EventManager.Instance.SendEvent<PPlayerInput>(EEvent.PlayerInput, new PPlayerInput()
{
Key = functionKey,
Action = EKeyActionType.Release,
});
}
}
}
private static void BuildMove()
{
var leftPress = Input.GetKey(GameSetting.KeyMap[EFunctionKey.Left]);
var rightPress = Input.GetKey(GameSetting.KeyMap[EFunctionKey.Right]);
var upPress = Input.GetKey(GameSetting.KeyMap[EFunctionKey.Up]);
var downPress = Input.GetKey(GameSetting.KeyMap[EFunctionKey.Down]);
var horizonPress = leftPress != rightPress;
var verticalPress = upPress != downPress;
var command = EMoveCommand.Stop;
var commandType = EMoveCommandType.Move;
if (horizonPress && verticalPress)
if (upPress)
command = leftPress ? EMoveCommand.UpLeft : EMoveCommand.UpRight;
else
command = leftPress ? EMoveCommand.DownLeft : EMoveCommand.DownRight;
else if (horizonPress || verticalPress)
if (horizonPress)
command = leftPress ? EMoveCommand.Left : EMoveCommand.Right;
else
command = upPress ? EMoveCommand.Up : EMoveCommand.Down;
else
commandType = EMoveCommandType.Stop;
SendMoveInputEvent(command, commandType);
}
private static void BuildJump()
{
var jumpPress = Input.GetKeyDown(GameSetting.KeyMap[EFunctionKey.Jump]);
if (jumpPress)
{
SendMoveInputEvent(EMoveCommand.Jump, EMoveCommandType.FunctionKey);
}
var jumpRelease = Input.GetKeyUp(GameSetting.KeyMap[EFunctionKey.Jump]);
if (jumpRelease)
{
SendMoveInputEvent(EMoveCommand.JumpRelease, EMoveCommandType.FunctionKey);
}
}
private static void SendMoveInputEvent(EMoveCommand command, EMoveCommandType commandType)
{
var entityID = Util.GetMasterID();
EventManager.Instance.SendEvent(EEvent.EntityMoveInput, new PEntityMoveInput()
{
EntityID = entityID,
Command = command,
CommandType = commandType,
});
}
}