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); }
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); }
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())); } }