Exemplo n.º 1
0
/** Gets graphic size
 * @param[in]   _pstGraphic     Concerned graphic
 * @param[out]  _pvSize         Object's size
 * @return      orxVECTOR / orxNULL
 */
orxVECTOR *orxFASTCALL orxGraphic_GetSize(const orxGRAPHIC *_pstGraphic, orxVECTOR *_pvSize)
{
  orxVECTOR *pvResult;

  /* Checks */
  orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY);
  orxSTRUCTURE_ASSERT(_pstGraphic);
  orxASSERT(_pvSize != orxNULL);

  /* Valid 2D or text data? */
  if(orxStructure_TestFlags(_pstGraphic, orxGRAPHIC_KU32_FLAG_2D | orxGRAPHIC_KU32_FLAG_TEXT) != orxFALSE)
  {
    /* Gets its size */
    orxVector_Set(_pvSize, _pstGraphic->fWidth, _pstGraphic->fHeight, orxFLOAT_0);

    /* Updates result */
    pvResult = _pvSize;
  }
  else
  {
    /* No size */
    orxVector_SetAll(_pvSize, orx2F(-1.0f));

    /* Updates result */
    pvResult = orxNULL;
  }

  /* Done! */
  return pvResult;
}
Exemplo n.º 2
0
/** Sets camera frustum (3D rectangle for 2D camera)
 * @param[in]   _pstCamera      Concerned camera
 * @param[in]   _fWidth         Width of frustum
 * @param[in]   _fHeight        Height of frustum
 * @param[in]   _fNear          Near distance of frustum
 * @param[in]   _fFar           Far distance of frustum
 * @return      orxSTATUS_SUCCESS / orxSTATUS_FAILURE
 */
orxSTATUS orxFASTCALL orxCamera_SetFrustum(orxCAMERA *_pstCamera, orxFLOAT _fWidth, orxFLOAT _fHeight, orxFLOAT _fNear, orxFLOAT _fFar)
{
  orxSTATUS eResult = orxSTATUS_SUCCESS;

  /* Checks */
  orxASSERT(sstCamera.u32Flags & orxCAMERA_KU32_STATIC_FLAG_READY);
  orxSTRUCTURE_ASSERT(_pstCamera);
  orxASSERT(_fNear <= _fFar);

  /* Updates internal frustum */
  orxVector_Set(&(_pstCamera->stFrustum.vTL), orx2F(-0.5f) * _fWidth, orx2F(-0.5f) * _fHeight, _fNear);
  orxVector_Set(&(_pstCamera->stFrustum.vBR), orx2F(0.5f) * _fWidth, orx2F(0.5f) * _fHeight, _fFar);

  /* Done! */
  return eResult;
}
Exemplo n.º 3
0
/** Computes an interpolated point on a Catmull-Rom curve segment for a given parameter
 * @param[out]  _pvRes                      Vector where to store result
 * @param[in]   _pvPoint1                   First control point for this curve segment
 * @param[in]   _pvPoint2                   Second control point for this curve segment
 * @param[in]   _pvPoint3                   Third control point for this curve segment
 * @param[in]   _pvPoint4                   Fourth control point for this curve segment
 * @param[in]   _fT                         Interpolation parameter in [0.0, 1.0]
 * @return      Interpolated point on the Catmull-Rom curve segment
 */
orxVECTOR *orxFASTCALL orxVector_CatmullRom(orxVECTOR *_pvRes, const orxVECTOR *_pvPoint1, const orxVECTOR *_pvPoint2, const orxVECTOR *_pvPoint3, const orxVECTOR *_pvPoint4, orxFLOAT _fT)
{
  orxFLOAT fT2, fT3, fW1, fW2, fW3, fW4;

  /* Checks */
  orxASSERT(_pvRes != orxNULL);
  orxASSERT(_pvPoint1 != orxNULL);
  orxASSERT(_pvPoint2 != orxNULL);
  orxASSERT(_pvPoint3 != orxNULL);
  orxASSERT(_pvPoint4 != orxNULL);
  orxASSERT((_fT >= orxFLOAT_0) && (_fT <= orxFLOAT_1));

  /* Computes weights */
  fT2 = _fT * _fT;
  fT3 = fT2 * _fT;
  fW1 = orx2F(2.0f) * fT2 - fT3 - _fT;
  fW2 = orx2F(3.0f) * fT3 - orx2F(5.0f) * fT2 + orx2F(2.0f);
  fW3 = orx2F(4.0f) * fT2 - orx2F(3.0f) * fT3 + _fT;
  fW4 = fT3 - fT2;

  /* Gets intermediate results */
  orxVector_Set(_pvRes,
                orx2F(0.5f) * (fW1 * _pvPoint1->fX + fW2 * _pvPoint2->fX + fW3 * _pvPoint3->fX + fW4 * _pvPoint4->fX),
                orx2F(0.5f) * (fW1 * _pvPoint1->fY + fW2 * _pvPoint2->fY + fW3 * _pvPoint3->fY + fW4 * _pvPoint4->fY),
                orx2F(0.5f) * (fW1 * _pvPoint1->fZ + fW2 * _pvPoint2->fZ + fW3 * _pvPoint3->fZ + fW4 * _pvPoint4->fZ));

  /* Done! */
  return _pvRes;
}
Exemplo n.º 4
0
/** Computes an interpolated point on a cubic Bezier curve segment for a given parameter
 * @param[out]  _pvRes                      Vector where to store result
 * @param[in]   _pvPoint1                   First point for this curve segment
 * @param[in]   _pvPoint2                   First control point for this curve segment
 * @param[in]   _pvPoint3                   Second control point for this curve segment
 * @param[in]   _pvPoint4                   Last point for this curve segment
 * @param[in]   _fT                         Interpolation parameter in [0.0, 1.0]
 * @return      Interpolated point on the cubic Bezier curve segment
 */
orxVECTOR *orxFASTCALL orxVector_Bezier(orxVECTOR *_pvRes, const orxVECTOR *_pvPoint1, const orxVECTOR *_pvPoint2, const orxVECTOR *_pvPoint3, const orxVECTOR *_pvPoint4, orxFLOAT _fT)
{
  orxFLOAT fT2, fT3, f1MT, f1MT2, f1MT3, fW1, fW2, fW3, fW4;

  /* Checks */
  orxASSERT(_pvRes != orxNULL);
  orxASSERT(_pvPoint1 != orxNULL);
  orxASSERT(_pvPoint2 != orxNULL);
  orxASSERT(_pvPoint3 != orxNULL);
  orxASSERT(_pvPoint4 != orxNULL);
  orxASSERT((_fT >= orxFLOAT_0) && (_fT <= orxFLOAT_1));

  /* Computes weights */
  fT2   = _fT * _fT;
  fT3   = fT2 * _fT;
  f1MT  = orxFLOAT_1 - _fT;
  f1MT2 = f1MT * f1MT;
  f1MT3 = f1MT2 * f1MT;
  fW1   = f1MT3;
  fW2   = orx2F(3.0f) * f1MT2 * _fT;
  fW3   = orx2F(3.0f) * f1MT * fT2;
  fW4   = fT3;

  /* Gets intermediate results */
  orxVector_Set(_pvRes,
                fW1 * _pvPoint1->fX + fW2 * _pvPoint2->fX + fW3 * _pvPoint3->fX + fW4 * _pvPoint4->fX,
                fW1 * _pvPoint1->fY + fW2 * _pvPoint2->fY + fW3 * _pvPoint3->fY + fW4 * _pvPoint4->fY,
                fW1 * _pvPoint1->fZ + fW2 * _pvPoint2->fZ + fW3 * _pvPoint3->fZ + fW4 * _pvPoint4->fZ);

  /* Done! */
  return _pvRes;
}
Exemplo n.º 5
0
static orxSTATUS orxFASTCALL Run()
{
  orxSTATUS eResult = orxSTATUS_SUCCESS;
  orxVECTOR vMousePos, vGravity;

  /* Updates generator's status */
  orxObject_Enable(spstGenerator, orxInput_IsActive("Spawn"));

  /* Gets mouse position in world space */
  if(orxRender_GetWorldPosition(orxMouse_GetPosition(&vMousePos), orxNULL, &vMousePos))
  {
    orxVECTOR vGeneratorPos;

    /* Gets generator position */
    orxObject_GetPosition(spstGenerator, &vGeneratorPos);

    /* Keeps generator's Z coord */
    vMousePos.fZ = vGeneratorPos.fZ;

    /* Updates generator's position */
    orxObject_SetPosition(spstGenerator, &vMousePos);
  }

  /* Gets gravity vector from input */
  orxVector_Set(&vGravity, orxInput_GetValue("GravityX"), -orxInput_GetValue("GravityY"), orxFLOAT_0);

  /* Significant enough? */
  if(orxVector_GetSquareSize(&vGravity) > orx2F(0.5f))
  {
    static orxVECTOR svSmoothedGravity =
    {
      orx2F(0.0f), orx2F(-1.0f), orx2F(0.0f)
    };

    /* Gets smoothed gravity from new value (low-pass filter) */
    orxVector_Lerp(&svSmoothedGravity, &svSmoothedGravity, &vGravity, orx2F(0.05f));

    /* Updates camera rotation */
    orxCamera_SetRotation(orxViewport_GetCamera(spstViewport), orxMATH_KF_PI_BY_2 + orxVector_FromCartesianToSpherical(&vGravity, &svSmoothedGravity)->fTheta);
  }

  // Is quit action active?
  if(orxInput_IsActive("Quit"))
  {
    // Logs
    orxLOG("Quit action triggered, exiting!");

    // Sets return value to orxSTATUS_FAILURE, meaning we want to exit
    eResult = orxSTATUS_FAILURE;
  }

  return eResult;
}
Exemplo n.º 6
0
/** Gets graphic origin
 * @param[in]   _pstGraphic     Concerned graphic
 * @param[out]  _pvOrigin       Origin coordinates
 * @return      Origin coordinates
 */
orxVECTOR *orxFASTCALL orxGraphic_GetOrigin(const orxGRAPHIC *_pstGraphic, orxVECTOR *_pvOrigin)
{
  /* Checks */
  orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY);
  orxSTRUCTURE_ASSERT(_pstGraphic);
  orxASSERT(_pvOrigin);

  /* Updates result */
  orxVector_Set(_pvOrigin, _pstGraphic->fLeft, _pstGraphic->fTop, orxFLOAT_0);

  /* Done! */
  return _pvOrigin;
}
Exemplo n.º 7
0
static orxSTATUS orxFASTCALL orxJoystick_Android_AccelerometerEventHandler(const orxEVENT *_pstEvent)
{
  orxSTATUS eResult = orxSTATUS_SUCCESS;

  if(_pstEvent->eType == orxANDROID_EVENT_TYPE_SURFACE && _pstEvent->eID == orxANDROID_EVENT_SURFACE_CHANGED)
  {
    /* reset rotation */
    sstJoystick.s32ScreenRotation = -1;
  }

  if(_pstEvent->eType == orxANDROID_EVENT_TYPE_ACCELERATE)
  {
    static float in[3];
    static float out[3];
    ASensorEvent event;

    if(sstJoystick.s32ScreenRotation == -1)
    {
      sstJoystick.s32ScreenRotation = orxAndroid_JNI_GetRotation();
    }

    while (ASensorEventQueue_getEvents(sstJoystick.sensorEventQueue, &event, 1) > 0)
    {
      in[0] = event.acceleration.x;
      in[1] = event.acceleration.y;
      in[2] = event.acceleration.z;

      canonicalToScreen(sstJoystick.s32ScreenRotation, in, out);

      /* Gets new acceleration */
      orxVector_Set(&(sstJoystick.vAcceleration), out[0], out[1], out[2]);
    }
  }

  if(_pstEvent->eType == orxEVENT_TYPE_SYSTEM)
  {
    switch(_pstEvent->eID)
    {
      case orxSYSTEM_EVENT_FOCUS_GAINED:
      {
        enableSensorManager();

        break;
      }

      case orxSYSTEM_EVENT_FOCUS_LOST:
      {
        disableSensorManager();

        break;
      }

      default:
      {
        break;
      }
    }
  }

  /* Done! */
  return eResult;
}