Beispiel #1
0
  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;
    });
  }
Beispiel #2
0
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 );
    }
  }
}
Beispiel #3
0
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);
}
Beispiel #4
0
void ActionBar::bindActionToButtonNr( int buttonNr, CSpellActionBase *action )
{
  assert( !isButtonUsed( &button[ buttonNr ] ) );
  bindAction( &button[ buttonNr ], action );
}