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(EEvent.PlayerInput, new PPlayerInput() { Key = functionKey, Action = EKeyActionType.Press, }); } if (Input.GetKeyUp(item.Value)) { EventManager.Instance.SendEvent(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, }); } }