public void ExitRoom(Player player) { int k = 0; while (k < enemies.Count) { Enemy enemy = enemies[k]; if (enemy.temporary) { enemies.Remove(enemy); k--; } else if (enemy.defaultPosition.HasValue) { enemy.position = enemy.defaultPosition.Value; } k++; } bullets.Clear(); particles.Clear(); usePortal = null; if (OnExit != null) { OnExit(this, player); } }
public void EnterRoom(Player player) { if (OnEnter != null) { OnEnter(this, player); } }
public void UpdateEnemy(Room room, Player player) { if (hurtCool > 0) { hurtCool--; } Update(room, player); }
public override void Initialize(Main main) { base.Initialize(main); player = new Player(); player.position = new Vector2(tileSize * 1.5f, tileSize * 1.5f); currentRoom = SetupLevel(player); camera = player.position; }
public override bool Collides(Player player) { if (!collision) { return false; } return Vector2.Distance(player.position, position) < player.radius + radius; }
public override bool Update(Room room, Player player, ref Vector2 camera) { CameraEvent whichEvent = events[currentEvent]; if (currentEvent < events.Count - 1 && whichEvent.timer >= whichEvent.endAction) { currentEvent++; } return events[currentEvent].Update(room, player, ref camera); }
public override sealed bool UpdateBullet(Room room, Player player) { if (timeLeft < totalTime * 3 / 4) { this.collision = true; } timeLeft--; return timeLeft < 0; }
public override sealed bool Update(Room room, Player player) { if (UpdateBullet(room, player)) { return true; } if (Collides(player)) { player.TakeDamage(1); } return false; }
public override sealed bool UpdateBullet(Room room, Player player) { Vector2 oldPos = position; UpdateVelocity(room, player); if (wallCollide) { bool collided; TopLeft = Collision.MovePos(TopLeft, size, size, velocity, room, out collided); if (collided) { return true; } } else { position += velocity; } PostUpdate(room, player); timeLeft--; return timeLeft < 0; }
public bool TakeDamage(int damage, Room room, Player player) { if (CanBeHit) { life -= damage; if (life <= 0) { Kill(room, player); return true; } if (boss) { hurtCool = 180; room.bullets.Clear(); } else { hurtCool = 60; } } return false; }
public virtual bool Update(Room room, Player player, ref Vector2 camera) { if (timer == 0 && camera != targetPos) { Vector2 offset = targetPos - camera; if (offset.Length() < speed) { camera = targetPos; } else { offset.Normalize(); offset *= speed; camera += offset; } } else if (timer < endAction) { timer++; if (timer >= 30 && timer < 30 + actionLength) { DoAction(room, player, timer - 30); } } else { Vector2 offset = player.position - camera; if (offset.Length() < speed) { camera = player.position; return true; } offset.Normalize(); offset *= speed; camera += offset; } return false; }
public virtual bool PlayerInteraction(Room room, int x, int y, Player player) { return false; }
public virtual void OnPlayerCollide(Room room, int x, int y, Player player) { }
public virtual void Update(Room room, int x, int y, Player player) { }
public virtual void UpdateVelocity(Room room, Player player) { }
public abstract bool Collides(Player player);
public abstract bool UpdateBullet(Room room, Player player);
public abstract Room SetupLevel(Player player);
public virtual void PostUpdate(Room room, Player player) { }
public abstract void Update(Room room, Player player);
public bool Collides(Player player) { return Vector2.Distance(position, player.position) < radius + player.radius; }
public void Kill(Room room, Player player) { if (OnDeath != null) { OnDeath(this, room, player); } room.enemies.Remove(this); }
public void DoAction(Room room, Player player) { List<CameraEvent> startEvents = CreateStart(room, player); List<CameraEvent> endEvents = CreateEnd(room, player); Enemy.DeathAction onDeath = (Enemy e, Room r, Player p) => { enemies.Remove(e); if (enemies.Count == 0) { r.cameraEvent = new CameraChainEvent(endEvents); cleared = true; } }; startEvents.Add(new CameraEvent(spawnEnemyCamera, (Room r, Player p, int time) => { CreateEnemies(r, p, enemies); foreach (Enemy e in enemies) { e.temporary = true; e.OnDeath += onDeath; r.enemies.Add(e); } })); room.cameraEvent = new CameraChainEvent(startEvents); }