Exemple #1
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;
}
Exemple #2
0
static orxSTATUS orxFASTCALL ProcessFontParams(orxU32 _u32ParamCount, const orxSTRING _azParams[])
{
  orxSTATUS eResult = orxSTATUS_FAILURE;

  // Has a valid font parameter?
  if(_u32ParamCount > 1)
  {
    // Inits FreeType
    if(!FT_Init_FreeType(&sstFontGen.pstFontLibrary))
    {
      // Loads font's default face
      if(!FT_New_Face(sstFontGen.pstFontLibrary, _azParams[1], 0, &sstFontGen.pstFontFace))
      {
        // Sets unicode map
        if(!FT_Select_Charmap(sstFontGen.pstFontFace, ft_encoding_unicode))
        {
          // Updates character size
          sstFontGen.vCharacterSize.fX = sstFontGen.vCharacterSize.fY;

          // Updates character spacing
          sstFontGen.vCharacterSpacing.fX = orx2F(2.0f);
          sstFontGen.vCharacterSpacing.fY = orx2F(2.0f);

          // Stores scale
          sstFontGen.fFontScale = sstFontGen.vCharacterSize.fY / orxS2F(sstFontGen.pstFontFace->bbox.yMax - sstFontGen.pstFontFace->bbox.yMin);

          // Sets pixel's size
          eResult = FT_Set_Pixel_Sizes(sstFontGen.pstFontFace, (FT_UInt)orxF2U(sstFontGen.vCharacterSize.fX) - 2, (FT_UInt)orxF2U(sstFontGen.vCharacterSize.fY) - 2) ? orxSTATUS_FAILURE : orxSTATUS_SUCCESS;
        }
      }
    }

    // Success?
    if(eResult != orxSTATUS_FAILURE)
    {
      // Updates status
      orxFLAG_SET(sstFontGen.u32Flags, orxFONTGEN_KU32_STATIC_FLAG_FONT, orxFONTGEN_KU32_STATIC_FLAG_NONE);

      // Logs message
      orxFONTGEN_LOG(FONT, "Using font '%s'.", _azParams[1]);
    }
    else
    {
      // Logs message
      orxFONTGEN_LOG(FONT, "Couldn't load font '%s'.", _azParams[1]);
    }
  }
  else
  {
    // Logs message
    orxFONTGEN_LOG(FONT, "No font specified, aborting.");
  }

  // Done!
  return eResult;
}
/** Gets a random orxS32 value
 * @param[in]   _s32Min                         Minimum boundary
 * @param[in]   _s32Max                         Maximum boundary
 * @return      Random value
 */
orxS32 orxFASTCALL orxMath_GetRandomS32(orxS32 _s32Min, orxS32 _s32Max)
{
  orxU32 u32Rand;

  /* Gets raw random number */
  u32Rand = rand();

  /* Done! */
  return (u32Rand == RAND_MAX) ? _s32Max : (orxF2S((orx2F(u32Rand) * (orx2F(1.0f / RAND_MAX)) * (orxS2F(_s32Max) + 1 - orxS2F(_s32Min))) + orxS2F(_s32Min)));
}
Exemple #4
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;
}
Exemple #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;
}
Exemple #6
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;
}
Exemple #7
0
void orxFASTCALL orxMouse_GLFW_Exit()
{
  /* Was initialized? */
  if(sstMouse.u32Flags & orxMOUSE_KU32_STATIC_FLAG_READY)
  {
    orxCLOCK *pstClock;

    /* Gets core clock */
    pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

    /* Unregisters update function */
    orxClock_Unregister(pstClock, orxMouse_GLFW_Update);

    /* Unregisters clean function */
    orxClock_Unregister(pstClock, orxMouse_GLFW_Clean);

    /* Removes event handler */
    orxEvent_RemoveHandler(orxEVENT_TYPE_DISPLAY, orxMouse_GLFW_EventHandler);

    /* Cleans static controller */
    orxMemory_Zero(&sstMouse, sizeof(orxMOUSE_STATIC));
  }

  return;
}
Exemple #8
0
static orxSTATUS orxFASTCALL ProcessPaddingParams(orxU32 _u32ParamCount, const orxSTRING _azParams[])
{
  orxSTATUS eResult;

  // Has a valid size parameter?
  if(_u32ParamCount > 1)
  {
    orxFLOAT fPadding;

    // Gets it
    if((eResult = orxString_ToFloat(_azParams[1], &fPadding, orxNULL)) != orxSTATUS_FAILURE)
    {
      // Stores it
      sstFontGen.fPadding = orx2F(2.0f) * fPadding;

      // Logs message
      orxFONTGEN_LOG(PADDING, "Character padding set to '%g'.", fPadding);
    }
    else
    {
      // Logs message
      orxFONTGEN_LOG(PADDING, "Invalid character padding found in '%s', aborting.", _azParams[1]);
    }
  }
  else
  {
    // Updates result
    eResult = orxSTATUS_SUCCESS;
  }

  // Done!
  return eResult;
}
/** 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;
}
// Touch
extern "C" void JNICALL Java_org_orx_lib_OrxActivity_nativeOnTouch(
                                    JNIEnv* env, jobject thiz,
                                    jint touch_device_id_in, jint pointer_finger_id_in,
                                    jint action, jint x, jint y, jint p)
{
  orxANDROID_TOUCH_EVENT stTouchEvent;

  stTouchEvent.u32ID = pointer_finger_id_in;
  stTouchEvent.u32Action = action;
  stTouchEvent.fX = orx2F(x);
  stTouchEvent.fY = orx2F(y);

  if(sstAndroid.pipeTouchEvent[1] != -1)
  {
    if (write(sstAndroid.pipeTouchEvent[1], &stTouchEvent, sizeof(stTouchEvent)) != sizeof(stTouchEvent))
    {
      LOGE("Failure writing touch event: %s\n", strerror(errno));
    }
  }
}
Exemple #11
0
/** Delay the program for given number of seconds
 * @param[in] _fSeconds             Number of seconds to wait
 */
void orxFASTCALL orxSystem_Delay(orxFLOAT _fSeconds)
{
  /* Checks */
  orxASSERT((sstSystem.u32Flags & orxSYSTEM_KU32_STATIC_FLAG_READY) == orxSYSTEM_KU32_STATIC_FLAG_READY);
  orxASSERT(_fSeconds >= orxFLOAT_0);

#ifdef __orxWINDOWS__

  /* Sleeps */
  Sleep(orxF2U(_fSeconds * orx2F(1000.0f)));

#else /* __orxWINDOWS__ */

  /* Sleeps */
  usleep(orxF2U(_fSeconds * orx2F(1000000.0f)));

#endif /* __orxWINDOWS__ */

  /* Done! */
  return;
}
Exemple #12
0
orxFLOAT orxFASTCALL orxJoystick_GLFW_GetAxisValue(orxJOYSTICK_AXIS _eAxis)
{
  orxU32    u32ID;
  orxFLOAT  fResult;

  /* Checks */
  orxASSERT((sstJoystick.u32Flags & orxJOYSTICK_KU32_STATIC_FLAG_READY) == orxJOYSTICK_KU32_STATIC_FLAG_READY);
  orxASSERT(_eAxis < orxJOYSTICK_AXIS_NUMBER);

  /* Gets ID */
  u32ID = (orxU32)_eAxis / orxJOYSTICK_AXIS_SINGLE_NUMBER;

  /* Is ID valid? */
  if(u32ID <= (orxU32)GLFW_JOYSTICK_LAST)
  {
      /* Updates its info */
      orxJoystick_GLFW_UpdateInfo(u32ID);

    /* Plugged? */
    if(sstJoystick.astJoyInfoList[u32ID].bIsConnected != orxFALSE)
    {
      orxS32 s32Axis;

      /* Gets axis */
      s32Axis = _eAxis % orxJOYSTICK_AXIS_SINGLE_NUMBER;

      /* Updates result */
      fResult = orx2F(sstJoystick.astJoyInfoList[u32ID].afAxisInfoList[s32Axis]);
    }
    else
    {
      /* Logs message */
      orxDEBUG_PRINT(orxDEBUG_LEVEL_JOYSTICK, "Requested joystick ID <%d> is not connected.", u32ID);

      /* Updates result */
      fResult = orxFLOAT_0;
    }
  }
  else
  {
    /* Logs message */
    orxDEBUG_PRINT(orxDEBUG_LEVEL_JOYSTICK, "Requested joystick ID <%d> is out of range.", u32ID);

    /* Updates result */
    fResult = orxFLOAT_0;
  }

  /* Done! */
  return fResult;
}
Exemple #13
0
void orxFASTCALL orxJoystick_GLFW_Exit()
{
  /* Was initialized? */
  if(sstJoystick.u32Flags & orxJOYSTICK_KU32_STATIC_FLAG_READY)
  {
    /* Unregisters update function */
    orxClock_Unregister(orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE), orxJoystick_GLFW_Update);

    /* Cleans static controller */
    orxMemory_Zero(&sstJoystick, sizeof(orxJOYSTICK_STATIC));
  }

  return;
}
Exemple #14
0
orxSTATUS orxFASTCALL orxJoystick_GLFW_Init()
{
  orxSTATUS eResult = orxSTATUS_FAILURE;

  /* Was already initialized. */
  if(!(sstJoystick.u32Flags & orxJOYSTICK_KU32_STATIC_FLAG_READY))
  {
    /* Cleans static controller */
    orxMemory_Zero(&sstJoystick, sizeof(orxJOYSTICK_STATIC));

    /* Is GLFW window opened? */
    if(glfwGetWindowParam(GLFW_OPENED) != GL_FALSE)
    {
      orxCLOCK *pstClock;

      /* Gets core clock */
      pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

      /* Gets its info */
      sstJoystick.pstClockInfo = orxClock_GetInfo(pstClock);

      /* Success? */
      if(sstJoystick.pstClockInfo != orxNULL)
      {
        /* Registers event update function */
        eResult = orxClock_Register(pstClock, orxJoystick_GLFW_Update, orxNULL, orxMODULE_ID_JOYSTICK, orxCLOCK_PRIORITY_HIGHER);

        /* Success? */
        if(eResult != orxSTATUS_FAILURE)
        {
          /* Updates first joystick */
          orxJoystick_GLFW_UpdateInfo(0);

          /* Updates status */
          sstJoystick.u32Flags |= orxJOYSTICK_KU32_STATIC_FLAG_READY;

          /* Updates result */
          eResult = orxSTATUS_SUCCESS;
        }
      }
    }
  }

  /* Done! */
  return eResult;
}
Exemple #15
0
/** Removes a global timer function (ie. from the main core clock)
 * @param[in]   _pfnCallback                          Concerned timer callback to remove
 * @param[in]   _fDelay                               Delay between 2 calls of the timer to remove, -1.0f for removing all occurrences regardless of their respective delay
 * @param[in]   _pContext                             Context of the timer to remove, orxNULL for removing all occurrences regardless of their context
 * @return      orxSTATUS_SUCCESS / orxSTATUS_FAILURE
 */
orxSTATUS orxFASTCALL orxClock_RemoveGlobalTimer(const orxCLOCK_FUNCTION _pfnCallback, orxFLOAT _fDelay, void *_pContext)
{
  orxCLOCK *pstClock;
  orxSTATUS eResult = orxSTATUS_FAILURE;

  /* Checks */
  orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY);
  orxASSERT(_pfnCallback != orxNULL);

  /* Gets core clock */
  pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

  /* Found? */
  if(pstClock != orxNULL)
  {
    /* Removes timer from it */
    eResult = orxClock_RemoveTimer(pstClock, _pfnCallback, _fDelay, _pContext);
  }

  /* Done! */
  return eResult;
}
orxSTATUS orxFASTCALL orxDisplay_SDL_Init()
{
  orxSTATUS eResult;

  /* Was not already initialized? */
  if(!(sstDisplay.u32Flags & orxDISPLAY_KU32_STATIC_FLAG_READY))
  {
    /* Cleans static controller */
    orxMemory_Zero(&sstDisplay, sizeof(orxDISPLAY_STATIC));

    /* Is SDL partly initialized? */
    if(SDL_WasInit(SDL_INIT_EVERYTHING) != 0)
    {
      /* Inits the video subsystem */
      eResult = (SDL_InitSubSystem(SDL_INIT_VIDEO) == 0) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    }
    else
    {
      /* Inits SDL with video */
      eResult = (SDL_Init(SDL_INIT_VIDEO) == 0) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    }

    /* Valid? */
    if(eResult != orxSTATUS_FAILURE)
    {
#ifdef __orxGP2X__

      /* Inits display using config values? */
      sstDisplay.pstScreen = SDL_SetVideoMode(orxDISPLAY_KU32_SCREEN_WIDTH, orxDISPLAY_KU32_SCREEN_HEIGHT, orxDISPLAY_KU32_SCREEN_DEPTH, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT);

      /* Stores values */
      sstDisplay.fScreenWidth   = orxU2F(orxDISPLAY_KU32_SCREEN_WIDTH);
      sstDisplay.fScreenHeight  = orxU2F(orxDISPLAY_KU32_SCREEN_HEIGHT);

#else /* __orxGP2X__ */

      {
        orxU32 u32ConfigWidth, u32ConfigHeight, u32ConfigDepth, u32Flags;

        /* Gets resolution from config */
        orxConfig_PushSection(orxDISPLAY_KZ_CONFIG_SECTION);
        u32ConfigWidth  = orxConfig_GetU32(orxDISPLAY_KZ_CONFIG_WIDTH);
        u32ConfigHeight = orxConfig_GetU32(orxDISPLAY_KZ_CONFIG_HEIGHT);
        u32ConfigDepth  = orxConfig_GetU32(orxDISPLAY_KZ_CONFIG_DEPTH);

        /* Full screen? */
        if(orxConfig_GetBool(orxDISPLAY_KZ_CONFIG_FULLSCREEN) != orxFALSE)
        {
          /* Updates flags */
          u32Flags = SDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT;
        }
        else
        {
          /* Updates flags */
          u32Flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT;
        }

        /* Inits display using config values? */
        if((sstDisplay.pstScreen = SDL_SetVideoMode(u32ConfigWidth, u32ConfigHeight, u32ConfigDepth, u32Flags)) == orxNULL)
        {
          /* Inits display using default parameters */
          sstDisplay.pstScreen = SDL_SetVideoMode(orxDISPLAY_KU32_SCREEN_WIDTH, orxDISPLAY_KU32_SCREEN_HEIGHT, orxDISPLAY_KU32_SCREEN_DEPTH, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT);

          /* Stores values */
          sstDisplay.fScreenWidth   = orxU2F(orxDISPLAY_KU32_SCREEN_WIDTH);
          sstDisplay.fScreenHeight  = orxU2F(orxDISPLAY_KU32_SCREEN_HEIGHT);
        }
        else
        {
          /* Stores values */
          sstDisplay.fScreenWidth   = orxU2F(u32ConfigWidth);
          sstDisplay.fScreenHeight  = orxU2F(u32ConfigHeight);
        }

        /* Pops config section */
        orxConfig_PopSection();
      }

#endif /* __orxGP2X__ */

      /* Updates result ? */
      eResult = (sstDisplay.pstScreen != NULL) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;

      /* Valid? */
      if(eResult != orxSTATUS_FAILURE)
      {
        orxCLOCK *pstClock;

        /* Gets clock */
        pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

        /* Valid? */
        if(pstClock != orxNULL)
        {
          /* Registers event update function */
          eResult = orxClock_Register(pstClock, orxDisplay_SDL_EventUpdate, orxNULL, orxMODULE_ID_DISPLAY, orxCLOCK_PRIORITY_HIGHEST);
        }

        /* Decoration? */
        if((orxConfig_HasValue(orxDISPLAY_KZ_CONFIG_DECORATION) == orxFALSE)
        || (orxConfig_GetBool(orxDISPLAY_KZ_CONFIG_DECORATION) != orxFALSE))
        {
          /* Logs message */
          orxLOG("This plugin can't remove window decorations.");
        }

        /* Has VSync value? */
        if(orxConfig_HasValue(orxDISPLAY_KZ_CONFIG_VSYNC) != orxFALSE)
        {
          /* Logs message */
          orxLOG("This plugin can't handle vsync.");
        }

        /* Updates its title */
        SDL_WM_SetCaption(orxConfig_GetString(orxDISPLAY_KZ_CONFIG_TITLE), orxNULL);

        /* Sets module as ready */
        sstDisplay.u32Flags = orxDISPLAY_KU32_STATIC_FLAG_READY;
      }
    }
  }

  /* Done! */
  return eResult;
}
Exemple #17
0
/** Inits the bounce demo
 */
static orxSTATUS orxBounce_Init()
{
  orxU32    i;
  orxSTATUS eResult;

  /* Loads config file and selects its section */
  orxConfig_Load("Bounce.ini");
  orxConfig_SelectSection("Bounce");

  /* Loads input */
  orxInput_Load(orxNULL);

  /* Creates ball spawner */
  spoBallSpawner = orxSpawner_CreateFromConfig("BallSpawner");

  /* Valid? */
  if(spoBallSpawner != orxNULL)
  {
    orxOBJECT  *pstParticleSource;
    orxCLOCK   *pstClock;

    /* Creates particle source */
    pstParticleSource = orxObject_CreateFromConfig("ParticleSource");

    /* Valid? */
    if(pstParticleSource != orxNULL)
    {
      /* Sets its parent */
      orxObject_SetParent(pstParticleSource, spoBallSpawner);
    }

    /* Updates cursor */
    orxMouse_ShowCursor(orxConfig_GetBool("ShowCursor"));

    /* Creates walls */
    spstWalls = orxObject_CreateFromConfig("Walls");

    /* Inits trail */
    for(i = 0; i < TRAIL_POINT_NUMBER; i++)
    {
      orxMouse_GetPosition(&savTrailPointList[i]);
    }

    /* Creates all viewports */
    for(i = 0; i < (orxU32)orxConfig_GetListCounter("ViewportList"); i++)
    {
      orxViewport_CreateFromConfig(orxConfig_GetListString("ViewportList", i));
    }

    /* Gets rendering clock */
    pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

    /* Registers callback */
    eResult = orxClock_Register(pstClock, &orxBounce_Update, orxNULL, orxMODULE_ID_MAIN, orxCLOCK_PRIORITY_NORMAL);

    /* Registers update trail timer */
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxClock_Register(pstClock, &orxBounce_UpdateTrail, orxNULL, orxMODULE_ID_MAIN, orxCLOCK_PRIORITY_LOW) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;

    /* Registers event handler */
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_PHYSICS, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_INPUT, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_SHADER, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_SOUND, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_DISPLAY, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_TIMELINE, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
    eResult = ((eResult != orxSTATUS_FAILURE) && (orxEvent_AddHandler(orxEVENT_TYPE_RENDER, orxBounce_EventHandler) != orxSTATUS_FAILURE)) ? orxSTATUS_SUCCESS : orxSTATUS_FAILURE;
  }
  else
  {
    /* Failure */
    eResult = orxSTATUS_FAILURE;
  }

  /* Done! */
  return eResult;
}
Exemple #18
0
/** Inits the tutorial
 */
orxSTATUS orxFASTCALL Init()
{
  orxCLOCK       *pstClock;
  orxINPUT_TYPE   eType;
  orxENUM         eID;
  orxINPUT_MODE   eMode;
  const orxSTRING zInputCameraLeft;
  const orxSTRING zInputCameraRight;
  const orxSTRING zInputCameraUp;
  const orxSTRING zInputCameraDown;
  const orxSTRING zInputCameraRotateLeft;
  const orxSTRING zInputCameraRotateRight;
  const orxSTRING zInputCameraZoomIn;
  const orxSTRING zInputCameraZoomOut;
  const orxSTRING zInputViewportLeft;
  const orxSTRING zInputViewportRight;
  const orxSTRING zInputViewportUp;
  const orxSTRING zInputViewportDown;
  const orxSTRING zInputViewportScaleUp;
  const orxSTRING zInputViewportScaleDown;

  /* Gets input binding names */
  orxInput_GetBinding("CameraLeft", 0, &eType, &eID, &eMode);
  zInputCameraLeft = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraRight", 0, &eType, &eID, &eMode);
  zInputCameraRight = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraUp", 0, &eType, &eID, &eMode);
  zInputCameraUp = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraDown", 0, &eType, &eID, &eMode);
  zInputCameraDown = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraRotateLeft", 0, &eType, &eID, &eMode);
  zInputCameraRotateLeft = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraRotateRight", 0, &eType, &eID, &eMode);
  zInputCameraRotateRight = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraZoomIn", 0, &eType, &eID, &eMode);
  zInputCameraZoomIn = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("CameraZoomOut", 0, &eType, &eID, &eMode);
  zInputCameraZoomOut = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("ViewportLeft", 0, &eType, &eID, &eMode);
  zInputViewportLeft = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("ViewportRight", 0, &eType, &eID, &eMode);
  zInputViewportRight = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("ViewportUp", 0, &eType, &eID, &eMode);
  zInputViewportUp = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("ViewportDown", 0, &eType, &eID, &eMode);
  zInputViewportDown = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("ViewportScaleUp", 0, &eType, &eID, &eMode);
  zInputViewportScaleUp = orxInput_GetBindingName(eType, eID, eMode);

  orxInput_GetBinding("ViewportScaleDown", 0, &eType, &eID, &eMode);
  zInputViewportScaleDown = orxInput_GetBindingName(eType, eID, eMode);

  /* Displays a small hint in console */
  orxLOG("\n* Worskpaces 1 & 4 display camera 1 content"
         "\n* Workspace 2 displays camera 2 (by default it's twice as close as the other cameras)"
         "\n* Workspace 3 displays camera 3"
         "\n- Soldier will be positioned (in the world) so as to be always displayed under the mouse"
         "\n- '%s', '%s', '%s' & '%s' control camera 1 positioning"
         "\n- '%s' & '%s' control camera 1 rotation"
         "\n- '%s' & '%s' control camera 1 zoom"
         "\n- '%s', '%s', '%s' & '%s' control viewport 1 positioning"
         "\n- '%s' & '%s' control viewport 1 size",
         zInputCameraUp, zInputCameraLeft, zInputCameraDown, zInputCameraRight,
         zInputCameraRotateLeft, zInputCameraRotateRight,
         zInputCameraZoomIn, zInputCameraZoomOut,
         zInputViewportUp, zInputViewportLeft, zInputViewportDown, zInputViewportRight,
         zInputViewportScaleUp, zInputViewportScaleDown);

  /* Creates all viewports */
  orxViewport_CreateFromConfig("Viewport4");
  orxViewport_CreateFromConfig("Viewport3");
  orxViewport_CreateFromConfig("Viewport2");
  pstViewport = orxViewport_CreateFromConfig("Viewport1");

  /* Creates objects */
  orxObject_CreateFromConfig("Box");
  pstSoldier = orxObject_CreateFromConfig("Soldier");

  /* Gets the main clock */
  pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

  /* Registers our update callback */
  orxClock_Register(pstClock, Update, orxNULL, orxMODULE_ID_MAIN, orxCLOCK_PRIORITY_NORMAL);

  /* Done! */
  return orxSTATUS_SUCCESS;
}
Exemple #19
0
/** Update callback
 */
void orxFASTCALL Update(const orxCLOCK_INFO *_pstClockInfo, void *_pstContext)
{
  orxVECTOR vPos, vSoldierPos;
  orxCAMERA *pstCamera;
  orxFLOAT  fWidth, fHeight, fX, fY;

  /* *** CAMERA CONTROLS *** */

  /* Gets first viewport camera */
  pstCamera = orxViewport_GetCamera(pstViewport);

  /* Camera rotate left? */
  if(orxInput_IsActive("CameraRotateLeft"))
  {
    /* Rotates camera CCW */
    orxCamera_SetRotation(pstCamera, orxCamera_GetRotation(pstCamera) + orx2F(-4.0f) * _pstClockInfo->fDT);
  }
  /* Camera rotate right? */
  if(orxInput_IsActive("CameraRotateRight"))
  {
    /* Rotates camera CW */
    orxCamera_SetRotation(pstCamera, orxCamera_GetRotation(pstCamera) + orx2F(4.0f) * _pstClockInfo->fDT);
  }

  /* Camera zoom in? */
  if(orxInput_IsActive("CameraZoomIn"))
  {
    /* Camera zoom in */
    orxCamera_SetZoom(pstCamera, orxCamera_GetZoom(pstCamera) * orx2F(1.02f));
  }
  /* Camera zoom out? */
  if(orxInput_IsActive("CameraZoomOut"))
  {
    /* Camera zoom out */
    orxCamera_SetZoom(pstCamera, orxCamera_GetZoom(pstCamera) * orx2F(0.98f));
  }

  /* Gets camera position */
  orxCamera_GetPosition(pstCamera, &vPos);

  /* Camera right? */
  if(orxInput_IsActive("CameraRight"))
  {
    /* Updates position */
    vPos.fX += orx2F(500) * _pstClockInfo->fDT;
  }
  /* Camera left? */
  if(orxInput_IsActive("CameraLeft"))
  {
    /* Updates position */
    vPos.fX -= orx2F(500) * _pstClockInfo->fDT;
  }
  /* Camera down? */
  if(orxInput_IsActive("CameraDown"))
  {
    /* Updates position */
    vPos.fY += orx2F(500) * _pstClockInfo->fDT;
  }
  /* Camera up? */
  if(orxInput_IsActive("CameraUp"))
  {
    /* Updates position */
    vPos.fY -= orx2F(500) * _pstClockInfo->fDT;
  }

  /* Updates camera position */
  orxCamera_SetPosition(pstCamera, &vPos);


  /* *** VIEWPORT CONTROLS *** */

  /* Gets viewport size */
  orxViewport_GetRelativeSize(pstViewport, &fWidth, &fHeight);

  /* Viewport scale up? */
  if(orxInput_IsActive("ViewportScaleUp"))
  {
    /* Scales viewport up */
    fWidth *= orx2F(1.02f);
    fHeight*= orx2F(1.02f);
  }
  /* Viewport scale down? */
  if(orxInput_IsActive("ViewportScaleDown"))
  {
    /* Scales viewport down */
    fWidth *= orx2F(0.98f);
    fHeight*= orx2F(0.98f);
  }

  /* Updates viewport size */
  orxViewport_SetRelativeSize(pstViewport, fWidth, fHeight);

  /* Gets viewport position */
  orxViewport_GetPosition(pstViewport, &fX, &fY);

  /* Viewport right? */
  if(orxInput_IsActive("ViewportRight"))
  {
    /* Updates position */
    fX += orx2F(500) * _pstClockInfo->fDT;
  }
  /* Viewport left? */
  if(orxInput_IsActive("ViewportLeft"))
  {
    /* Updates position */
    fX -= orx2F(500) * _pstClockInfo->fDT;
  }
  /* Viewport down? */
  if(orxInput_IsActive("ViewportDown"))
  {
    /* Updates position */
    fY += orx2F(500) * _pstClockInfo->fDT;
  }
  /* Viewport up? */
  if(orxInput_IsActive("ViewportUp"))
  {
    /* Updates position */
    fY -= orx2F(500) * _pstClockInfo->fDT;
  }

  /* Updates viewport position */
  orxViewport_SetPosition(pstViewport, fX, fY);

  /* *** SOLDIER MOVE UPDATE *** */

  /* Gets mouse world position? */
  orxRender_GetWorldPosition(orxMouse_GetPosition(&vPos), orxNULL, &vPos);

  /* Gets object current position */
  orxObject_GetWorldPosition(pstSoldier, &vSoldierPos);

  /* Keeps Z value */
  vPos.fZ = vSoldierPos.fZ;

  /* Moves the soldier under the cursor */
  orxObject_SetPosition(pstSoldier, &vPos);
}
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

/**
 * @file orxVector.c
 * @date 27/04/2005
 * @author [email protected]
 *
 */


#include "math/orxVector.h"


/* *** Vector constants *** */

const orxVECTOR orxVECTOR_X      = {{orx2F(1.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_Y      = {{orx2F(0.0f)}, {orx2F(1.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_Z      = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_0      = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_1      = {{orx2F(1.0f)}, {orx2F(1.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_RED    = {{orx2F(1.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_GREEN  = {{orx2F(0.0f)}, {orx2F(1.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_BLUE   = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_BLACK  = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_WHITE  = {{orx2F(1.0f)}, {orx2F(1.0f)}, {orx2F(1.0f)}};
Exemple #21
0
  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;
}


/* *** Vector constants *** */

const orxVECTOR orxVECTOR_X       = {{orx2F(1.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_Y       = {{orx2F(0.0f)}, {orx2F(1.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_Z       = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_0       = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_1       = {{orx2F(1.0f)}, {orx2F(1.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_RED     = {{orx2F(1.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_GREEN   = {{orx2F(0.0f)}, {orx2F(1.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_BLUE    = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_YELLOW  = {{orx2F(1.0f)}, {orx2F(1.0f)}, {orx2F(0.0f)}};
const orxVECTOR orxVECTOR_CYAN    = {{orx2F(0.0f)}, {orx2F(1.0f)}, {orx2F(1.0f)}};
const orxVECTOR orxVECTOR_MAGENTA = {{orx2F(1.0f)}, {orx2F(0.0f)}, {orx2F(1.0f)}};

const orxVECTOR orxVECTOR_BLACK   = {{orx2F(0.0f)}, {orx2F(0.0f)}, {orx2F(0.0f)}};
/** Gets a random orxFLOAT value
 * @param[in]   _fMin                           Minimum boundary
 * @param[in]   _fMax                           Maximum boundary
 * @return      Random value
 */
orxFLOAT orxFASTCALL orxMath_GetRandomFloat(orxFLOAT _fMin, orxFLOAT _fMax)
{
  return((orx2F(rand()) * (orx2F(1.0f / RAND_MAX)) * (_fMax - _fMin)) + _fMin);
}
Exemple #23
0
orxFLOAT orxFASTCALL orxJoystick_Android_GetAxisValue(orxJOYSTICK_AXIS _eAxis)
{
  orxU32    u32ID;
  orxFLOAT  fResult;

  /* Checks */
  orxASSERT((sstJoystick.u32Flags & orxJOYSTICK_KU32_STATIC_FLAG_READY) == orxJOYSTICK_KU32_STATIC_FLAG_READY);
  orxASSERT(_eAxis < orxJOYSTICK_AXIS_NUMBER);

  if(!sstJoystick.bUseJoystick)
  {
    /* Depending on axis */
    switch (_eAxis)
    {
      case orxJOYSTICK_AXIS_X_1:
      case orxJOYSTICK_AXIS_X_2:
      case orxJOYSTICK_AXIS_X_3:
      case orxJOYSTICK_AXIS_X_4:
      {
        /* Updates result */
        fResult = sstJoystick.vAcceleration.fX;

        break;
      }

      case orxJOYSTICK_AXIS_Y_1:
      case orxJOYSTICK_AXIS_Y_2:
      case orxJOYSTICK_AXIS_Y_3:
      case orxJOYSTICK_AXIS_Y_4:
      {
        /* Updates result */
        fResult = sstJoystick.vAcceleration.fY;

        break;
      }

      case orxJOYSTICK_AXIS_Z_1:
      case orxJOYSTICK_AXIS_Z_2:
      case orxJOYSTICK_AXIS_Z_3:
      case orxJOYSTICK_AXIS_Z_4:
      {
        /* Updates result */
        fResult = sstJoystick.vAcceleration.fZ;

        break;
      }

      default:
      {
        /* Not available */
        orxDEBUG_PRINT(orxDEBUG_LEVEL_JOYSTICK, "<%s> is not available on this platform!", orxJoystick_GetAxisName(_eAxis));
        fResult = orxFLOAT_0;

        break;
      }
    }
  }
  else
  {
    /* Gets ID */
    u32ID = (orxU32)_eAxis / orxJOYSTICK_AXIS_SINGLE_NUMBER;

    /* Is ID valid? */
    if(u32ID <= (orxU32)orxANDROID_LAST_JOYSTICK)
    {
      /* Plugged? */
      if(sstJoystick.au32DeviceIds[u32ID] != 0)
      {
        orxS32 s32Axis;

        /* Gets axis */
        s32Axis = _eAxis % orxJOYSTICK_AXIS_SINGLE_NUMBER;
    
        /* Updates result */
        fResult = orx2F(sstJoystick.astJoyInfoList[u32ID].afAxisInfoList[s32Axis]);
      }
      else
      {
        /* Logs message */
        orxDEBUG_PRINT(orxDEBUG_LEVEL_JOYSTICK, "Requested joystick ID <%d> is not connected.", u32ID);

        /* Updates result */
        fResult = orxFLOAT_0;
      }
    }
    else
    {
      /* Logs message */
      orxDEBUG_PRINT(orxDEBUG_LEVEL_JOYSTICK, "Requested joystick ID <%d> is out of range.", u32ID);

      /* Updates result */
      fResult = orxFLOAT_0;
    }
  }

  /* Done! */
  return fResult;
}
Exemple #24
0
orxSTATUS orxFASTCALL orxMouse_GLFW_Init()
{
  orxSTATUS eResult = orxSTATUS_FAILURE;

  /* Was already initialized. */
  if(!(sstMouse.u32Flags & orxMOUSE_KU32_STATIC_FLAG_READY))
  {
    /* Cleans static controller */
    orxMemory_Zero(&sstMouse, sizeof(orxMOUSE_STATIC));

    /* Is GLFW window opened? */
    if(glfwGetWindowParam(GLFW_OPENED) != GL_FALSE)
    {
      orxCLOCK *pstClock;

      /* Gets core clock */
      pstClock = orxClock_FindFirst(orx2F(-1.0f), orxCLOCK_TYPE_CORE);

      /* Valid? */
      if(pstClock != orxNULL)
      {
        /* Registers update function */
        eResult = orxClock_Register(pstClock, orxMouse_GLFW_Update, orxNULL, orxMODULE_ID_MOUSE, orxCLOCK_PRIORITY_HIGHER);

        /* Success? */
        if(eResult != orxSTATUS_FAILURE)
        {
          /* Registers clean function */
          eResult = orxClock_Register(pstClock, orxMouse_GLFW_Clean, orxNULL, orxMODULE_ID_MOUSE, orxCLOCK_PRIORITY_LOWER);
        }
        else
        {
          /* Unregisters update function */
          orxClock_Unregister(pstClock, orxMouse_GLFW_Update);
        }
      }

      /* Success? */
      if(eResult != orxSTATUS_FAILURE)
      {
        /* Updates status */
        sstMouse.u32Flags |= orxMOUSE_KU32_STATIC_FLAG_READY;

        /* Adds event handler */
        orxEvent_AddHandler(orxEVENT_TYPE_DISPLAY, orxMouse_GLFW_EventHandler);

        /* Registers mouse position callback */
        glfwSetMousePosCallback(orxMouse_GLFW_MousePositionCallback);

        /* Registers mouse wheel callback */
        glfwSetMouseWheelCallback(orxMouse_GLFW_MouseWheelCallback);

        /* Pushes config section */
        orxConfig_PushSection(orxMOUSE_KZ_CONFIG_SECTION);

        /* Has show cursor value? */
        if(orxConfig_HasValue(orxMOUSE_KZ_CONFIG_SHOW_CURSOR) != orxFALSE)
        {
          /* Updates cursor status */
          orxMouse_GLFW_ShowCursor(orxConfig_GetBool(orxMOUSE_KZ_CONFIG_SHOW_CURSOR));
        }

        /* Pops config section */
        orxConfig_PopSection();
      }
    }
  }

  /* Done! */
  return eResult;
}
Exemple #25
0
 * @author [email protected]
 *
 * Bounce demo
 *
 */


#include "orxPluginAPI.h"

#define             TRAIL_POINT_NUMBER                      80

static orxU32       su32VideoModeIndex                    = 0;
static orxBOOL      sbShaderEnabled                       = orxFALSE;
static orxSPAWNER  *spoBallSpawner                        = orxNULL;
static orxOBJECT   *spstWalls                             = orxNULL;
static orxFLOAT     sfShaderPhase                         = orx2F(0.0f);
static orxFLOAT     sfShaderAmplitude                     = orx2F(0.0f);
static orxFLOAT     sfShaderFrequency                     = orx2F(1.0f);
static orxVECTOR    svColor                               = {0};
static orxFLOAT     sfColorTime                           = orx2F(0.0f);
static orxFLOAT     sfTrailTimer                          = orx2F(0.0f);
static orxBOOL      sbRecord                              = orxFALSE;
static orxU32       su32TrailIndex                        = 0;
static orxVECTOR    savTrailPointList[TRAIL_POINT_NUMBER] = {0};
static orxVECTOR    savTrailSpeedList[TRAIL_POINT_NUMBER] = {0};

/** Applies current selected video mode
 */
static void orxBounce_ApplyCurrentVideoMode()
{
  orxDISPLAY_VIDEO_MODE stVideoMode;
Exemple #26
0
/** Update callback
 */
static void orxFASTCALL orxBounce_Update(const orxCLOCK_INFO *_pstClockInfo, void *_pstContext)
{
  orxVECTOR vMousePos;

  /* Profiles */
  orxPROFILER_PUSH_MARKER("Bounce_Update");

  if((sbRecord == orxFALSE) && (orxInput_IsActive("Record") != orxFALSE))
  {
    /* Starts recording with default settings */
    orxSound_StartRecording("orxSoundRecording.wav", orxFALSE, 0, 0);

    /* Updates status */
    sbRecord = orxTRUE;
  }

  if(orxInput_IsActive("ToggleTrail") && (orxInput_HasNewStatus("ToggleTrail")))
  {
    /* Toggles trail rendering */
    orxConfig_PushSection("Bounce");
    orxConfig_SetBool("DisplayTrail", !orxConfig_GetBool("DisplayTrail"));
    orxConfig_PopSection();
  }

  if(orxInput_IsActive("ToggleProfiler") && orxInput_HasNewStatus("ToggleProfiler"))
  {
    /* Toggles profiler rendering */
    orxConfig_PushSection(orxRENDER_KZ_CONFIG_SECTION);
    orxConfig_SetBool(orxRENDER_KZ_CONFIG_SHOW_PROFILER, !orxConfig_GetBool(orxRENDER_KZ_CONFIG_SHOW_PROFILER));
    orxConfig_PopSection();
  }

  if(orxInput_IsActive("PreviousResolution") && orxInput_HasNewStatus("PreviousResolution"))
  {
    /* Updates video mode index */
    su32VideoModeIndex = (su32VideoModeIndex == 0) ? orxDisplay_GetVideoModeCounter() - 1 : su32VideoModeIndex - 1;

    /* Applies it */
    orxBounce_ApplyCurrentVideoMode();
  }
  else if(orxInput_IsActive("NextResolution") && orxInput_HasNewStatus("NextResolution"))
  {
    /* Updates video mode index */
    su32VideoModeIndex = (su32VideoModeIndex >= orxDisplay_GetVideoModeCounter() - 1) ? 0 : su32VideoModeIndex + 1;

    /* Applies it */
    orxBounce_ApplyCurrentVideoMode();
  }
  if(orxInput_IsActive("ToggleFullScreen") && orxInput_HasNewStatus("ToggleFullScreen"))
  {
    /* Toggles full screen display */
    orxDisplay_SetFullScreen(!orxDisplay_IsFullScreen());
  }

  /* Pushes config section */
  orxConfig_PushSection("Bounce");

  /* Updates shader values */
  sfShaderPhase    += orxConfig_GetFloat("ShaderPhaseSpeed") * _pstClockInfo->fDT;
  sfShaderFrequency = orxConfig_GetFloat("ShaderMaxFrequency") * orxMath_Sin(orxConfig_GetFloat("ShaderFrequencySpeed") * _pstClockInfo->fTime);
  sfShaderAmplitude = orxConfig_GetFloat("ShaderMaxAmplitude") * orxMath_Sin(orxConfig_GetFloat("ShaderAmplitudeSpeed") * _pstClockInfo->fTime);

  /* Updates color time */
  sfColorTime -= _pstClockInfo->fDT;

  /* Should update color */
  if(sfColorTime <= orxFLOAT_0)
  {
    orxConfig_PushSection("BounceShader");
    orxConfig_GetVector("color", &svColor);
    orxConfig_PopSection();

    sfColorTime += orx2F(3.0f);
  }

  /* Gets mouse world position */
  orxRender_GetWorldPosition(&vMousePos, orxNULL, orxMouse_GetPosition(&vMousePos));

  /* Updates position */
  vMousePos.fZ += orx2F(0.5f);

  /* Has ball spawner? */
  if(spoBallSpawner != orxNULL)
  {
    /* Updates its position */
    orxSpawner_SetPosition(spoBallSpawner, &vMousePos);
  }

  /* Spawning */
  if(orxInput_IsActive("Spawn"))
  {
    /* Spawns one ball */
    orxSpawner_Spawn(spoBallSpawner, 1);
  }
  /* Picking? */
  else if(orxInput_IsActive("Pick"))
  {
    orxOBJECT *pstObject;

    /* Updates mouse position */
    vMousePos.fZ -= orx2F(0.1f);

    /* Picks object under mouse */
    pstObject = orxObject_Pick(&vMousePos, orxU32_UNDEFINED);

    /* Found? */
    if(pstObject)
    {
      /* Adds FX */
      orxObject_AddUniqueFX(pstObject, "Pick");
    }
  }

  /* Pops config section */
  orxConfig_PopSection();

  /* Toggle shader? */
  if(orxInput_IsActive("ToggleShader") && (orxInput_HasNewStatus("ToggleShader")))
  {
    /* Toggles shader status */
    sbShaderEnabled = !sbShaderEnabled;
  }

  /* Profiles */
  orxPROFILER_POP_MARKER();
}
Exemple #27
0
/** Sets relative graphic pivot
 * @param[in]   _pstGraphic     Concerned graphic
 * @param[in]   _u32AlignFlags  Alignment flags
 * @return      orxSTATUS_SUCCESS / orxSTATUS_FAILURE
 */
orxSTATUS orxFASTCALL orxGraphic_SetRelativePivot(orxGRAPHIC *_pstGraphic, orxU32 _u32AlignFlags)
{
  orxVECTOR vSize;
  orxSTATUS eResult;

  /* Checks */
  orxASSERT(sstGraphic.u32Flags & orxGRAPHIC_KU32_STATIC_FLAG_READY);
  orxSTRUCTURE_ASSERT(_pstGraphic);
  orxASSERT((_u32AlignFlags & orxGRAPHIC_KU32_MASK_ALIGN) == _u32AlignFlags);
  orxASSERT(_pstGraphic->fWidth >= orxFLOAT_0);
  orxASSERT(_pstGraphic->fHeight >= orxFLOAT_0);

  /* Valid size? */
  if(orxGraphic_GetSize(_pstGraphic, &vSize) != orxNULL)
  {
    orxFLOAT  fHeight, fWidth;

    /* Gets graphic size */
    fWidth  = vSize.fX;
    fHeight = vSize.fY;

    /* Pivot left? */
    if(orxFLAG_TEST(_u32AlignFlags, orxGRAPHIC_KU32_FLAG_ALIGN_LEFT))
    {
      /* Updates x position */
      _pstGraphic->vPivot.fX = orxFLOAT_0;
    }
    /* Align right? */
    else if(orxFLAG_TEST(_u32AlignFlags, orxGRAPHIC_KU32_FLAG_ALIGN_RIGHT))
    {
      /* Updates x position */
      _pstGraphic->vPivot.fX = fWidth;
    }
    /* Align center */
    else
    {
      /* Updates x position */
      _pstGraphic->vPivot.fX = orx2F(0.5f) * fWidth;
    }

    /* Align top? */
    if(orxFLAG_TEST(_u32AlignFlags, orxGRAPHIC_KU32_FLAG_ALIGN_TOP))
    {
      /* Updates y position */
      _pstGraphic->vPivot.fY = orxFLOAT_0;
    }
    /* Align bottom? */
    else if(orxFLAG_TEST(_u32AlignFlags, orxGRAPHIC_KU32_FLAG_ALIGN_BOTTOM))
    {
      /* Updates y position */
      _pstGraphic->vPivot.fY = fHeight;
    }
    /* Align center */
    else
    {
      /* Updates y position */
      _pstGraphic->vPivot.fY = orx2F(0.5f) * fHeight;
    }

    /* Truncate? */
    if(orxFLAG_TEST(_u32AlignFlags, orxGRAPHIC_KU32_FLAG_ALIGN_TRUNCATE))
    {
      /* Updates position */
      orxVector_Floor(&(_pstGraphic->vPivot), &(_pstGraphic->vPivot));
    }
    /* Round? */
    else if(orxFLAG_TEST(_u32AlignFlags, orxGRAPHIC_KU32_FLAG_ALIGN_ROUND))
    {
      /* Updates position */
      orxVector_Round(&(_pstGraphic->vPivot), &(_pstGraphic->vPivot));
    }

    /* Updates status */
    orxStructure_SetFlags(_pstGraphic, _u32AlignFlags | orxGRAPHIC_KU32_FLAG_HAS_PIVOT | orxGRAPHIC_KU32_FLAG_RELATIVE_PIVOT, orxGRAPHIC_KU32_MASK_ALIGN);

    /* Updates result */
    eResult = orxSTATUS_SUCCESS;
  }
  else
  {
    /* Logs message */
    orxDEBUG_PRINT(orxDEBUG_LEVEL_DISPLAY, "Invalid size retrieved from graphic.");

    /* Updates result */
    eResult = orxSTATUS_FAILURE;
  }

  /* Done! */
  return eResult;
}
Exemple #28
0
/** Updates the clock system
 * @return orxSTATUS_SUCCESS / orxSTATUS_FAILURE
 */
orxSTATUS orxFASTCALL orxClock_Update()
{
  orxDOUBLE dNewTime;
  orxFLOAT  fDT, fDelay;
  orxCLOCK *pstClock;
  orxSTATUS eResult = orxSTATUS_SUCCESS;

  /* Checks */
  orxASSERT(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_READY);

  /* Not already locked? */
  if(!(sstClock.u32Flags & orxCLOCK_KU32_STATIC_FLAG_UPDATE_LOCK))
  {
    /* Lock clocks */
    sstClock.u32Flags |= orxCLOCK_KU32_STATIC_FLAG_UPDATE_LOCK;

    /* Gets new time */
    dNewTime  = orxSystem_GetTime();

    /* Computes natural DT */
    fDT       = (orxFLOAT)(dNewTime - sstClock.dTime);

    /* Gets modified DT */
    fDT       = orxClock_ComputeDT(fDT, orxNULL);

    /* Updates time */
    sstClock.dTime = dNewTime;

    /* Inits delay */
    fDelay = sstClock.fMainClockTickSize;

    /* For all clocks */
    for(pstClock = orxCLOCK(orxStructure_GetFirst(orxSTRUCTURE_ID_CLOCK));
        pstClock != orxNULL;
        pstClock = orxCLOCK(orxStructure_GetNext(pstClock)))
    {
      /* Locks it */
      orxStructure_SetFlags(pstClock, orxCLOCK_KU32_FLAG_UPDATE_LOCK, orxCLOCK_KU32_FLAG_NONE);

      /* Is clock not paused? */
      if(orxClock_IsPaused(pstClock) == orxFALSE)
      {
        orxFLOAT fClockDelay;

        /* Updates clock real time & partial DT */
        pstClock->fPartialDT += fDT;

        /* New tick happens? */
        if(pstClock->fPartialDT >= pstClock->stClockInfo.fTickSize)
        {
          orxFLOAT                    fClockDT;
          orxCLOCK_TIMER_STORAGE     *pstTimerStorage;
          orxCLOCK_FUNCTION_STORAGE  *pstFunctionStorage;

          /* Gets clock modified DT */
          fClockDT = orxClock_ComputeDT(pstClock->fPartialDT, &(pstClock->stClockInfo));

          /* Updates clock DT */
          pstClock->stClockInfo.fDT = fClockDT;

          /* Updates clock time */
          pstClock->stClockInfo.fTime += fClockDT;

          /* For all timers */
          for(pstTimerStorage = (orxCLOCK_TIMER_STORAGE *)orxLinkList_GetFirst(&(pstClock->stTimerList)); pstTimerStorage != orxNULL;)
          {
            /* Should call it? */
            if((pstTimerStorage->fTimeStamp <= pstClock->stClockInfo.fTime) && (pstTimerStorage->s32Repetition != 0))
            {
              /* Calls it */
              pstTimerStorage->pfnCallback(&(pstClock->stClockInfo), pstTimerStorage->pContext);

              /* Updates its time stamp */
              pstTimerStorage->fTimeStamp = pstClock->stClockInfo.fTime + pstTimerStorage->fDelay;

              /* Should update counter */
              if(pstTimerStorage->s32Repetition > 0)
              {
                /* Updates it */
                pstTimerStorage->s32Repetition--;
              }
            }

            /* Should delete it */
            if(pstTimerStorage->s32Repetition == 0)
            {
              orxCLOCK_TIMER_STORAGE *pstDelete;

              /* Gets timer to delete */
              pstDelete = pstTimerStorage;

              /* Gets the next timer */
              pstTimerStorage = (orxCLOCK_TIMER_STORAGE *)orxLinkList_GetNext(&(pstTimerStorage->stNode));

              /* Removes current timer */
              orxLinkList_Remove(&(pstDelete->stNode));

              /* Deletes it */
              orxBank_Free(sstClock.pstTimerBank, pstDelete);
            }
            else
            {
              /* Gets the next timer */
              pstTimerStorage = (orxCLOCK_TIMER_STORAGE *)orxLinkList_GetNext(&(pstTimerStorage->stNode));
            }
          }

          /* For all registered callbacks */
          for(pstFunctionStorage = (orxCLOCK_FUNCTION_STORAGE *)orxLinkList_GetFirst(&(pstClock->stFunctionList));
              pstFunctionStorage != orxNULL;
              pstFunctionStorage = (orxCLOCK_FUNCTION_STORAGE *)orxLinkList_GetNext(&(pstFunctionStorage->stNode)))
          {
            /* Calls it */
            pstFunctionStorage->pfnCallback(&(pstClock->stClockInfo), pstFunctionStorage->pContext);
          }

          /* Updates partial DT */
          pstClock->fPartialDT = orxFLOAT_0;
        }

        /* Gets clock's delay */
        fClockDelay = pstClock->stClockInfo.fTickSize - pstClock->fPartialDT;

        /* Smaller than previous clocks' delay? */
        if(fClockDelay < fDelay)
        {
          /* Stores it */
          fDelay = fClockDelay;
        }
      }

      /* Unlocks it */
      orxStructure_SetFlags(pstClock, orxCLOCK_KU32_FLAG_NONE, orxCLOCK_KU32_FLAG_UPDATE_LOCK);
    }

    /* Unlocks clocks */
    sstClock.u32Flags &= ~orxCLOCK_KU32_STATIC_FLAG_UPDATE_LOCK;

    /* Gets real remaining delay */
    fDelay = fDelay + orxCLOCK_KF_DELAY_ADJUSTMENT - orx2F(orxSystem_GetTime() - sstClock.dTime);

    /* Should delay? */
    if(fDelay > orxFLOAT_0)
    {
      /* Waits for next time slice */
      orxSystem_Delay(fDelay);
    }
  }

  /* Done! */
  return eResult;
}
/* *** Directory separators *** */

const orxCHAR     orxCHAR_DIRECTORY_SEPARATOR_WINDOWS    = '\\';
const orxCHAR     orxCHAR_DIRECTORY_SEPARATOR_LINUX      = '/';
const orxSTRING   orxSTRING_DIRECTORY_SEPARATOR_WINDOWS  = "\\";
const orxSTRING   orxSTRING_DIRECTORY_SEPARATOR_LINUX    = "/";

#ifdef __orxWINDOWS__

const orxCHAR      orxCHAR_DIRECTORY_SEPARATOR         = '\\';
const orxSTRING    orxSTRING_DIRECTORY_SEPARATOR       = "\\";

#else /* __orxWINDOWS__ */

/* Linux / Mac / GP2X / Wii */
#if defined(__orxLINUX__) || defined(__orxMAC__) || defined(__orxGP2X__) || defined(__orxWII__) || defined(__orxIPHONE__)

const orxCHAR    orxCHAR_DIRECTORY_SEPARATOR         = '/';
const orxSTRING  orxSTRING_DIRECTORY_SEPARATOR       = "/";

#endif /* __orxLINUX__ || __orxMAC__ || __orxGP2X__ || __orxWII__ || __orxIPHONE__ */

#endif /* __orxWINDOWS__ */


/* *** Float constants *** */

const orxFLOAT orxFLOAT_0 = orx2F(0.0f);
const orxFLOAT orxFLOAT_1 = orx2F(1.0f);
Exemple #30
0
/** Displays trail
 */
static void orxBounce_DisplayTrail(const orxBITMAP *_pstBitmap)
{
#define STORE_VERTEX(INDEX, X, Y, U, V, RGBA) astVertexList[INDEX].fX = X; astVertexList[INDEX].fY = Y; astVertexList[INDEX].fU = U; astVertexList[INDEX].fV = V; astVertexList[INDEX].stRGBA = RGBA;

  orxDISPLAY_VERTEX astVertexList[TRAIL_POINT_NUMBER * 2];
  orxVECTOR         vOffset;
  orxU32            i;

  /* For all points */
  for(i = 0; i < TRAIL_POINT_NUMBER; i++)
  {
    orxVECTOR vVertex1, vVertex2;
    orxU32    u32Index, u32NextIndex;

    /* Gets barrel indices */
    u32Index      = (i + su32TrailIndex) % TRAIL_POINT_NUMBER;
    u32NextIndex  = (i + 1 + su32TrailIndex) % TRAIL_POINT_NUMBER;

    /* Not at the end? */
    if(i < TRAIL_POINT_NUMBER - 1)
    {
      /* Gets offset vector */
      orxVector_Mulf(&vOffset, orxVector_Normalize(&vOffset, orxVector_2DRotate(&vOffset, orxVector_Sub(&vOffset, &savTrailPointList[u32NextIndex], &savTrailPointList[u32Index]), orxMATH_KF_PI_BY_2)), orx2F(40.0f) / orxMath_Pow(orxS2F(i), orx2F(0.6f)));
    }

    /* Computes vertices positions */
    orxVector_Add(&vVertex1, &savTrailPointList[u32Index], &vOffset);
    orxVector_Sub(&vVertex2, &savTrailPointList[u32Index], &vOffset);

    /* Stores vertices */
    STORE_VERTEX(i * 2, vVertex1.fX, vVertex1.fY, orxFLOAT_0, orxU2F(i) / orxU2F(TRAIL_POINT_NUMBER - 1), orx2RGBA(0xFF, 0xFF, 0xFF, 0xFF * i / (TRAIL_POINT_NUMBER + 50)));
    STORE_VERTEX(i * 2 + 1, vVertex2.fX, vVertex2.fY, orxFLOAT_1, orxU2F(i) / orxU2F(TRAIL_POINT_NUMBER - 1), orx2RGBA(0xFF, 0xFF, 0xFF, 0xFF * i / (TRAIL_POINT_NUMBER + 50)));
  }

  /* Draws trail */
  orxDisplay_DrawMesh(_pstBitmap, orxDISPLAY_SMOOTHING_ON, orxDISPLAY_BLEND_MODE_ALPHA, TRAIL_POINT_NUMBER * 2, astVertexList);
}