TEST(SingleKeyBehaviorTest, WakeUp)
{
	auto input = std::make_shared<SurgSim::Input::InputComponent>("input");
	int key = SurgSim::Devices::KeyCode::KEY_1;
	{
		auto behavior = std::make_shared<MockSingleKeyBehavior>("MockSingleKeyBehavior");
		EXPECT_FALSE(behavior->doWakeUp());
	}

	{
		auto behavior = std::make_shared<MockSingleKeyBehavior>("MockSingleKeyBehavior");
		behavior->setInputComponent(input);
		EXPECT_FALSE(behavior->doWakeUp());
	}

	{
		auto behavior = std::make_shared<MockSingleKeyBehavior>("MockSingleKeyBehavior");
		behavior->setKey(key);
		EXPECT_FALSE(behavior->doWakeUp());
	}

	{
		auto behavior = std::make_shared<MockSingleKeyBehavior>("MockSingleKeyBehavior");
		behavior->setKey(key);
		behavior->setInputComponent(input);
		EXPECT_TRUE(behavior->doWakeUp());
	}
}
TEST_F(KeyBehaviorTest, SetAndGetInputComponent)
{
	auto behavior = std::make_shared<MockKeyBehavior>("MockSingleKeyBehavior");
	auto input = std::make_shared<Input::InputComponent>("input");

	EXPECT_NO_THROW(behavior->setInputComponent(input));
	std::shared_ptr<Input::InputComponent> retrievedInputComponent;
	EXPECT_NO_THROW(retrievedInputComponent = behavior->getInputComponent());
	EXPECT_EQ(input, retrievedInputComponent);
}
Beispiel #3
0
std::shared_ptr<Player> EntityBuilder::player() {
    auto player = std::make_shared<Player>();

    auto input = std::unique_ptr<InputComponent>{new PlayerInput(player)};
    player->setInputComponent(std::move(input));

    auto view = std::unique_ptr<ViewComponent>{new PlayerView(player)};
    view->setTexture(this->engine->resources.texture("smiley.png"));
    player->setViewComponent(std::move(view));

    LOG(INFO) << "Player created.";
    return player;
}
TEST_F(KeyBehaviorTest, FromOneKeyToAnother)
{
	auto behavior = std::make_shared<MockKeyBehavior>("Behavior");
	EXPECT_CALL(*behavior, onKeyDown(Devices::KEY_A));
	EXPECT_CALL(*behavior, onKeyDown(Devices::KEY_B));
	EXPECT_CALL(*behavior, onKeyUp(Devices::KEY_A));
	EXPECT_CALL(*behavior, onKeyUp(Devices::KEY_B));
	behavior->setInputComponent(inputComponent);
	element->addComponent(behavior);
	data.integers().set(DataStructures::Names::KEY, Devices::KeyCode::KEY_A);
	inputComponent->setData(data);
	behavior->update(0.0);
	data.integers().set(DataStructures::Names::KEY, Devices::KeyCode::KEY_B);
	inputComponent->setData(data);
	behavior->update(0.0);
	data.integers().set(DataStructures::Names::KEY, Devices::KeyCode::NONE);
	inputComponent->setData(data);
	behavior->update(0.0);
	// Shouldn't trigger another KeyUp ..
	behavior->update(0.0);
}
Beispiel #5
0
void Projectile::initComponents() {
    if (type_ >= PROJ_ARROW && type_ <= PROJ_ARROW_5) {
        PLAY_SFX(this, SfxManager::projectileFireArrow);
        switch (type_) {
        case PROJ_ARROW:
            effectType_ = EFFECT_ARROW;
#ifndef SERVER
            setGraphicsComponent(new ArrowProjectileGraphicsComponent());
#endif
            break;
        case PROJ_ARROW_2:
            effectType_ = EFFECT_ARROW_2;
#ifndef SERVER
            setGraphicsComponent(new ArrowProjectileGraphicsComponent());
#endif
            break;
        case PROJ_ARROW_3:
            effectType_ = EFFECT_ARROW_3;
#ifndef SERVER
            setGraphicsComponent(new ArrowProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_ARROW_4:
            effectType_ = EFFECT_ARROW_4;
#ifndef SERVER
            setGraphicsComponent(new ArrowProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_ARROW_5:
            effectType_ = EFFECT_ARROW_5;
#ifndef SERVER
            setGraphicsComponent(new ArrowProjectileL3GraphicsComponent());
#endif
            break;
        }
        setInputComponent(new ArrowProjectileInputComponent());
        setPhysicsComponent(new ArrowProjectilePhysicsComponent());
    }
    if (type_ >= PROJ_CANNON && type_ <= PROJ_CANNON_5) {
        switch(type_) {
        case PROJ_CANNON:
            effectType_ = EFFECT_CANNON;
            this->setWidth(CANNON_WIDTH);
            this->setHeight(CANNON_HEIGHT);
#ifndef SERVER
            setGraphicsComponent(new CannonProjectileGraphicsComponent());
#endif
            break;
        case PROJ_CANNON_2:
            effectType_ = EFFECT_CANNON_2;
            this->setWidth(CANNON_WIDTH_2);
            this->setHeight(CANNON_HEIGHT_2);
#ifndef SERVER
            setGraphicsComponent(new CannonProjectileGraphicsComponent());
#endif
            break;
        case PROJ_CANNON_3:
            effectType_ = EFFECT_CANNON_3;
            this->setWidth(CANNON_WIDTH_3);
            this->setHeight(CANNON_HEIGHT_3);
#ifndef SERVER
            setGraphicsComponent(new CannonProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_CANNON_4:
            effectType_ = EFFECT_CANNON_4;
            this->setWidth(CANNON_WIDTH_4);
            this->setHeight(CANNON_HEIGHT_4);
#ifndef SERVER
            setGraphicsComponent(new CannonProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_CANNON_5:
            effectType_ = EFFECT_CANNON_5;
            this->setWidth(CANNON_WIDTH_5);
            this->setHeight(CANNON_HEIGHT_5);
#ifndef SERVER
            setGraphicsComponent(new CannonProjectileL3GraphicsComponent());
#endif
            break;
        }
        setInputComponent(new CannonProjectileInputComponent());
        setPhysicsComponent(new CannonProjectilePhysicsComponent());
        PLAY_SFX(this, SfxManager::projectileFireCannon);
    }
    if (type_ >= PROJ_FIRE && type_ <= PROJ_FIRE_5) {
        switch(type_) {
        case PROJ_FIRE:
            effectType_ = EFFECT_FIRE;
            this->setWidth(FLAME_WIDTH);
            this->setHeight(FLAME_HEIGHT);
            this->setScale(1.0);
#ifndef SERVER
            setGraphicsComponent(new FireProjectileL1GraphicsComponent());
#endif
            break;
        case PROJ_FIRE_2:
            effectType_ = EFFECT_FIRE_2;
            this->setWidth(RADIUS_FLAME_2);
            this->setHeight(FLAME_HEIGHT * RADIUS_FLAME_2 / 90);
            this->setScale(RADIUS_FLAME_2 / 90);
#ifndef SERVER
            setGraphicsComponent(new FireProjectileL1GraphicsComponent());
#endif
            break;
        case PROJ_FIRE_3:
            effectType_ = EFFECT_FIRE_3;
            this->setWidth(RADIUS_FLAME_3);
            this->setHeight(FLAME_HEIGHT * RADIUS_FLAME_3 / 90);
            this->setScale(RADIUS_FLAME_3 / 90);
#ifndef SERVER
            setGraphicsComponent(new FireProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_FIRE_4:
            effectType_ = EFFECT_FIRE_4;
            this->setWidth(RADIUS_FLAME_4);
            this->setHeight(FLAME_HEIGHT * RADIUS_FLAME_4 / 90);
            this->setScale(RADIUS_FLAME_4 / 90);
#ifndef SERVER
            setGraphicsComponent(new FireProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_FIRE_5:
            effectType_ = EFFECT_FIRE_5;
            this->setWidth(RADIUS_FLAME_5);
            this->setHeight(FLAME_HEIGHT * RADIUS_FLAME_5 / 80);
            this->setScale(RADIUS_FLAME_5 / 80);
#ifndef SERVER
            setGraphicsComponent(new FireProjectileL3GraphicsComponent());
#endif
            break;
        }
        setInputComponent(new FireProjectileInputComponent());
        setPhysicsComponent(new FireProjectilePhysicsComponent());
        PLAY_SFX(this, SfxManager::projectileFireFlame);
    }
    if (type_ >= PROJ_TAR && type_ <= PROJ_TAR_5) {
        switch(type_) {
        case PROJ_TAR:
            effectType_ = EFFECT_TAR;
            this->setWidth(TAR_WIDTH);
            this->setHeight(TAR_HEIGHT);
#ifndef SERVER
            setGraphicsComponent(new TarProjectileGraphicsComponent());
#endif
            break;
        case PROJ_TAR_2:
            effectType_ = EFFECT_TAR_2;
            this->setWidth(TAR_WIDTH_2);
            this->setHeight(TAR_HEIGHT_2);
#ifndef SERVER
            setGraphicsComponent(new TarProjectileGraphicsComponent());
#endif
            break;
        case PROJ_TAR_3:
            effectType_ = EFFECT_TAR_3;
            this->setWidth(TAR_WIDTH_3);
            this->setHeight(TAR_HEIGHT_3);
#ifndef SERVER
            setGraphicsComponent(new TarProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_TAR_4:
            effectType_ = EFFECT_TAR_4;
            this->setWidth(TAR_WIDTH_4);
            this->setHeight(TAR_HEIGHT_4);
#ifndef SERVER
            setGraphicsComponent(new TarProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_TAR_5:
            effectType_ = EFFECT_TAR_5;
            this->setWidth(TAR_WIDTH_5);
            this->setHeight(TAR_HEIGHT_5);
#ifndef SERVER
            setGraphicsComponent(new TarProjectileL3GraphicsComponent());
#endif
            break;
        }
        setInputComponent(new TarProjectileInputComponent());
        setPhysicsComponent(new TarProjectilePhysicsComponent());
        PLAY_SFX(this, SfxManager::projectileFireTar);
    }
    if (type_ >= PROJ_FLAK && type_ <= PROJ_FLAK_5) {
        switch(type_) {
        case PROJ_FLAK:
            effectType_ = EFFECT_FLAK;
            this->setWidth(FLAK_WIDTH);
            this->setHeight(FLAK_HEIGHT);
#ifndef SERVER
            setGraphicsComponent(new FlakProjectileGraphicsComponent());
#endif
            break;
        case PROJ_FLAK_2:
            effectType_ = EFFECT_FLAK_2;
            this->setWidth(FLAK_WIDTH_2);
            this->setHeight(FLAK_HEIGHT_2);
#ifndef SERVER
            setGraphicsComponent(new FlakProjectileGraphicsComponent());
#endif
            break;
        case PROJ_FLAK_3:
            effectType_ = EFFECT_FLAK_3;
            this->setWidth(FLAK_WIDTH_3);
            this->setHeight(FLAK_HEIGHT_3);
#ifndef SERVER
            setGraphicsComponent(new FlakProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_FLAK_4:
            effectType_ = EFFECT_FLAK_4;
            this->setWidth(FLAK_WIDTH_4);
            this->setHeight(FLAK_HEIGHT_4);
#ifndef SERVER
            setGraphicsComponent(new FlakProjectileL2GraphicsComponent());
#endif
            break;
        case PROJ_FLAK_5:
            effectType_ = EFFECT_FLAK_5;
            this->setWidth(FLAK_WIDTH_5);
            this->setHeight(FLAK_HEIGHT_5);
#ifndef SERVER
            setGraphicsComponent(new FlakProjectileL3GraphicsComponent());
#endif
            break;
        }
        PLAY_SFX(this, SfxManager::projectileFireFlak);
        setInputComponent(new FlakProjectileInputComponent());
        setPhysicsComponent(new FlakProjectilePhysicsComponent());
    }

    getInputComponent()->setParent(this);
    ((ProjectileInputComponent*)getInputComponent())->setPath(start_, end_);
    if(enemy_ != NULL) {
        connect(enemy_, SIGNAL(signalNPCDied()), this, SLOT(enemyDied()));
    }
}