No combined uint32

Sorry people, you will need to re-record replay
This commit is contained in:
Benau
2016-03-27 08:31:31 +08:00
parent dff5f8d459
commit 692539690d
6 changed files with 66 additions and 56 deletions

View File

@@ -115,8 +115,10 @@ void GhostKart::update(float dt)
getKartModel()->update(dt, dt*(m_all_physic_info[idx].m_speed),
m_all_physic_info[idx].m_steer, m_all_physic_info[idx].m_speed, idx);
getKartGFX()->setGFXFromReplay(m_all_replay_events[idx].m_nitro_zipper_usage,
m_all_replay_events[idx].m_skidding_state);
getKartGFX()->setGFXFromReplay(m_all_replay_events[idx].m_nitro_usage,
m_all_replay_events[idx].m_zipper_usage,
m_all_replay_events[idx].m_skidding_state,
m_all_replay_events[idx].m_red_skidding);
getKartGFX()->update(dt);
Vec3 front(0, 0, getKartLength()*0.5f);

View File

@@ -393,55 +393,50 @@ void KartGFX::updateSkidLight(unsigned int level)
} // updateSkidLight
// ----------------------------------------------------------------------------
void KartGFX::getGFXStatus(uint32_t* nitro_zipper, uint32_t* skidding) const
void KartGFX::getGFXStatus(int* nitro, bool* zipper,
int* skidding, bool* red_skidding) const
{
uint32_t n_z, s;
n_z = 0;
s = 0;
int n = 0;
bool z = false;
int s = 0;
bool r = false;
if (m_all_emitters[KGFX_NITRO1])
{
n = (uint16_t)(m_all_emitters[KGFX_NITRO1]->getCreationRate());
}
if (m_all_emitters[KGFX_ZIPPER])
{
n_z |= m_all_emitters[KGFX_ZIPPER]->getCreationRate() > 0;
n_z <<= 16;
}
if (m_all_emitters[KGFX_NITRO1])
{
n_z += (uint16_t)(m_all_emitters[KGFX_NITRO1]->getCreationRate());
z = m_all_emitters[KGFX_ZIPPER]->getCreationRate() > 0;
}
if (m_all_emitters[KGFX_SKIDL])
{
s |= m_skidding_light_2->isVisible();
s <<= 16;
s += (uint16_t)(m_all_emitters[KGFX_SKIDL]->getCreationRate());
s = (uint16_t)(m_all_emitters[KGFX_SKIDL]->getCreationRate());
r = m_skidding_light_2->isVisible();
}
*nitro_zipper = n_z;
*nitro = n;
*zipper = z;
*skidding = s;
*red_skidding = r;
} // getGFXStatus
// ----------------------------------------------------------------------------
void KartGFX::setGFXFromReplay(uint32_t nitro_zipper, uint32_t skidding)
void KartGFX::setGFXFromReplay(int nitro, bool zipper,
int skidding, bool red_skidding)
{
const int nitro_rate = (int)(nitro_zipper & 0xffff);
const bool zipper_fire = ((nitro_zipper >> 16) & 0xffff) != 0;
const int skidding_rate = (int)(skidding & 0xffff);
const bool red_fire_skidding = ((skidding >> 16) & 0xffff) != 0;
if (zipper_fire)
setCreationRateAbsolute(KartGFX::KGFX_ZIPPER, 800.0f);
if (nitro_rate > 0)
if (nitro > 0)
{
setCreationRateAbsolute(KartGFX::KGFX_NITRO1, (float)nitro_rate);
setCreationRateAbsolute(KartGFX::KGFX_NITRO2, (float)nitro_rate);
setCreationRateAbsolute(KartGFX::KGFX_NITROSMOKE1, (float)nitro_rate);
setCreationRateAbsolute(KartGFX::KGFX_NITROSMOKE2, (float)nitro_rate);
setCreationRateAbsolute(KartGFX::KGFX_NITRO1, (float)nitro);
setCreationRateAbsolute(KartGFX::KGFX_NITRO2, (float)nitro);
setCreationRateAbsolute(KartGFX::KGFX_NITROSMOKE1, (float)nitro);
setCreationRateAbsolute(KartGFX::KGFX_NITROSMOKE2, (float)nitro);
m_nitro_light->setVisible(true);
}
else if (m_nitro_light->isVisible() && nitro_rate == 0)
else if (m_nitro_light->isVisible() && nitro == 0)
{
setCreationRateAbsolute(KartGFX::KGFX_NITRO1, 0.0f);
setCreationRateAbsolute(KartGFX::KGFX_NITRO2, 0.0f);
@@ -450,9 +445,12 @@ void KartGFX::setGFXFromReplay(uint32_t nitro_zipper, uint32_t skidding)
m_nitro_light->setVisible(false);
}
if (skidding_rate > 0)
if (zipper)
setCreationRateAbsolute(KartGFX::KGFX_ZIPPER, 800.0f);
if (skidding > 0)
{
if (!m_skidding_light_1->isVisible() && !red_fire_skidding)
if (!m_skidding_light_1->isVisible() && !red_skidding)
{
if (m_all_emitters[KGFX_SKID1L])
m_all_emitters[KGFX_SKID1L]->setParticleType(m_skid_kind1);
@@ -462,7 +460,7 @@ void KartGFX::setGFXFromReplay(uint32_t nitro_zipper, uint32_t skidding)
m_skidding_light_1->setVisible(true);
m_skidding_light_2->setVisible(false);
}
if (!m_skidding_light_2->isVisible() && red_fire_skidding)
if (!m_skidding_light_2->isVisible() && red_skidding)
{
if (m_all_emitters[KGFX_SKID1L])
m_all_emitters[KGFX_SKID1L]->setParticleType(m_skid_kind2);
@@ -472,11 +470,11 @@ void KartGFX::setGFXFromReplay(uint32_t nitro_zipper, uint32_t skidding)
m_skidding_light_1->setVisible(false);
m_skidding_light_2->setVisible(true);
}
setCreationRateAbsolute(KartGFX::KGFX_SKIDL, (float)skidding_rate);
setCreationRateAbsolute(KartGFX::KGFX_SKIDR, (float)skidding_rate);
setCreationRateAbsolute(KartGFX::KGFX_SKIDL, (float)skidding);
setCreationRateAbsolute(KartGFX::KGFX_SKIDR, (float)skidding);
}
else if ((m_skidding_light_1->isVisible() ||
m_skidding_light_2->isVisible()) && skidding_rate == 0)
m_skidding_light_2->isVisible()) && skidding == 0)
{
setCreationRateAbsolute(KartGFX::KGFX_SKIDL, 0.0f);
setCreationRateAbsolute(KartGFX::KGFX_SKIDR, 0.0f);

View File

@@ -101,8 +101,10 @@ public:
void update(float dt);
void updateNitroGraphics(float f);
void updateSkidLight(unsigned int level);
void getGFXStatus(uint32_t* nitro_zipper, uint32_t* skidding) const;
void setGFXFromReplay(uint32_t nitro_zipper, uint32_t skidding);
void getGFXStatus(int* nitro, bool* zipper,
int* skidding, bool* red_skidding) const;
void setGFXFromReplay(int nitro, bool zipper,
int skidding, bool red_skidding);
void setGFXInvisible();
}; // KartWGFX

View File

@@ -60,10 +60,14 @@ protected:
/** Records all other events. */
struct KartReplayEvent
{
/** Combined info for nitro and zipper usage for the kart recored. */
uint32_t m_nitro_zipper_usage;
/** Combined info for skidding info for the kart recored. */
uint32_t m_skidding_state;
/** Nitro usage for the kart recorded. */
int m_nitro_usage;
/** Zipper usage for the kart recorded. */
bool m_zipper_usage;
/** Skidding state for the kart recorded. */
int m_skidding_state;
/** Kart skidding showing red flame or not. */
bool m_red_skidding;
/** True if the kart recorded is jumping. */
bool m_jumping;
}; // KartReplayEvent
@@ -77,7 +81,7 @@ protected:
/** Returns the version number of the replay file. This is used to check
* that a loaded replay file can still be understood by this
* executable. */
unsigned int getReplayVersion() const { return 2; }
unsigned int getReplayVersion() const { return 3; }
public:
ReplayBase();

View File

@@ -248,17 +248,17 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line)
{
fgets(s, 1023, fd);
float x, y, z, rx, ry, rz, rw, time, speed, steer, w1, w2, w3, w4;
int nitro_zipper, skidding, jumping;
int nitro, zipper, skidding, red_skidding, jumping;
// Check for EV_TRANSFORM event:
// -----------------------------
if(sscanf(s, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %d %d\n",
if(sscanf(s, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %d %d %d %d\n",
&time,
&x, &y, &z,
&rx, &ry, &rz, &rw,
&speed, &steer, &w1, &w2, &w3, &w4,
&nitro_zipper, &skidding, &jumping
)==17)
&nitro, &zipper, &skidding, &red_skidding, &jumping
)==19)
{
btQuaternion q(rx, ry, rz, rw);
btVector3 xyz(x, y, z);
@@ -270,8 +270,10 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line)
pi.m_suspension_length[1] = w2;
pi.m_suspension_length[2] = w3;
pi.m_suspension_length[3] = w4;
kre.m_nitro_zipper_usage = (uint32_t)nitro_zipper;
kre.m_skidding_state = (uint32_t)skidding;
kre.m_nitro_usage = nitro;
kre.m_zipper_usage = (bool)zipper;
kre.m_skidding_state = skidding;
kre.m_red_skidding = (bool)red_skidding;
kre.m_jumping = jumping != 0;
m_ghost_karts[kart_num].addReplayEvent(time,
btTransform(q, xyz), pi, kre);

View File

@@ -159,8 +159,8 @@ void ReplayRecorder::update(float dt)
}
}
kart->getKartGFX()->getGFXStatus(&(r->m_nitro_zipper_usage),
&(r->m_skidding_state));
kart->getKartGFX()->getGFXStatus(&(r->m_nitro_usage),
&(r->m_zipper_usage), &(r->m_skidding_state), &(r->m_red_skidding));
r->m_jumping = kart->isJumping();
} // for i
@@ -248,7 +248,7 @@ void ReplayRecorder::save()
const TransformEvent *p = &(m_transform_events[k][i]);
const PhysicInfo *q = &(m_physic_info[k][i]);
const KartReplayEvent *r = &(m_kart_replay_event[k][i]);
fprintf(fd, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %d %d\n",
fprintf(fd, "%f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %d %d %d %d\n",
p->m_time,
p->m_transform.getOrigin().getX(),
p->m_transform.getOrigin().getY(),
@@ -263,8 +263,10 @@ void ReplayRecorder::save()
q->m_suspension_length[1],
q->m_suspension_length[2],
q->m_suspension_length[3],
(int)r->m_nitro_zipper_usage,
(int)r->m_skidding_state,
r->m_nitro_usage,
(int)r->m_zipper_usage,
r->m_skidding_state,
(int)r->m_red_skidding,
(int)r->m_jumping
);
} // for i