示例#1
0
        private void Game_KeyRelease(char key)
        {
            if (IsMoving)
            {
                return;
            }

            //I don't like this system, what with the key release events and such
            Dictionary <char, char> CtrlChars = new Dictionary <char, char>
            {
                { '\u001a', 'Z' },
                { '\u0018', 'X' },
                { '\u0003', 'C' },
            };

            if (CtrlChars.Keys.Contains(key))
            {
                key = CtrlChars[key];
            }

            key = char.ToUpper(key);
            if (key == 'Z' && !IsMoving && Reticle.ReticleOn != Tile.TileType.Grass && spriteIndex != "player_use")
            {
                ChangeAction("player_use");
                Tile.ChangeTile(Reticle.GridX, Reticle.GridY, Tile.TileType.Grass);
            }
            else if (key == 'X' && !IsMoving && Reticle.ReticleOn != Tile.TileType.Water && GameObject.Objects.Find(x => x.GridX == Reticle.GridX && x.GridY == Reticle.GridY) == null && spriteIndex != "player_use")
            {
                ChangeAction("player_use");
                Tile.ChangeTile(Reticle.GridX, Reticle.GridY, Tile.TileType.Dirt);
            }
            else if (key == 'C' && !IsMoving && StandingOn != Tile.TileType.Water && spriteIndex != "player_punch" && spriteIndex != "player_kick")
            {
                GameObject obj = GameObject.Objects.Find(x => x.GridX == Reticle.GridX && x.GridY == Reticle.GridY && x is IHittable);
                if (obj != null)
                {
                    ChangeAction(Game.R.Next(2) == 0 ? "player_kick" : "player_punch");
                    ((IHittable)obj).Hit(Strength, this);
                }
                else
                {
                    Character character = Characters.Find(x => x is IHittable && x.GridX == Reticle.GridX && x.GridY == Reticle.GridY);
                    if (character != null)
                    {
                        new SoundPlayer(Properties.Resources.Hit_Hurt).Play();
                        ChangeAction(Game.R.Next(2) == 0 ? "player_kick" : "player_punch");
                        ((IHittable)character).Hit(Strength, this);
                    }
                }
            }
            else if (key == 'I')
            {
                Dorf dorf = (Dorf)Characters.FirstOrDefault(x => x is Dorf && x.GridX == Reticle.GridX && x.GridY == Reticle.GridY);
                if (dorf != null)
                {
                    InspectForm inspect = new InspectForm(dorf);
                    inspect.Show();
                }
            }
        }
示例#2
0
 public InspectForm(Dorf dorf)
 {
     InitializeComponent();
     this.dorf = dorf;
     Text = dorf.Name;
     UpdateStats();
     updateTmr.Interval = 100;
     updateTmr.Start();
     updateTmr.Tick += UpdateTmr_Tick;
 }
示例#3
0
文件: Egg.cs 项目: KAkerstrom/origins
        public Egg(Dorf parent) : base(parent.GridX, parent.GridY)
        {
            if (Tile.Map[GridX, GridY].Type != Tile.TileType.Grass || Objects.Any(x => x.GridX == parent.GridX && x.GridY == parent.GridY))
            {
                return;
            }

            Stamina    = parent.Stamina;
            Hunger     = parent.Hunger;
            Thirst     = parent.Thirst;
            Generation = parent.Generation + 1;
            Radiation  = parent.Radiation;

            Strength     = parent.Strength;
            Intelligence = parent.Intelligence;
            Speed        = parent.Speed;

            imageIndex    = 0;
            Solid         = true;
            StatusUpdate += Game.UpdateStatus;
            Objects.Add(this);
        }
示例#4
0
        private void Game_GameStep()
        {
            if (Keyboard.IsKeyDown(Key.S) && !Grabbing)
            {
                Dorf dorf = (Dorf)Character.Characters.FirstOrDefault(x => x is Dorf && x.GridX == GridX && x.GridY == GridY);
                if (dorf != null && dorf.Grab())
                {
                    Grabbing = true;
                    return;
                }

                GameObject obj = GameObject.Objects.FirstOrDefault(x => x.GridX == GridX && x.GridY == GridY);
                if (obj is IGrabbable && ((IGrabbable)obj).Grab())
                {
                    Grabbing = true;
                    return;
                }
            }
            else if (Keyboard.IsKeyUp(Key.S) && Grabbing)
            {
                Dorf dorf = (Dorf)Character.Characters.FirstOrDefault(x => x is Dorf && x.GridX == GridX && x.GridY == GridY);
                if (dorf != null && dorf.IsGrabbed)
                {
                    dorf.LetGo();
                    Grabbing = false;
                    return;
                }

                GameObject obj = GameObject.Objects.FirstOrDefault(x => x.GridX == GridX && x.GridY == GridY);
                if (obj is IGrabbable && ((IGrabbable)obj).Grab())
                {
                    ((IGrabbable)obj).LetGo();
                    Grabbing = false;
                    return;
                }
            }
        }
示例#5
0
        protected override void Step()
        {
            base.Step();

            if (animTimer % 10 == 0 && ++imageIndex > Sprites.CharacterRects[spriteIndex].Count - 1)
            {
                imageIndex = 0;
                if (currentState == PredState.Emerge)
                {
                    nextState = PredState.Idle;
                }
            }

            if (currentState != nextState)
            {
                stateTimer = 0;
            }
            currentState = nextState;
            int xMove, yMove;

            switch (currentState)
            {
            case PredState.Emerge:
                ChangeSprite("pred_emerge");
                break;

            case PredState.Idle:
                ChangeSprite("pred_idle");
                if (!IsMoving)
                {
                    Dorf foundFood = (Dorf)Characters.FirstOrDefault(x => x is Dorf && Math.Abs(x.GridX - GridX) < 5 && Math.Abs(x.GridY - GridY) < 5);
                    if (foundFood != null)
                    {
                        nextState = PredState.ChaseDorf;
                    }
                    else
                    {
                        bool horizontal = Game.R.Next(2) == 0;
                        Move(horizontal ? Game.R.Next(3) - 1 : 0, horizontal ? 0 : Game.R.Next(3) - 1);
                        nextState = PredState.Wander;
                    }
                }
                break;

            case PredState.Wander:
                ChangeSprite("pred_run");
                if (!IsMoving)
                {
                    nextState = PredState.Idle;
                }
                break;

            case PredState.ChaseDorf:
                ChangeSprite("pred_run");
                if (!IsMoving)
                {
                    Dorf foundFood = (Dorf)Characters.FirstOrDefault(x => x is Dorf && Math.Abs(x.GridX - GridX) + Math.Abs(x.GridY - GridY) == 1);
                    if (foundFood != null && StandingOn != Tile.TileType.Water)
                    {
                        nextState = PredState.Attack;
                    }
                    else
                    {
                        if (localView.MoveToward(localView.GetNearestCharacter(typeof(Dorf)), out xMove, out yMove) && !Game.GridPointOccupied(GridX + xMove, GridY + yMove, true, this))
                        {
                            Move(xMove, yMove);
                        }
                        else
                        {
                            //Move randomly until it can get to the Dorf
                            bool horizontal = Game.R.Next(2) == 0;
                            Move(horizontal ? Game.R.Next(3) - 1 : 0, horizontal ? 0 : Game.R.Next(3) - 1);
                        }
                    }
                }
                break;

            case PredState.Attack:
                ChangeSprite("pred_attack");
                if (stateTimer == 0)
                {
                    Dorf foundFood = (Dorf)Characters.FirstOrDefault(x => x is Dorf && Math.Abs(x.GridX - GridX) + Math.Abs(x.GridY - GridY) == 1);
                    if (foundFood != null)
                    {
                        new SoundPlayer(Properties.Resources.Hit_Hurt2).Play();
                        foundFood.Hit(Strength, this);
                    }
                }
                else if (stateTimer > 40)
                {
                    nextState = PredState.Idle;
                }
                break;

            case PredState.Hurt:
                ChangeSprite("pred_hurt");
                if (stateTimer >= 30)
                {
                    nextState = PredState.Idle;
                }
                break;
            }
        }