Ejemplo n.º 1
0
        private void Update_CheckIfINeedToHitStuff(Player plr, GameTime gt)
        {
            Vector2 a;

            if (_position.X < ConvertUnits.ToDisplayUnits(-plr.Position.X) && _position.Y < ConvertUnits.ToDisplayUnits(-plr.Position.Y))
                a = ConvertUnits.ToDisplayUnits(-plr.Position) - _position;
            else
                a = _position - ConvertUnits.ToDisplayUnits(-plr.Position);

            if (direction)
            {

                if (a.X <= 100 && eCurrentState == EnemyState.Alarmed && Update_CheckForPlayersInViewField(plr))
                {

                    eCurrentState = EnemyState.Attacking;
                    amountOfFrames = 3;
                    dealDamage(plr, gt);
                }
                else if (ConvertUnits.ToDisplayUnits(-eBody.Position.Y) > ConvertUnits.ToDisplayUnits(-plr.bPlayer.Position.Y) && eCurrentState == EnemyState.Alarmed && canJump)
                {

                    eBody.ApplyLinearImpulse(new Vector2(0, 250));
                    eCurrentState = EnemyState.Jumping;
                    canJump = false;
                }

            }

            if (!direction)
            {

                if (a.X <= 100 && eCurrentState == EnemyState.Alarmed && a.Y < 100 && Update_CheckForPlayersInViewField(plr))
                {

                    eCurrentState = EnemyState.Attacking;
                    amountOfFrames = 3;
                    dealDamage(plr, gt);
                }
                else if (ConvertUnits.ToDisplayUnits(-eBody.Position.Y) > ConvertUnits.ToDisplayUnits(-plr.bPlayer.Position.Y) && eCurrentState == EnemyState.Alarmed && canJump)
                {

                    eBody.ApplyLinearImpulse(new Vector2(0, 250));
                    canJump = false;
                    eCurrentState = EnemyState.Jumping;
                }

            }
        }
Ejemplo n.º 2
0
        private void Update_CheckState(Player plr)
        {
            if ((Update_CheckForPlayersInViewField(plr) && plr.mCurrentState != Player.State.Dead) || haveSeenRecently && plr.mCurrentState != Player.State.Dead)
            {

                eCurrentState = EnemyState.Alarmed;

            }
            else if (eCurrentState != EnemyState.Jumping)
            {

                eCurrentState = EnemyState.Walking;
                _sprite = idleAnimation;
                currentFrame = new Point(0, 0);
                amountOfFrames = 1;
            }
        }
Ejemplo n.º 3
0
 private void dealDamage(Player plr, GameTime gt)
 {
     damageTimer += gt.ElapsedGameTime;
     if (eCurrentState == EnemyState.Attacking)
     {
         if (damageTimer > TimeSpan.FromMilliseconds(500))
         {
             damageTimer -= TimeSpan.FromMilliseconds(500);
             plr.GetHit(damage);
         }
     }
 }
Ejemplo n.º 4
0
        private bool Update_CheckForPlayersInViewField(Player plr)
        {
            Vector2 startLeft = eBody.Position;
            Vector2 endLeft = startLeft + new Vector2(ConvertUnits.ToSimUnits(-250), 0);

            Vector2 startRight = eBody.Position;
            Vector2 endRight = startRight + new Vector2(ConvertUnits.ToSimUnits(250), 0);

            float fracture = 1;

            bool iHaveHit = false;

            if (!direction)
            {
                try
                {
                    Game1._world.RayCast((f, p, n, fr) =>
                    {
                        fracture = fr;
                        if (f != null && f != plr.bPlayer.FixtureList[0])
                        {
                            iHaveHit = true;

                            return 0;
                        }
                        return fr;
                    }, startLeft, endLeft);
                }
                catch { }
            }
            if (direction)
            {
                try
                {

                    Game1._world.RayCast((f, p, n, fr) =>
                    {
                        fracture = fr;
                        if (f != null && f != plr.bPlayer.FixtureList[0])
                        {

                            iHaveHit = true;
                            // fracture = fr;
                            return 0;
                        }
                        return fr;
                    }, startRight, endRight);
                }
                catch { }
            }

            //if (plr.hitBox.Intersects(viewRectangle)) {

            //    return true;

            //}

            globalFracture = fracture;

            Texture2D rect = new Texture2D(Game1.graphics.GraphicsDevice, 250, currentAnim.frameSize.Y);
            Color[] data = new Color[250 * currentAnim.frameSize.Y];
            for (int i = 0; i < data.Length; ++i) data[i] = Color.AntiqueWhite;
            rect.SetData(data);

            Rectangle left = new Rectangle();
            left.Height = currentAnim.frameSize.Y;
            left.Width = (int)(250 * fracture);
            left.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - (int)(250 * fracture);
            left.Y = (int)ConvertUnits.ToDisplayUnits(eBody.Position.Y);

            Rectangle right = new Rectangle();
            right.Height = currentAnim.frameSize.Y;
            right.Width = (int)(250 * fracture);
            right.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X);
            right.Y = (int)ConvertUnits.ToDisplayUnits(eBody.Position.Y);

            int d = -1;

            if (direction) d = 1;
            else d = 0;

            if (d == 1 && right.Intersects(new Rectangle((int)((ConvertUnits.ToDisplayUnits(Game1.player.bPlayer.Position.X) - Game1.player.currentAnim.frameSize.X / 2)), (int)((ConvertUnits.ToDisplayUnits(-Game1.player.bPlayer.Position.Y - (ConvertUnits.ToSimUnits(Game1.player.currentAnim.frameSize.Y / 2))))), Game1.player.currentAnim.frameSize.X, Game1.player.currentAnim.frameSize.Y)))
            {
                aggroTimer = 0;
                haveSeenRecently = true;
                return true;
            }

            if (d == 0 && left.Intersects(new Rectangle((int)((ConvertUnits.ToDisplayUnits(plr.bPlayer.Position.X) - plr.currentAnim.frameSize.X / 2)), (int)((ConvertUnits.ToDisplayUnits(plr.bPlayer.Position.Y)) + plr.currentAnim.frameSize.Y / 2), plr.currentAnim.frameSize.X, plr.currentAnim.frameSize.Y)))
            {
                aggroTimer = 0;
                haveSeenRecently = true;
                return true;
            }

            return false;
        }
Ejemplo n.º 5
0
        public void Update(Player plr, GameTime gt)
        {
            //   mCurrentState = EnemyState.Idle;

            CIMKTJ = false;

            if (direction)
                holeRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) + 10;
            else
                holeRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - 60;

            holeRectangle.Y = (int)ConvertUnits.ToDisplayUnits(-eBody.Position.Y) + 30;

            if (!canJump)
            {

                jumpTimer += (float)gt.ElapsedGameTime.Milliseconds;

                if (jumpTimer >= 1000.0f)
                {

                    jumpTimer = 0.0f;
                    canJump = true;

                }

            }

            if (haveSeenRecently && !Update_CheckForPlayersInViewField(plr))
                aggroTimer += (float)gt.ElapsedGameTime.Milliseconds;

            if (aggroTimer >= TimeSpan.FromSeconds(6).TotalMilliseconds)
            {

                haveSeenRecently = false;
                aggroTimer = 0;

            }

            for (int i = 0; i < Game1.lightingEngine.Hulls.Count; i++)
            {
                if (Game1.lightingEngine.Hulls[i] == h)
                {

                    Game1.lightingEngine.Hulls[i].Position = ConvertUnits.ToDisplayUnits(new Vector2(eBody.Position.X, -eBody.Position.Y));

                }
            }

            enemyHealth = (int)MathHelper.Clamp(enemyHealth, 0, maxHealth);

            if (eCurrentState != EnemyState.Dead)
            {
                if (!direction)
                {
                    vaPosition.X = _position.X - viewAreaSprite.Width + 40;
                }

                if (direction)
                {

                    vaPosition.X = _position.X + 40;

                }

                enemyRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - frameSize.X / 2;
                enemyRectangle.Y = (int)ConvertUnits.ToDisplayUnits(-eBody.Position.Y) - frameSize.Y / 2;

                Update_CheckState(plr);

                if (Update_CheckForHolesInFrontOfMe())
                {

                    if (Update_CheckIfICanMakeTheJump())
                    {
                        if (!direction && canJump)
                        {
                            eBody.ApplyLinearImpulse(new Vector2(-100, 250));
                            eCurrentState = EnemyState.Jumping;
                            canJump = false;
                        }
                        else if (direction && canJump)
                        {
                            eBody.ApplyLinearImpulse(new Vector2(100, 250));
                            eCurrentState = EnemyState.Jumping;
                            canJump = false;
                        }

                    }
                    else if (eCurrentState != EnemyState.Jumping)
                    {

                        eBody.LinearVelocity = new Vector2(0, eBody.LinearVelocity.Y);
                        eCurrentState = EnemyState.Idle;
                    }
                }
                Update_Move(plr);

                _position = ConvertUnits.ToDisplayUnits(new Vector2(eBody.Position.X, -eBody.Position.Y));

                Update_CheckIfINeedToHitStuff(plr, gt);

                turnTimer += gt.ElapsedGameTime;
                if (eCurrentState == EnemyState.Idle || eCurrentState == EnemyState.Suspicious || eCurrentState == EnemyState.Walking)
                {
                    if (turnTimer > TimeSpan.FromSeconds(2))
                    {
                        if (!direction)
                        {
                            direction = true;

                            turnTimer -= TimeSpan.FromSeconds(2);
                            goto end;
                        }
                        if (direction)
                        {
                            direction = false;

                            turnTimer -= TimeSpan.FromSeconds(2);
                            goto end;
                        }
                    }
                }
                else
                    // Ei käänny toiseen suuntaan kun alarmed
                    turnTimer = TimeSpan.Zero;

            end:

                if (!direction)
                    viewRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X) - currentFrame.X - viewAreaSprite.Width + 10;
                else
                    viewRectangle.X = (int)ConvertUnits.ToDisplayUnits(eBody.Position.X);
                viewRectangle.Y = (int)ConvertUnits.ToDisplayUnits(-eBody.Position.Y) - viewAreaSprite.Height;
            }

            Update_Animation(gt);

            // Facing right
            Update_Direction();

            animTimer += (float)gt.ElapsedGameTime.TotalMilliseconds;

            if (animTimer > currentAnim.animInterval && (!deathLooped))
            {
                currentAnim.currentFrame.X++;
                if (currentAnim.currentFrame.X >= currentAnim.amountOfFrames)
                {
                    if (eCurrentState == EnemyState.Dead && !deathLooped)
                    {

                        deathLooped = true;
                        currentAnim.currentFrame = new Point(3, 2);
                        currentAnim.amountOfFrames = 1;
                        animTimer = 0.0f;
                        return;
                    }

                    currentAnim.currentFrame.X = 0;

                }

                animTimer = 0.0f;
            }
        }
Ejemplo n.º 6
0
        public void takeDamage(Player plr, GameTime gt, bool shuriken, bool fall)
        {
            if (plr.readyToDealDamage && !shuriken)
            {
                enemyHealth -= 20;
                if (eCurrentState != EnemyState.Alarmed)
                {

                    eCurrentState = EnemyState.Alarmed;
                    haveSeenRecently = true;

                }

                plr.readyToDealDamage = false;
            }
            else
            {

                enemyHealth -= 50;
                eCurrentState = EnemyState.Alarmed;
                haveSeenRecently = true;

            }

            if (fall)
            {

                enemyHealth -= maxHealth;

            }

            if (enemyHealth < 1)
            {

                eCurrentState = EnemyState.Dead;
                eBody.LinearVelocity = Vector2.Zero;
                eBody.Enabled = false;
            }
        }
Ejemplo n.º 7
0
        private void Update_Move(Player plr)
        {
            if (eCurrentState != EnemyState.Dead)
            {

                if (eCurrentState == EnemyState.Attacking)
                {

                    eBody.LinearVelocity = Vector2.Zero;

                }

                if (eCurrentState == EnemyState.Alarmed)
                {

                    Vector2 a;

                    a = ConvertUnits.ToDisplayUnits(-plr.Position) - _position;

                    if (!holeDetected)
                    {
                        if (a.X > 0)
                        {

                            eBody.LinearVelocity = new Vector2(7.5f, eBody.LinearVelocity.Y);
                            direction = true;

                        }
                        else
                        {

                            eBody.LinearVelocity = new Vector2(-7.5f, eBody.LinearVelocity.Y);
                            direction = false;

                        }
                    }
                    else if (eCurrentState != EnemyState.Jumping)
                    {

                        eBody.LinearVelocity = new Vector2(0, eBody.LinearVelocity.Y);
                        //	eCurrentState = EnemyState.Idle;

                    }
                }

                if (!holeDetected)
                {

                    if (!direction && eCurrentState == EnemyState.Walking)
                    {

                        eBody.LinearVelocity = new Vector2(-5f, eBody.LinearVelocity.Y);
                        eCurrentState = EnemyState.Walking;

                    }

                    if (direction && eCurrentState == EnemyState.Walking)
                    {

                        eBody.LinearVelocity = new Vector2(5f, eBody.LinearVelocity.Y);
                        eCurrentState = EnemyState.Walking;

                    }
                }
                else if (eCurrentState != EnemyState.Jumping)
                {

                    eBody.LinearVelocity = new Vector2(0, eBody.LinearVelocity.Y);
                    //	eCurrentState = EnemyState.Idle;

                }

                if (eCurrentState == EnemyState.Suspicious)
                {

                    eBody.LinearVelocity = new Vector2(0, 0);
                    eCurrentState = EnemyState.Idle;

                }
            }
            else if (eBody.LinearVelocity != Vector2.Zero && eCurrentState == EnemyState.Dead)
            {

                eBody.LinearVelocity = Vector2.Zero;

            }
        }
Ejemplo n.º 8
0
 internal void Initialize(Player plr, Texture2D nPS)
 {
     connectedPlayers.Add(plr);
     newPlayerSprite = nPS;
     connectedPlayers = new List<Player>();
     PlayerIDs = new List<int>();
     ConnectToServer();
 }
Ejemplo n.º 9
0
        public void Initialize(Texture2D sprite, ProjectileType type, Player plr, Body b, Texture2D shadow)
        {
            B = b;

            alreadyCollidedOnceOrMore = false;

            shade = shadow;

            foreach (var item in Game1.projectiles) {
                B.IgnoreCollisionWith(item.B);
            }

            B.OnCollision += new OnCollisionEventHandler(B_OnCollision);

            uint[] d = new uint[shade.Width * shade.Height];

            shade.GetData(d);

            Vertices v = PolygonTools.CreatePolygon(d, shade.Width, true);

            Vector2[] a = v.ToArray();

            h = ShadowHull.CreateConvex(ref a);

            if (plr.direction == 1)
                dir = 1;

            lock (Game1.projectileLock)
            Game1.lightingEngine.Hulls.Add(h);

            //  B.ApplyLinearImpulse(new Vector2(50, -10));
            if (plr.direction == 1) {
                B.Position = new Vector2(-plr.Position.X, plr.Position.Y + 1);
                B.ApplyTorque(-250f);
                B.LinearVelocity = new Vector2(-65, 7);
            } else {
                B.Position = new Vector2(-plr.Position.X, plr.Position.Y + 1);
                B.ApplyTorque(250f);
                B.LinearVelocity = new Vector2(65, 7);
            }

            Active = true;

            position = ConvertUnits.ToDisplayUnits(-plr.Position);
            texture = sprite;

            Type = type;

            Pelaaja = plr;

            hitBox.Width = 17;
            hitBox.Height = 17;
            hitBox.X = (int)position.X;
            hitBox.Y = (int)position.Y;
        }