コード例 #1
0
        public override void HandleInput(UserCommand command)
        {
            if (state == EquipHandlerState.AskingDiggerName)
            {
                if (string.IsNullOrEmpty(command.FullCommand))
                {
                    Game.WriteLine("A name is required!", PcmColor.Red);
                    return;
                }

                if (DiggerWithNameExists(FormatDiggerName(command.CommandText)))
                {
                    Game.WriteLine($"Digger with the name {diggerName} already exists.", PcmColor.Red);
                    return;
                }

                diggerName = FormatDiggerName(command.CommandText);
            }

            if (claimsAvailable)
            {
                if (state != EquipHandlerState.AskingClaimLeaseId)
                {
                    state = EquipHandlerState.AskingClaimLeaseId;
                    ShowClaims();
                    GameState.PromptText = "Enter Claim Id: ";
                    return;
                }

                if (!int.TryParse(command.CommandText, out int id))
                {
                    Game.WriteLine($"\"{command.CommandText}\" is not a number.");
                    return;
                }

                if (ClaimWithIdDoesNotExists(id))
                {
                    Game.WriteLine($"Claim Lease with {command.CommandText} id doesn't exist.");
                    return;
                }

                var claimLease = GameState.Miner.ClaimLeases.GetAll().First(x => x.Id == id);

                if (claimLease.InUse)
                {
                    Game.WriteLine($"Claim Lease with {id} id is already in use.");
                    return;
                }

                claimLease.AssignDigger(EquipDigger(claimLease.Claim));

                GameState.PromptText = null;
                Game.PopScene();
                return;
            }

            EquipDigger(GameState.MineClaims.Add(new MineClaimFactory().BuildSite()));

            GameState.PromptText = null;
            Game.PopScene();
        }
コード例 #2
0
        public override void Update(Frame frame)
        {
            if (state == EquipHandlerState.Starting)
            {
                if (MinerCanNotEquip())
                {
                    Game.WriteLine("You can't do equip a digger.");
                    GameState.PromptText = null;
                    Game.PopScene();
                    return;
                }

                if (string.IsNullOrEmpty(diggerName))
                {
                    Game.WriteLine("A name is required!", PcmColor.Red);
                    state = EquipHandlerState.AskingDiggerName;
                    GameState.PromptText = "Enter Digger Name: ";
                    return;
                }

                if (DiggerWithNameExists(FormatDiggerName(diggerName)))
                {
                    Game.WriteLine($"Digger with the name {diggerName} already exists.", PcmColor.Red);
                    state = EquipHandlerState.AskingDiggerName;
                    GameState.PromptText = "Enter Digger Name: ";
                    return;
                }

                if (claimsAvailable)
                {
                    if (claimLeaseId <= 0)
                    {
                        ShowClaims();
                        state = EquipHandlerState.AskingClaimLeaseId;
                        GameState.PromptText = "Enter Claim Id: ";
                        return;
                    }

                    var claimLease = GameState.Miner.ClaimLeases.GetAll().First(x => x.Id == claimLeaseId);

                    if (claimLease.InUse)
                    {
                        ShowClaims();
                        Game.WriteLine($"Claim Lease with {claimLeaseId} id is already in use.");
                        state = EquipHandlerState.AskingClaimLeaseId;
                        GameState.PromptText = "Enter Claim Id: ";
                        return;
                    }

                    diggerName = FormatDiggerName(diggerName);
                    claimLease.AssignDigger(EquipDigger(claimLease.Claim));
                    GameState.PromptText = null;
                    Game.PopScene();
                    return;
                }

                diggerName = FormatDiggerName(diggerName);
                EquipDigger(GameState.MineClaims.Add(new MineClaimFactory().BuildSite()));
                GameState.PromptText = null;
                Game.PopScene();
            }
        }