示例#1
0
        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;
        }
示例#3
0
        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());
            }
        }