void FreeLook::registerWithEngine(Engine *engine) { auto input = engine->getWindow()->getInput(); input->registerButtonToAction(SDL_BUTTON_RIGHT, "look"); input->bindAction("look", IE_PRESSED, [this]() { m_look = true; }); input->bindAction("look", IE_RELEASED, [this]() { m_look = false; }); }
void ActionBar::clicked( int clickX, int clickY ) { // if the right mouse button is pressed you exit "disabled" mode and remove the cursor if( SDL_GetMouseState( NULL, NULL ) & SDL_BUTTON( 3 ) ) stopCastingAoE(); int buttonId = getMouseOverButtonId( clickX, clickY ); if( buttonId >= 0 ) { // we clicked a button which has an action and has no floating spell on the mouse (we're launching an action from the actionbar) if( button[buttonId].action != NULL && !spellbook->hasFloatingSpell() && isSpellUseable( button[buttonId].action ) && !isPreparingAoESpell() ) { // AoE spell with specific position if( button[ buttonId ].action->getEffectType() == EffectType::AreaTargetSpell && player->getTarget() == NULL && isSpellUseable( button[ buttonId ].action ) == true ) { setSpellQueue( button[buttonId], false ); cursorRadius = button[buttonId].action->getRadius(); } else // "regular" spell { setSpellQueue( button[buttonId] ); } } // check to see if we're holding a floating spell on the mouse. if we do, we want to place it in the actionbar slot... if( spellbook->hasFloatingSpell() ) { if( isButtonUsed( &button[buttonId] ) ) unbindAction( &button[buttonId] ); bindAction( &button[buttonId], spellbook->getFloatingSpell()->action ); } } }
void CoolGame::init(GLManager *glManager) { auto input = getEngine()->getWindow()->getInput(); input->registerKeyToAction(SDLK_SPACE, "fire"); input->registerKeyToAction(SDLK_c, "swapCamera"); input->bindAction("fire", IE_PRESSED, [this]() { MeshLoader cube("cube.obj"); cube.getEntity()->getTransform().setPosition(primary_camera->getParent()->getPosition()); cube.getEntity()->addComponent<BoxCollider>(glm::vec3(0.5, 0.5, 0.5), 50); addToScene(cube.getEntity()); auto dir = primary_camera->getParent()->getDirection(); cube.getEntity()->getComponent<BoxCollider>()->applyCentralImpulse(glm::vec3(dir.x * 500.0f, dir.y * 500.0f, dir.z * 500.0f)); }); input->bindAction("swapCamera", IE_PRESSED, [this]() { getEngine()->getGLManager()->setActiveCamera(primary_camera2); }); input->bindAction("swapCamera", IE_RELEASED, [this]() { getEngine()->getGLManager()->setActiveCamera(primary_camera); }); auto brickMat = std::make_shared<Material>(std::make_shared<Texture>(Asset("bricks2.jpg")), std::make_shared<Texture>(Asset("bricks2_normal.jpg")), std::make_shared<Texture>(Asset("bricks2_specular.png"))); auto planeMesh = Plane::getMesh(); // ground { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform().setPosition(glm::vec3(-5, -2, 0)).setScale(glm::vec3(10, 1, 10)); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform().setPosition(glm::vec3(5, -2, 0)).setScale(glm::vec3(10, 1, 10)); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform().setPosition(glm::vec3(-5, -2, 10)).setScale(glm::vec3(10, 1, 10)); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform().setPosition(glm::vec3(5, -2, 10)).setScale(glm::vec3(10, 1, 10)); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } // front wall { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(-5, 3, -5)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(1, 0, 0), glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(5, 3, -5)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(1, 0, 0), glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } // back wall { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(-5, 3, 15)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(1, 0, 0), -glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(5, 3, 15)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(1, 0, 0), -glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } // left wall { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(-10, 3, 0)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(0, 0, 1), -glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(-10, 3, 10)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(0, 0, 1), -glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } // right wall { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(10, 3, 0)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(0, 0, 1), glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } { auto plane = std::make_shared<Entity>(); plane->addComponent<MeshRenderer>(planeMesh, brickMat); plane->getTransform() .setPosition(glm::vec3(10, 3, 10)) .setScale(glm::vec3(10, 1, 10)) .rotate(glm::vec3(0, 0, 1), glm::pi<float>() / 2.f); plane->addComponent<BoxCollider>(glm::vec3(5, 0, 5), 0); addToScene(plane); } /*{ MeshLoader ml("Pregnant.obj"); ml.getEntity()->getTransform().setPosition(glm::vec3(0 + (i * 3), -2, -2.5)); ml.getEntity()->addComponent<Sphere>(1); addToScene(ml.getEntity()); }*/ for (int i = 0; i < 10; i++) { MeshLoader ml("AncientUgandan.obj"); ml.getEntity()->getTransform().setPosition(glm::vec3(0, i * 3, -2.5)); ml.getEntity()->addComponent<SphereCollider>(1, 1); addToScene(ml.getEntity()); } MeshLoader money("monkey3.obj"); money.getEntity()->getTransform().setPosition(glm::vec3(0, 0, 8)); money.getEntity()->addComponent<PerspectiveCamera>(glm::pi<float>() / 2.0f, getEngine()->getWindow()->getWidth() / (float)getEngine()->getWindow()->getHeight(), 0.05f, 100.0f); //money.getEntity()->addComponent<SpotLight>(glm::vec3(0.1f, 1.0f, 1.0f), 5.8f, 0.7f, std::make_shared<Attenuation>(0, 0, 0.2)); money.getEntity()->addComponent<SphereCollider>(1, 1); addToScene(money.getEntity()); MeshLoader money2("monkey3.obj"); money2.getEntity()->addComponent<PerspectiveCamera>(glm::pi<float>() / 2.0f, getEngine()->getWindow()->getWidth() / (float)getEngine()->getWindow()->getHeight(), 0.8f, 100.0f); money2.getEntity()->addComponent<FreeMove>(); #if defined(ANDROID) money2.getEntity()->addComponent<FreeLook>(0.1f); #else money2.getEntity()->addComponent<FreeLook>(); #endif money2.getEntity()->getTransform().setPosition(glm::vec3(0, 0, 5)).setScale(glm::vec3(0.8, 0.8, 0.8)); money2.getEntity()->addComponent<SpotLight>(glm::vec3(1.0f, 1.0f, 1.0f), 2.8f, 0.7f, std::make_shared<Attenuation>(0, 0, 0.2)); addToScene(money2.getEntity()); primary_camera = money2.getEntity()->getComponent<PerspectiveCamera>(); primary_camera2 = money.getEntity()->getComponent<PerspectiveCamera>(); getEngine()->getGLManager()->setActiveCamera(primary_camera); }
void ActionBar::bindActionToButtonNr( int buttonNr, CSpellActionBase *action ) { assert( !isButtonUsed( &button[ buttonNr ] ) ); bindAction( &button[ buttonNr ], action ); }