/** 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; }
/** 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; }
/** 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; }
/** 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; }
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; }
/** 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; }
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; }