private void EmulateAi(SimpleEnemyComponent enemy) { WeaponComponent weapon = enemy.GetComponentInChildren <WeaponComponent>(); Vector2 vectorToPlayer = _player.position - enemy.transform.position; if (weapon.Range >= vectorToPlayer.magnitude) { } }
//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(); }
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; } }
//------------------------------------------------------------------------------------------------------------------ //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)); }