void BossEntity::update() { if(active) { if(health <= 0) state = STATE_DYING; switch(state) { case STATE_MOVING: updateMoving(); break; case STATE_ATTACKING: updateAttacking(); break; case STATE_PANIC: updatePanic(); break; case STATE_DYING: updateDying(); break; } } else { if(overlaps(*camera)) active = true; } }
void HatSystem::process(float dt) { auto& entities = getEntities(); for (auto& entity : entities) { auto& hat = entity.getComponent<MagicHat>(); switch (hat.state) { case MagicHat::Spawning: hat.spawnTime -= dt; updateSpawning(entity, dt); break; case MagicHat::Dying: updateDying(entity, dt); break; case MagicHat::Idle: updateIdle(entity); break; } } if (!m_hatActive) { //check to see if we should spawn a hat m_nextHatTime -= dt; if (m_nextHatTime < 0) { m_nextHatTime = xy::Util::Random::value(MinHatTime, MaxHatTime); m_hatActive = true; sf::Vector2f position(xy::Util::Random::value(128.f, MapBounds.width - 128.f), xy::Util::Random::value(256.f, 512.f)); //spawn a hat auto scene = getScene(); auto entity = scene->createEntity(); entity.addComponent<xy::Transform>().setPosition(position); entity.getComponent<xy::Transform>().setOrigin(PlayerOrigin); entity.addComponent<Actor>().id = entity.getIndex(); entity.getComponent<Actor>().type = ActorID::MagicHat; entity.addComponent<MagicHat>(); entity.getComponent<MagicHat>().state = MagicHat::Spawning; entity.addComponent<CollisionComponent>().addHitbox(PlayerBounds, CollisionType::MagicHat); entity.getComponent<CollisionComponent>().setCollisionCategoryBits(CollisionFlags::MagicHat); entity.getComponent<CollisionComponent>().setCollisionMaskBits( CollisionFlags::Solid | CollisionFlags::Platform | CollisionFlags::Teleport | CollisionFlags::Player); entity.addComponent<xy::QuadTreeItem>().setArea(PlayerBounds); entity.addComponent<AnimationController>(); entity.addComponent<xy::CommandTarget>().ID = CommandID::MapItem; //so we can destroy at whim //broadcast to clients ActorEvent evt; evt.actor.id = entity.getIndex(); evt.actor.type = entity.getComponent<Actor>().type; evt.x = position.x; evt.y = position.y; evt.type = ActorEvent::Spawned; evt.serverTime = GameServer::getServerTime(); m_host.broadcastPacket(PacketID::ActorEvent, evt, xy::NetFlag::Reliable, 1); } } }