Exemple #1
0
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;
    }
}
Exemple #2
0
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);
        }
    }
}