本文整理汇总了C++中GP_ASSERT函数的典型用法代码示例。如果您正苦于以下问题:C++ GP_ASSERT函数的具体用法?C++ GP_ASSERT怎么用?C++ GP_ASSERT使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GP_ASSERT函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GP_ASSERT
void PhysicsRigidBody::applyImpulse(const Vector3& impulse, const Vector3* relativePosition)
{
// If the impulse is significant enough, activate the rigid body
// to make sure that it isn't sleeping and apply the impulse.
if (impulse.lengthSquared() > MATH_EPSILON)
{
GP_ASSERT(_body);
_body->activate();
if (relativePosition)
{
_body->applyImpulse(BV(impulse), BV(*relativePosition));
}
else
_body->applyCentralImpulse(BV(impulse));
}
}
示例2: _vertexSize
VertexFormat::VertexFormat(const Element* elements, unsigned int elementCount)
: _vertexSize(0)
{
GP_ASSERT(elements);
// Copy elements and compute vertex size
for (unsigned int i = 0; i < elementCount; ++i)
{
// Copy element
Element element;
memcpy(&element, &elements[i], sizeof(Element));
_elements.push_back(element);
_vertexSize += element.size * sizeof(float);
}
}
示例3: GP_ASSERT
void Vec2::clamp(const Vec2& min, const Vec2& max)
{
GP_ASSERT(!(min.x > max.x || min.y > max.y ));
// Clamp the x value.
if (x < min.x)
x = min.x;
if (x > max.x)
x = max.x;
// Clamp the y value.
if (y < min.y)
y = min.y;
if (y > max.y)
y = max.y;
}
示例4: GP_ASSERT
const ScriptTarget::Event* ScriptTarget::getScriptEvent(const char* eventName) const
{
GP_ASSERT(eventName);
// Lookup the event for this name
const Event* event = NULL;
RegistryEntry* re = _scriptRegistries;
while (re)
{
if ((event = re->registry->getEvent(eventName)) != NULL)
break;
re = re->next;
}
return event;
}
示例5: GP_ASSERT
void Transform::removeListener(Transform::Listener* listener)
{
GP_ASSERT(listener);
if (_listeners)
{
for (std::list<TransformListener>::iterator itr = _listeners->begin(); itr != _listeners->end(); ++itr)
{
if ((*itr).listener == listener)
{
_listeners->erase(itr);
break;
}
}
}
}
示例6: SAFE_DELETE
PhysicsCollisionObject::~PhysicsCollisionObject()
{
SAFE_DELETE(_motionState);
if (_scriptListeners)
{
for (unsigned int i = 0; i < _scriptListeners->size(); i++)
{
SAFE_DELETE((*_scriptListeners)[i]);
}
SAFE_DELETE(_scriptListeners);
}
GP_ASSERT(Game::getInstance()->getPhysicsController());
Game::getInstance()->getPhysicsController()->destroyShape(_collisionShape);
}
示例7: GP_ASSERT
void Plane::intersection(const Plane& p1, const Plane& p2, const Plane& p3, kmVec3* point)
{
GP_ASSERT(point);
// The planes' normals must be all normalized (which we guarantee in the Plane class).
// Calculate the determinant of the kmMat4 (i.e | n1 n2 n3 |).
float det = p1._normal.x * (p2._normal.y * p3._normal.z -
p2._normal.z * p3._normal.y) - p2._normal.x *(p1._normal.y * p3._normal.z -
p1._normal.z * p3._normal.y) + p3._normal.x * (p1._normal.y * p2._normal.z - p1._normal.z * p2._normal.y);
// If the determinant is zero, then the planes do not all intersect.
if (fabs(det) <= MATH_EPSILON)
return;
// Create 3 points, one on each plane.
// (We just pick the point on the plane directly along its normal from the origin).
float p1x = -p1._normal.x * p1._distance;
float p1y = -p1._normal.y * p1._distance;
float p1z = -p1._normal.z * p1._distance;
float p2x = -p2._normal.x * p2._distance;
float p2y = -p2._normal.y * p2._distance;
float p2z = -p2._normal.z * p2._distance;
float p3x = -p3._normal.x * p3._distance;
float p3y = -p3._normal.y * p3._distance;
float p3z = -p3._normal.z * p3._distance;
// Calculate the cross products of the normals.
float c1x = (p2._normal.y * p3._normal.z) - (p2._normal.z * p3._normal.y);
float c1y = (p2._normal.z * p3._normal.x) - (p2._normal.x * p3._normal.z);
float c1z = (p2._normal.x * p3._normal.y) - (p2._normal.y * p3._normal.x);
float c2x = (p3._normal.y * p1._normal.z) - (p3._normal.z * p1._normal.y);
float c2y = (p3._normal.z * p1._normal.x) - (p3._normal.x * p1._normal.z);
float c2z = (p3._normal.x * p1._normal.y) - (p3._normal.y * p1._normal.x);
float c3x = (p1._normal.y * p2._normal.z) - (p1._normal.z * p2._normal.y);
float c3y = (p1._normal.z * p2._normal.x) - (p1._normal.x * p2._normal.z);
float c3z = (p1._normal.x * p2._normal.y) - (p1._normal.y * p2._normal.x);
// Calculate the point of intersection using the formula:
// x = (| n1 n2 n3 |)^-1 * [(x1 * n1)(n2 x n3) + (x2 * n2)(n3 x n1) + (x3 * n3)(n1 x n2)]
float s1 = p1x * p1._normal.x + p1y * p1._normal.y + p1z * p1._normal.z;
float s2 = p2x * p2._normal.x + p2y * p2._normal.y + p2z * p2._normal.z;
float s3 = p3x * p3._normal.x + p3y * p3._normal.y + p3z * p3._normal.z;
float detI = 1.0f / det;
point->x = (s1 * c1x + s2 * c2x + s3 * c3x) * detI;
point->y = (s1 * c1y + s2 * c2y + s3 * c3y) * detI;
point->z = (s1 * c1z + s2 * c2z + s3 * c3z) * detI;
}
示例8: trackRef
void* trackRef(Ref* ref)
{
GP_ASSERT(ref);
// Create memory allocation record.
RefAllocationRecord* rec = (RefAllocationRecord*)malloc(sizeof(RefAllocationRecord));
rec->ref = ref;
rec->next = __refAllocations;
rec->prev = 0;
if (__refAllocations)
__refAllocations->prev = rec;
__refAllocations = rec;
++__refAllocationCount;
return rec;
}
示例9: GP_ASSERT
AnimationClip* Animation::findClip(const char* id) const
{
if (_clips)
{
size_t clipCount = _clips->size();
for (size_t i = 0; i < clipCount; i++)
{
AnimationClip* clip = _clips->at(i);
GP_ASSERT(clip);
if (clip->_id.compare(id) == 0)
{
return clip;
}
}
}
return NULL;
}
示例10: resetClipStateBit
void AnimationClip::onEnd()
{
_blendWeight = 1.0f;
resetClipStateBit(CLIP_ALL_BITS);
// Notify end listeners if any.
if (_endListeners)
{
std::vector<Listener*>::iterator listener = _endListeners->begin();
while (listener != _endListeners->end())
{
GP_ASSERT(*listener);
(*listener)->animationEvent(this, Listener::END);
listener++;
}
}
}
示例11: GP_ASSERT
AudioSource* AudioSource::create(Properties* properties)
{
// Check if the properties is valid and has a valid namespace.
GP_ASSERT(properties);
if (!properties || !(strcmp(properties->getNamespace(), "audio") == 0))
{
GP_ERROR("Failed to load audio source from properties object: must be non-null object and have namespace equal to 'audio'.");
return NULL;
}
std::string path;
if (!properties->getPath("path", &path))
{
GP_ERROR("Audio file failed to load; the file path was not specified.");
return NULL;
}
// Create the audio source.
AudioSource* audio = AudioSource::create(path.c_str());
if (audio == NULL)
{
GP_ERROR("Audio file '%s' failed to load properly.", path.c_str());
return NULL;
}
// Set any properties that the user specified in the .audio file.
if (properties->exists("looped"))
{
audio->setLooped(properties->getBool("looped"));
}
if (properties->exists("gain"))
{
audio->setGain(properties->getFloat("gain"));
}
if (properties->exists("pitch"))
{
audio->setPitch(properties->getFloat("pitch"));
}
Vector3 v;
if (properties->getVector3("velocity", &v))
{
audio->setVelocity(v);
}
return audio;
}
示例12: GP_ASSERT
void Animation::setTransformRotationOffset(Curve* curve, unsigned int propertyId)
{
GP_ASSERT(curve);
switch (propertyId)
{
case Transform::ANIMATE_ROTATE:
case Transform::ANIMATE_ROTATE_TRANSLATE:
curve->setQuaternionOffset(ANIMATION_ROTATE_OFFSET);
return;
case Transform::ANIMATE_SCALE_ROTATE_TRANSLATE:
curve->setQuaternionOffset(ANIMATION_SRT_OFFSET);
return;
}
return;
}
示例13: sqrt
void BoundingSphere::merge(const BoundingSphere& sphere)
{
if (sphere.isEmpty())
return;
// Calculate the distance between the two centers.
float vx = center.x - sphere.center.x;
float vy = center.y - sphere.center.y;
float vz = center.z - sphere.center.z;
float d = sqrt(vx * vx + vy * vy + vz * vz);
// If one sphere is contained inside the other, set to the larger sphere.
if (d <= (sphere.radius - radius))
{
center = sphere.center;
radius = sphere.radius;
return;
}
else if (d <= (radius - sphere.radius))
{
return;
}
// Calculate the unit vector between the two centers.
GP_ASSERT(d != 0.0f);
float dI = 1.0f / d;
vx *= dI;
vy *= dI;
vz *= dI;
// Calculate the new radius.
float r = (radius + sphere.radius + d) * 0.5f;
// Calculate the new center.
float scaleFactor = (r - sphere.radius);
vx = vx * scaleFactor + sphere.center.x;
vy = vy * scaleFactor + sphere.center.y;
vz = vz * scaleFactor + sphere.center.z;
// Set the new center and radius.
center.x = vx;
center.y = vy;
center.z = vz;
radius = r;
}
示例14: GP_ASSERT
void Joystick::drawImages(SpriteBatch* spriteBatch, const Rectangle& clip)
{
GP_ASSERT(spriteBatch);
// If the joystick is not absolute, then only draw if it is active.
if (!_relative || (_relative && _state == ACTIVE))
{
if (!_relative)
{
_screenRegion.x = _viewportClipBounds.x + (_viewportClipBounds.width - _screenRegion.width) / 2.0f;
_screenRegion.y = _viewportClipBounds.y + (_viewportClipBounds.height - _screenRegion.height) / 2.0f;
}
// Draw the outer image.
Theme::ThemeImage* outer = getImage("outer", _state);
if (outer)
{
const Theme::UVs& uvs = outer->getUVs();
const Vector4& color = outer->getColor();
if (_relative)
spriteBatch->draw(_screenRegion.x, _screenRegion.y, _outerSize->x, _outerSize->y, uvs.u1, uvs.v1, uvs.u2, uvs.v2, color);
else
spriteBatch->draw(_screenRegion.x, _screenRegion.y, _outerSize->x, _outerSize->y, uvs.u1, uvs.v1, uvs.u2, uvs.v2, color, _viewportClipBounds);
}
// Draw the inner image.
Theme::ThemeImage* inner = getImage("inner", _state);
if (inner)
{
Vector2 position(_screenRegion.x, _screenRegion.y);
// Adjust position to reflect displacement.
position.x += _displacement.x;
position.y += -_displacement.y;
// Get the uvs and color and draw.
const Theme::UVs& uvs = inner->getUVs();
const Vector4& color = inner->getColor();
if (_relative)
spriteBatch->draw(position.x, position.y, _innerSize->x, _innerSize->y, uvs.u1, uvs.v1, uvs.u2, uvs.v2, color);
else
spriteBatch->draw(position.x, position.y, _innerSize->x, _innerSize->y, uvs.u1, uvs.v1, uvs.u2, uvs.v2, color, _viewportClipBounds);
}
}
}
示例15: GP_ASSERT
Vector3 PhysicsConstraint::getWorldCenterOfMass(const Node* node)
{
GP_ASSERT(node);
const BoundingSphere& sphere = node->getBoundingSphere();
if (!(sphere.center.isZero() && sphere.radius == 0))
{
// The world-space center of mass is the sphere's center.
return sphere.center;
}
// Warn the user that the node has no bounding volume.
GP_WARN("Node %s' has no bounding volume - center of mass is defaulting to local coordinate origin.", node->getId());
Vector3 center;
node->getWorldMatrix().transformPoint(¢er);
return center;
}