private static void Recycle(ICommandInput commandInput) { Type type = commandInput.GetType(); if (!commandInputs.ContainsKey(type)) { commandInputs[type] = new Queue <ICommandInput>(); } commandInputs[type].Enqueue(commandInput); }
public void CollectCommandInput(ICommandInput input) { CharacterStateComponent property_CharacterState = GetParent <Unit>().GetComponent <CharacterStateComponent>(); if (property_CharacterState.Get(SpecialStateType.CantDoAction) || property_CharacterState.Get(SpecialStateType.NotInControl)) { return; } collectedNewInput = true; Command command = CommandGCHelper.GetCommand(); command.commandInput = input; currCommands[input.GetType()] = command; }
public static void GetInput(this UnitStateComponent unitStateComponent, int frame, ICommandInput commandInput) { try { //unitStateComponent.collectInput = true; //if (unitStateComponent.currGetInputFrame < frame) // unitStateComponent.currGetInputFrame = frame; //UnitStateDelta unitStateDelta = new UnitStateDelta(); //unitStateDelta.frame = frame; var result = Game.Scene.GetComponent <CommandSimulaterComponent>().commandSimulaters[commandInput.GetType()].Simulate(commandInput, unitStateComponent.unit); switch (result) { case CommandResult_Move result_Move: unitStateComponent.unit.GetComponent <CharacterMoveComponent>().MoveAsync(result_Move.Path).Coroutine(); unitStateComponent.inputResult_Move.Frame = frame; unitStateComponent.inputResult_Move.Id = unitStateComponent.unit.Id; unitStateComponent.inputResult_Move.PathList = new Google.Protobuf.Collections.RepeatedField <Vector3Info>(); for (int i = 0; i < result_Move.Path.Count; i++) { unitStateComponent.inputResult_Move.PathList.Add(new Vector3Info() { X = result_Move.Path[i].x, Y = result_Move.Path[i].y, Z = result_Move.Path[i].z }); } MessageHelper.Broadcast(unitStateComponent.inputResult_Move); break; case CommandResult_UseSkill result_UseSkill: bool checkResult = unitStateComponent.unit.GetComponent <ActiveSkillComponent>().CheckCanUse(result_UseSkill.skillId); if (checkResult) { unitStateComponent.unit.GetComponent <ActiveSkillComponent>().Execute(result_UseSkill.skillId).Coroutine(); } switch ((commandInput as CommandInput_UseSkill).bufferValue) { case BufferValue_Dir bufferValue_Dir: unitStateComponent.useSkill_Dir.SkillId = result_UseSkill.skillId; unitStateComponent.useSkill_Dir.Success = checkResult; unitStateComponent.useSkill_Dir.Id = unitStateComponent.unit.Id; unitStateComponent.useSkill_Dir.PipelineSignal = (commandInput as CommandInput_UseSkill).pipelineSignal; unitStateComponent.useSkill_Dir.Dir = bufferValue_Dir.dir.ToV3Info(); MessageHelper.Broadcast(unitStateComponent.useSkill_Dir); break; } break; } //unitStateDelta.commandResults.Add(result.GetType(), result); //unitStateComponent.unitStatesDic[unitStateComponent.currGetInputFrame] = unitStateDelta; } catch (Exception e) { Log.Error(e.ToString()); } }