Пример #1
0
    private void EmulateAi(SimpleEnemyComponent enemy)
    {
        WeaponComponent weapon         = enemy.GetComponentInChildren <WeaponComponent>();
        Vector2         vectorToPlayer = _player.position - enemy.transform.position;

        if (weapon.Range >= vectorToPlayer.magnitude)
        {
        }
    }
Пример #2
0
        //Revert!
        public override void revertToStartingState()
        {
            PositionComponent posComp = ( PositionComponent )getComponent(GlobalVars.POSITION_COMPONENT_NAME);

            level.getMovementSystem().teleportToNoCollisionCheck(posComp, posComp.startingX, posComp.startingY);

            VelocityComponent velComp = ( VelocityComponent )getComponent(GlobalVars.VELOCITY_COMPONENT_NAME);

            velComp.x = 0;
            velComp.y = 0;

            SimpleEnemyComponent simpEnemyComp = ( SimpleEnemyComponent )getComponent(GlobalVars.SIMPLE_ENEMY_COMPONENT_NAME);

            simpEnemyComp.hasLandedOnce = false;
            simpEnemyComp.hasRunOnce    = false;

            HealthComponent healthComp = ( HealthComponent )getComponent(GlobalVars.HEALTH_COMPONENT_NAME);

            healthComp.restoreHealth();
        }
Пример #3
0
        public override void Update(float deltaTime)
        {
            foreach (Entity e in getApplicableEntities())
            {
                //Grab needed components
                SimpleEnemyComponent simpEnemyComp = ( SimpleEnemyComponent )e.getComponent(GlobalVars.SIMPLE_ENEMY_COMPONENT_NAME);
                VelocityComponent    velComp       = ( VelocityComponent )e.getComponent(GlobalVars.VELOCITY_COMPONENT_NAME);

                float speedyBuffer = 0;
                if (!simpEnemyComp.checkCliff && simpEnemyComp.checkCliffOrig && Math.Abs(velComp.x) <= Math.Abs(simpEnemyComp.mySpeed + speedyBuffer))
                {
                    simpEnemyComp.checkCliff = simpEnemyComp.checkCliffOrig;
                }

                if (simpEnemyComp.hasRunOnce && !simpEnemyComp.hasLandedOnce && velComp.y <= 0)
                {
                    simpEnemyComp.hasLandedOnce = true;
                }
                if (velComp.x < 0)
                {
                    simpEnemyComp.movingLeft          = true;
                    simpEnemyComp.wasStoppedLastFrame = false;
                }
                else if (velComp.x > 0)
                {
                    simpEnemyComp.movingLeft          = false;
                    simpEnemyComp.wasStoppedLastFrame = false;
                }
                else if (velComp.x == 0 && velComp.y == 0 && simpEnemyComp.hasLandedOnce)     //If it's been stopped for more than one frame, try changing the direction and see if it can move that way instead.
                {
                    float newVel = simpEnemyComp.mySpeed;
                    if (!simpEnemyComp.movingLeft)
                    {
                        newVel *= -1;
                    }

                    if (simpEnemyComp.wasStoppedLastFrame)
                    {
                        velComp.x = newVel;
                    }

                    simpEnemyComp.wasStoppedLastFrame = true;
                }

                //Change position if it's about to fall off a cliff, and checkCliff is true.
                if (simpEnemyComp.hasLandedOnce && velComp.y == 0 && simpEnemyComp.checkCliff)
                {
                    PositionComponent posComp = ( PositionComponent )e.getComponent(GlobalVars.POSITION_COMPONENT_NAME);
                    ColliderComponent colComp = ( ColliderComponent )e.getComponent(GlobalVars.COLLIDER_COMPONENT_NAME);

                    //Separated out for easy changing.
                    float e1X      = posComp.x;
                    float e1Y      = posComp.y;
                    float e1Width  = colComp.width;
                    float e1Height = colComp.height;

                    //Center width/height values
                    if (e1Width != posComp.width)
                    {
                        float diff = (posComp.width - e1Width);
                        e1X += diff / 2;
                    }
                    if (e1Height != posComp.height)
                    {
                        float diff = (posComp.height - e1Height);
                        e1Y += diff / 2;
                    }

                    List <Entity> collisionsAheadAndBelow = level.getCollisionSystem().findObjectAtPoint(e1X + getSign(velComp.x) * (e1Width / 2 + 1), e1Y + e1Height / 2 + 1);

                    //Remove spikes from the collisions
                    List <Entity> entsToRemove = new List <Entity>();
                    foreach (Entity ent in collisionsAheadAndBelow)
                    {
                        if (ent is SpikeEntity)
                        {
                            entsToRemove.Add(ent);
                        }
                    }
                    foreach (Entity ent in entsToRemove)
                    {
                        collisionsAheadAndBelow.Remove(ent);
                    }

                    if (collisionsAheadAndBelow.Count <= 0)
                    {
                        velComp.x = -velComp.x;
                    }


                    //If there are any bounced bullets, decrease their timer - remove if it's been enough time since bounce.
                    if (simpEnemyComp.bouncedBullets.Count > 0)
                    {
                        List <Entity> toRemove = simpEnemyComp.bouncedBullets.Keys.ToList <Entity>();
                        foreach (Entity bullet in toRemove)
                        {
                            simpEnemyComp.bouncedBullets[bullet] -= deltaTime;
                            if (simpEnemyComp.bouncedBullets[bullet] < 0)
                            {
                                simpEnemyComp.bouncedBullets.Remove(bullet);
                            }
                        }
                    }
                }

                //Face the right way
                if (e is SimpleEnemyEntity)
                {
                    SimpleEnemyEntity enemy = ( SimpleEnemyEntity )e;
                    if (velComp.x > 0 && !enemy.isLookingRight())
                    {
                        enemy.faceRight();
                    }
                    if (velComp.x < 0 && !enemy.isLookingLeft())
                    {
                        enemy.faceLeft();
                    }
                }
                else if (e is FlyingEnemyEntity)
                {
                    FlyingEnemyEntity enemy = ( FlyingEnemyEntity )e;
                    if (velComp.x > 0 && !enemy.isLookingRight())
                    {
                        enemy.faceRight();
                    }
                    if (velComp.x < 0 && !enemy.isLookingLeft())
                    {
                        enemy.faceLeft();
                    }
                }
                simpEnemyComp.hasRunOnce = true;
            }
        }
Пример #4
0
        //------------------------------------------------------------------------------------------------------------------

        //Here's where you add all the components the entity has.
        //You can just uncomment the ones you want.
        public void addMyComponents(float x, float y, bool shield)
        {
            this.updateOutOfView = true;

            /*POSITION COMPONENT - Does it have a position?
             */
            addComponent(new PositionComponent(x, y, defaultWidth, defaultHeight, this), true);

            /*DRAW COMPONENT - Does it get drawn to the game world?
             */
            DrawComponent drawComp = ( DrawComponent )addComponent(new DrawComponent(defaultWidth, defaultHeight, level, true), true);

            List <string> enemyAnimation;
            List <string> enemyAnimDefaults;

            if (!shield)
            {
                enemyAnimation = new List <string>()
                {
                    "Artwork.Creatures.FlyingEnemy1",
                    "Artwork.Creatures.FlyingEnemy2",
                };
                enemyAnimDefaults = new List <string>()
                {
                    "RunningGame.Resources.Artwork.Creatures.FlyingEnemy111.png",
                    "RunningGame.Resources.Artwork.Creatures.FlyingEnemy211.png",
                };
            }
            else
            {
                enemyAnimation = new List <string>()
                {
                    "Artwork.Creatures.FlyingEnemyGlow1",
                    "Artwork.Creatures.FlyingEnemyGlow2",
                };
                enemyAnimDefaults = new List <string>()
                {
                    "RunningGame.Resources.Artwork.Creatures.FlyingEnemyGlow111.png",
                    "RunningGame.Resources.Artwork.Creatures.FlyingEnemyGlow211.png",
                };
            }

            drawComp.addAnimatedSprite(enemyAnimation, enemyAnimDefaults, leftImageName);
            drawComp.setSprite(leftImageName);

            drawComp.addAnimatedSprite(enemyAnimation, enemyAnimDefaults, rightImageName);
            drawComp.rotateFlipSprite(rightImageName, System.Drawing.RotateFlipType.RotateNoneFlipX);

            /* ANIMATION COMPONENT - Does it need animating?
             */
            addComponent(new AnimationComponent(0.05f), true);

            /*VELOCITY COMPONENT - Does it move?
             */
            addComponent(new VelocityComponent(0, 0), true);

            /*COLLIDER - Does it hit things?
             * The second field is the collider type. Look in GlobalVars for a string with the right name.
             */
            addComponent(new ColliderComponent(this, GlobalVars.SIMPLE_ENEMY_COLLIDER_TYPE), true);

            /*HEALTH COMPONENT - Does it have health, can it die?
             */
            addComponent(new HealthComponent(100, true, 0, 100.0f, level), true);

            /*SIMPLE ENEMY COMPONENT
             */
            SimpleEnemyComponent simpEnemyComp = ( SimpleEnemyComponent )addComponent(new SimpleEnemyComponent(GlobalVars.SIMPLE_ENEMY_H_SPEED + new Random().Next(-10, 10), false, shield), true);

            simpEnemyComp.hasLandedOnce = true;

            addComponent(new ScreenEdgeComponent(1, 1, 1, 1));
        }