public void StartMovingLeft()
 {
     //acceleration.X = -Constants.WALK_SPEED;
     this.AddForce(new Vector2f(-this.walkSpeed, 0.0f));
     horizontalFacing = HorizontalFacing.FACING_LEFT;
     //m_HorizontalFacing = HorizontalFacing::FACING_LEFT;
 }
Beispiel #2
0
 public void BuildLadder(int ladderx, int laddery, int ladderheight, HorizontalFacing ladderfacing)
 {
     for (int y = 0; y < ladderheight; y++)
     {
         int facingOffset = (ladderfacing == HorizontalFacing.Right ? 1 : -1);
         Tiles[ladderx, laddery + y] = new Ladder(this, ladderx, laddery + y, ladderfacing);
         Tiles[ladderx + facingOffset, laddery + y] = new Wall(this, ladderx + facingOffset, laddery + y);
     }
 }
Beispiel #3
0
        public static SpriteEffects ToMirror(this HorizontalFacing facing)
        {
            switch (facing)
            {
            default:
            case HorizontalFacing.Right:
                return(SpriteEffects.None);

            case HorizontalFacing.Left:
                return(SpriteEffects.FlipHorizontally);
            }
        }
Beispiel #4
0
        public static HorizontalFacing Mirror(this HorizontalFacing facing)
        {
            switch (facing)
            {
            default:
            case HorizontalFacing.Left:
                return(HorizontalFacing.Right);

            case HorizontalFacing.Right:
                return(HorizontalFacing.Left);
            }
        }
Beispiel #5
0
        public static int GetX(this HorizontalFacing facing)
        {
            switch (facing)
            {
            default:
                return(0);

            case HorizontalFacing.Left:
                return(-1);

            case HorizontalFacing.Right:
                return(1);
            }
        }
Beispiel #6
0
        public static Vector2 GetFacingVector(HorizontalFacing facing)
        {
            switch (facing)
            {
            default:
                return(Vector2.Zero);

            case HorizontalFacing.Left:
                return(new Vector2(-1, 0));

            case HorizontalFacing.Right:
                return(new Vector2(1, 0));
            }
        }
Beispiel #7
0
        public virtual void Swing()
        {
            float   sizeMult   = 1;
            Vector2 weaponSize = new Vector2(16, 8);

            weaponSize.X *= Weapon.LengthModifier;
            weaponSize.Y *= Weapon.WidthModifier;
            RectangleF weaponMask = new RectangleF(Human.Position
                                                   + GetFacingVector(Human.Facing) * 8
                                                   + GetFacingVector(Human.Facing) * (weaponSize.X / 2)
                                                   + new Vector2(0, 1)
                                                   - weaponSize / 2f,
                                                   weaponSize);

            /*
             * Vector2 PlayerWeaponOffset = Position + FacingVector * 14;
             * Vector2 WeaponSize = new Vector2(14 / 2, 14 * 2);
             * RectangleF weaponMask = new RectangleF(PlayerWeaponOffset - WeaponSize / 2, WeaponSize);*/
            if (Weapon.CanParry)
            {
                HorizontalFacing Facing       = Human.Facing;
                Vector2          Position     = Human.Position;
                Vector2          FacingVector = GetFacingVector(Facing);
                Vector2          parrySize    = new Vector2(22, 22);
                bool             success      = Human.Parry(new RectangleF(Position + FacingVector * 8 - parrySize / 2, parrySize));
                if (success)
                {
                    Parried = true;
                }
            }
            if (!Parried)
            {
                Human.SwingWeapon(weaponMask, 10);
                SwingVisual(Parried);
                SlashAction = SwingAction.DownSwing;
            }
        }
        protected virtual void init()
        {
            Bounds = new AABB(0, 0, 1, 1);
            Bounds.SetDims(new Vector2f(Constants.CHAR_COLLISON_RECT.Width, Constants.CHAR_COLLISON_RECT.Height));
            Bounds.SetPosByTopLeft(position);

            this.hitCollisionRect.SetDims(new Vector2f(32.0f, 32.0f));
            this.hitCollisionRect.SetPosByTopLeft(position);

            shape           = new RectangleShape();
            shape.FillColor = Color.Green;
            shape.Size      = new Vector2f(Bounds.dims.X, Bounds.dims.Y);

            isJumpActive        = false;
            isOnGround          = false;
            isOnOnewWayPlatform = false;

            horizontalFacing = HorizontalFacing.FACING_RIGHT;

            //must call, else not working
            spriteControl.ChangeState(this.GetSpriteState());

            this.health = 1;
        }
 public void StartMovingRight()
 {
     //acceleration.X = Constants.WALK_SPEED;
     this.AddForce(new Vector2f(this.walkSpeed, 0.0f));
     horizontalFacing = HorizontalFacing.FACING_RIGHT;
 }
Beispiel #10
0
 public virtual bool CanClimb(HorizontalFacing side)
 {
     return(false);
 }
Beispiel #11
0
        public virtual void UpdateAI()
        {
            var        viewSize = new Vector2(200, 100);
            RectangleF viewArea = new RectangleF(Position - viewSize / 2, viewSize);

            if (viewArea.Contains(World.Player.Position))
            {
                Target     = World.Player;
                TargetTime = 200;
            }
            else
            {
                TargetTime--;
                if (TargetTime <= 0)
                {
                    Target = null;
                }
            }

            if (Target != null) //Engaged
            {
                float dx = Target.Position.X - Position.X;

                if (CurrentAction is ActionHidden)
                {
                    CurrentAction = new ActionUnhide(this, 30);
                }
                else if (CurrentAction is ActionHide)
                {
                }
                else if (CurrentAction is ActionUnhide)
                {
                }
                else if (CurrentAction is ActionIdle idle)
                {
                    if (dx < 0)
                    {
                        Facing = HorizontalFacing.Left;
                    }
                    else if (dx > 0)
                    {
                        Facing = HorizontalFacing.Right;
                    }

                    if (idle.Time > 180)
                    {
                        if (Random.NextDouble() < 0.4)
                        {
                            CurrentAction = new ActionSpit(this, Target, new Vector2(0, -70), 60, 20, 20, 20);
                        }
                        else
                        {
                            CurrentAction = new ActionBite(this, 40, 20, 30);
                        }
                    }
                }
            }
            else
            {
                if (CurrentAction is ActionHide)
                {
                }
                else if (CurrentAction is ActionUnhide)
                {
                }
                else if (CurrentAction is ActionIdle)
                {
                    CurrentAction = new ActionHide(this, 80);
                }
            }
        }
Beispiel #12
0
        private void UpdateAI()
        {
            var        viewSize = new Vector2(500, 50);
            RectangleF viewArea = new RectangleF(Position - viewSize / 2, viewSize);

            if (viewArea.Contains(World.Player.Position))
            {
                Target     = World.Player;
                TargetTime = 200;
            }
            else
            {
                TargetTime--;
                if (TargetTime <= 0)
                {
                    Target = null;
                }
            }

            foreach (var head in Heads)
            {
                head.Target = Target;
            }

            if (Target != null) //Engaged
            {
                float dx = Target.Position.X - Position.X;
                float dy = Target.Position.Y - Position.Y;

                if (CurrentAction is ActionDeath)
                {
                }
                else if (CurrentAction is ActionIdle idle)
                {
                    if (idle.Time > 120)
                    {
                        if (Random.NextDouble() > 0.5)
                        {
                            CurrentAction = new ActionAggressive(this);
                        }
                        else
                        {
                            CurrentAction = new ActionIdle(this);
                        }
                    }

                    if (dx < 0)
                    {
                        Facing = HorizontalFacing.Left;
                    }
                    else if (dx > 0)
                    {
                        Facing = HorizontalFacing.Right;
                    }

                    foreach (var head in Heads)
                    {
                        if (head.CurrentAction is Snake.ActionIdle headIdle && headIdle.Time > 80)
                        {
                            head.Facing = Facing;
                            int attackingHeads = Heads.Count(x => !(x.CurrentAction is Snake.ActionIdle || x.CurrentAction is Snake.ActionDeath));
                            if (attackingHeads < 2)
                            {
                                SelectAttack(head);
                            }
                        }
                    }

                    float moveOffset           = -Math.Sign(dx) * Target.Velocity.X * 32;
                    float preferredDistanceMin = idle.MinDistance + moveOffset;
                    float preferredDistanceMax = idle.MaxDistance + moveOffset;
                    if (Math.Abs(dx) > preferredDistanceMax * 1.5f)
                    {
                        WalkConstrained(dx, 1.0f);
                    }
                    else if (Math.Abs(dx) > preferredDistanceMax)
                    {
                        WalkConstrained(dx, 0.5f);
                    }
                    else if (Math.Abs(dx) < preferredDistanceMin)
                    {
                        WalkConstrained(-dx, 0.5f);
                    }
                }
            }
            else //Idle
            {
            }
        }
Beispiel #13
0
 public cSpriteState(MotionType motion, HorizontalFacing h_facing)
 {
     motionType       = motion;
     horizontalFacing = h_facing;
 }