Fix stuttering of item rotation for big nitro switched by bubblegum
This commit is contained in:
parent
832c1abc9b
commit
a7bbe54ea6
@ -159,7 +159,6 @@ Item::Item(ItemType type, const Vec3& xyz, const Vec3& normal,
|
||||
initItem(type, xyz);
|
||||
m_graphical_type = type;
|
||||
m_original_rotation = shortestArcQuat(Vec3(0, 1, 0), normal);
|
||||
m_rotation_angle = 0.0f;
|
||||
m_listener = NULL;
|
||||
|
||||
LODNode* lodnode =
|
||||
@ -210,7 +209,6 @@ Item::Item(const Vec3& xyz, float distance, TriggerItemListener* trigger)
|
||||
initItem(ITEM_TRIGGER, xyz);
|
||||
m_graphical_type = ITEM_TRIGGER;
|
||||
m_original_rotation = btQuaternion(0, 0, 0, 1);
|
||||
m_rotation_angle = 0.0f;
|
||||
m_node = NULL;
|
||||
m_listener = trigger;
|
||||
m_was_available_previously = true;
|
||||
@ -332,7 +330,6 @@ void Item::handleNewMesh(ItemType type)
|
||||
Vec3 hpr;
|
||||
hpr.setHPR(m_original_rotation);
|
||||
m_node->setRotation(hpr.toIrrHPR());
|
||||
m_rotation_angle = 0.0f;
|
||||
#endif
|
||||
} // handleNewMesh
|
||||
|
||||
@ -369,18 +366,32 @@ void Item::updateGraphics(float dt)
|
||||
if (!isAvailable() && time_till_return <= 1.0f)
|
||||
{
|
||||
// Make it visible by scaling it from 0 to 1:
|
||||
if (rotating())
|
||||
{
|
||||
float angle =
|
||||
fmodf((float)(World::getWorld()->getTicksSinceStart() +
|
||||
getTicksTillReturn()) / 40.0f, M_PI * 2);
|
||||
btMatrix3x3 m;
|
||||
m.setRotation(m_original_rotation);
|
||||
btQuaternion r = btQuaternion(m.getColumn(1), angle) *
|
||||
m_original_rotation;
|
||||
Vec3 hpr;
|
||||
hpr.setHPR(r);
|
||||
m_node->setRotation(hpr.toIrrHPR());
|
||||
}
|
||||
m_node->setVisible(true);
|
||||
m_node->setScale(core::vector3df(1, 1, 1)*(1 - time_till_return));
|
||||
}
|
||||
if (isAvailable() && rotating())
|
||||
{
|
||||
// have it rotate
|
||||
m_rotation_angle += dt * M_PI;
|
||||
if (m_rotation_angle > M_PI * 2) m_rotation_angle -= M_PI * 2;
|
||||
float angle =
|
||||
fmodf((float)World::getWorld()->getTicksSinceStart() / 40.0f,
|
||||
M_PI * 2);
|
||||
|
||||
btMatrix3x3 m;
|
||||
m.setRotation(m_original_rotation);
|
||||
btQuaternion r = btQuaternion(m.getColumn(1), m_rotation_angle) *
|
||||
btQuaternion r = btQuaternion(m.getColumn(1), angle) *
|
||||
m_original_rotation;
|
||||
|
||||
Vec3 hpr;
|
||||
|
@ -323,9 +323,6 @@ private:
|
||||
* rotation). */
|
||||
btQuaternion m_original_rotation;
|
||||
|
||||
/** Used when rotating the item */
|
||||
float m_rotation_angle;
|
||||
|
||||
/** Scene node of this item. */
|
||||
LODNode *m_node;
|
||||
|
||||
|
@ -56,12 +56,6 @@ protected:
|
||||
/** The instance of ItemManager while a race is on. */
|
||||
static std::shared_ptr<ItemManager> m_item_manager;
|
||||
|
||||
/** Stores all item models. */
|
||||
static std::vector<scene::IMesh *> m_item_mesh;
|
||||
|
||||
/** Stores all low-resolution item models. */
|
||||
static std::vector<scene::IMesh *> m_item_lowres_mesh;
|
||||
|
||||
public:
|
||||
static void loadDefaultItemMeshes();
|
||||
static void removeTextures();
|
||||
@ -116,6 +110,12 @@ private:
|
||||
* field is undefined if no Graph exist, e.g. arena without navmesh. */
|
||||
std::vector< AllItemTypes > *m_items_in_quads;
|
||||
|
||||
/** Stores all item models. */
|
||||
static std::vector<scene::IMesh *> m_item_mesh;
|
||||
|
||||
/** Stores all low-resolution item models. */
|
||||
static std::vector<scene::IMesh *> m_item_lowres_mesh;
|
||||
|
||||
protected:
|
||||
/** Remaining time that items should remain switched. If the
|
||||
* value is <0, it indicates that the items are not switched atm. */
|
||||
|
Loading…
Reference in New Issue
Block a user