Specify the replay buffer size as time value (i.e. how many seconds),
not how many frames.
This commit is contained in:
parent
6e3c766749
commit
020c129691
@ -60,17 +60,16 @@
|
|||||||
<!-- The title music. -->
|
<!-- The title music. -->
|
||||||
<music title="main_theme.music"/>
|
<music title="main_theme.music"/>
|
||||||
|
|
||||||
<!-- Mostly for debugging: maximum number of history entries -->
|
|
||||||
<history max-frames="10000"/>
|
|
||||||
|
|
||||||
<!-- Replay related values, mostly concerned with saving less data
|
<!-- Replay related values, mostly concerned with saving less data
|
||||||
and using interpolation instead.
|
and using interpolation instead.
|
||||||
|
max-time: Maximum race time that can be saved in a replay/history file.
|
||||||
delta-t Minumum time between saving consecutive transform events.
|
delta-t Minumum time between saving consecutive transform events.
|
||||||
delta-pos If the interpolated position is within this delta, a
|
delta-pos If the interpolated position is within this delta, a
|
||||||
transform event is not generated.
|
transform event is not generated.
|
||||||
delta-angle If the interpolated angle is within this delta,
|
delta-angle If the interpolated angle is within this delta,
|
||||||
a transform event is not generated. -->
|
a transform event is not generated. -->
|
||||||
<replay delta-t="0.05" delta-pos="0.1" delta-angle="0.5" />
|
<replay max-time="600" delta-t="0.05" delta-pos="0.1"
|
||||||
|
delta-angle="0.5" />
|
||||||
|
|
||||||
<!-- Skidmark data: maximum number of skid marks, and
|
<!-- Skidmark data: maximum number of skid marks, and
|
||||||
time for skidmarks to fade out. -->
|
time for skidmarks to fade out. -->
|
||||||
|
@ -133,7 +133,6 @@ void STKConfig::load(const std::string &filename)
|
|||||||
CHECK_NEG(m_bubblegum_counter, "bubblegum disappear counter");
|
CHECK_NEG(m_bubblegum_counter, "bubblegum disappear counter");
|
||||||
CHECK_NEG(m_bubblegum_shield_time, "bubblegum shield-time" );
|
CHECK_NEG(m_bubblegum_shield_time, "bubblegum shield-time" );
|
||||||
CHECK_NEG(m_explosion_impulse_objects, "explosion-impulse-objects" );
|
CHECK_NEG(m_explosion_impulse_objects, "explosion-impulse-objects" );
|
||||||
CHECK_NEG(m_max_history, "max-history" );
|
|
||||||
CHECK_NEG(m_max_skidmarks, "max-skidmarks" );
|
CHECK_NEG(m_max_skidmarks, "max-skidmarks" );
|
||||||
CHECK_NEG(m_min_kart_version, "<kart-version min...>" );
|
CHECK_NEG(m_min_kart_version, "<kart-version min...>" );
|
||||||
CHECK_NEG(m_max_kart_version, "<kart-version max=...>" );
|
CHECK_NEG(m_max_kart_version, "<kart-version max=...>" );
|
||||||
@ -146,6 +145,7 @@ void STKConfig::load(const std::string &filename)
|
|||||||
CHECK_NEG(m_leader_time_per_kart, "leader time-per-kart" );
|
CHECK_NEG(m_leader_time_per_kart, "leader time-per-kart" );
|
||||||
CHECK_NEG(m_penalty_time, "penalty-time" );
|
CHECK_NEG(m_penalty_time, "penalty-time" );
|
||||||
CHECK_NEG(m_max_display_news, "max-display-news" );
|
CHECK_NEG(m_max_display_news, "max-display-news" );
|
||||||
|
CHECK_NEG(m_replay_max_time, "replay max-time" );
|
||||||
CHECK_NEG(m_replay_delta_angle, "replay delta-angle" );
|
CHECK_NEG(m_replay_delta_angle, "replay delta-angle" );
|
||||||
CHECK_NEG(m_replay_delta_pos2, "replay delta-position" );
|
CHECK_NEG(m_replay_delta_pos2, "replay delta-position" );
|
||||||
CHECK_NEG(m_replay_dt, "replay delta-t" );
|
CHECK_NEG(m_replay_dt, "replay delta-t" );
|
||||||
@ -177,13 +177,13 @@ void STKConfig::init_defaults()
|
|||||||
m_bubblegum_shield_time = -100;
|
m_bubblegum_shield_time = -100;
|
||||||
m_shield_restrict_weapos = false;
|
m_shield_restrict_weapos = false;
|
||||||
m_max_karts = -100;
|
m_max_karts = -100;
|
||||||
m_max_history = -100;
|
|
||||||
m_max_skidmarks = -100;
|
m_max_skidmarks = -100;
|
||||||
m_min_kart_version = -100;
|
m_min_kart_version = -100;
|
||||||
m_max_kart_version = -100;
|
m_max_kart_version = -100;
|
||||||
m_min_track_version = -100;
|
m_min_track_version = -100;
|
||||||
m_max_track_version = -100;
|
m_max_track_version = -100;
|
||||||
m_max_display_news = -100;
|
m_max_display_news = -100;
|
||||||
|
m_replay_max_time = -100;
|
||||||
m_replay_delta_angle = -100;
|
m_replay_delta_angle = -100;
|
||||||
m_replay_delta_pos2 = -100;
|
m_replay_delta_pos2 = -100;
|
||||||
m_replay_dt = -100;
|
m_replay_dt = -100;
|
||||||
@ -286,9 +286,6 @@ void STKConfig::getAllData(const XMLNode * root)
|
|||||||
Log::error("StkConfig", "Cannot load title music : %s", title_music.c_str());
|
Log::error("StkConfig", "Cannot load title music : %s", title_music.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(const XMLNode *history_node = root->getNode("history"))
|
|
||||||
history_node->get("max-frames", &m_max_history);
|
|
||||||
|
|
||||||
if(const XMLNode *skidmarks_node = root->getNode("skid-marks"))
|
if(const XMLNode *skidmarks_node = root->getNode("skid-marks"))
|
||||||
{
|
{
|
||||||
skidmarks_node->get("max-number", &m_max_skidmarks );
|
skidmarks_node->get("max-number", &m_max_skidmarks );
|
||||||
@ -376,6 +373,8 @@ void STKConfig::getAllData(const XMLNode * root)
|
|||||||
replay_node->get("delta-angle", &m_replay_delta_angle);
|
replay_node->get("delta-angle", &m_replay_delta_angle);
|
||||||
replay_node->get("delta-pos", &m_replay_delta_pos2 );
|
replay_node->get("delta-pos", &m_replay_delta_pos2 );
|
||||||
replay_node->get("delta-t", &m_replay_dt );
|
replay_node->get("delta-t", &m_replay_dt );
|
||||||
|
replay_node->get("max-time", &m_replay_max_time );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the default KartProperties
|
// Get the default KartProperties
|
||||||
|
@ -96,8 +96,6 @@ public:
|
|||||||
float m_music_credit_time; /**<Time the music credits are
|
float m_music_credit_time; /**<Time the music credits are
|
||||||
displayed. */
|
displayed. */
|
||||||
int m_max_karts; /**<Maximum number of karts. */
|
int m_max_karts; /**<Maximum number of karts. */
|
||||||
int m_max_history; /**<Maximum number of frames to save in
|
|
||||||
a history files. */
|
|
||||||
bool m_smooth_normals; /**< If normals for raycasts for wheels
|
bool m_smooth_normals; /**< If normals for raycasts for wheels
|
||||||
should be interpolated. */
|
should be interpolated. */
|
||||||
/** If the angle between a normal on a vertex and the normal of the
|
/** If the angle between a normal on a vertex and the normal of the
|
||||||
@ -145,6 +143,9 @@ public:
|
|||||||
/** Filename of the title music to play.*/
|
/** Filename of the title music to play.*/
|
||||||
MusicInformation *m_title_music;
|
MusicInformation *m_title_music;
|
||||||
|
|
||||||
|
/** Maximum time of a replay. */
|
||||||
|
int m_replay_max_time;
|
||||||
|
|
||||||
/** Minimum time between consecutive saved tranform events. */
|
/** Minimum time between consecutive saved tranform events. */
|
||||||
float m_replay_dt;
|
float m_replay_dt;
|
||||||
|
|
||||||
|
@ -52,7 +52,9 @@ void History::startReplay()
|
|||||||
*/
|
*/
|
||||||
void History::initRecording()
|
void History::initRecording()
|
||||||
{
|
{
|
||||||
allocateMemory(stk_config->m_max_history);
|
unsigned int max_frames = unsigned int( stk_config->m_replay_max_time
|
||||||
|
/ stk_config->m_replay_dt );
|
||||||
|
allocateMemory(max_frames);
|
||||||
m_current = -1;
|
m_current = -1;
|
||||||
m_wrapped = false;
|
m_wrapped = false;
|
||||||
m_size = 0;
|
m_size = 0;
|
||||||
|
@ -55,11 +55,13 @@ void ReplayRecorder::init()
|
|||||||
m_transform_events.resize(race_manager->getNumberOfKarts());
|
m_transform_events.resize(race_manager->getNumberOfKarts());
|
||||||
m_skid_control.resize(race_manager->getNumberOfKarts());
|
m_skid_control.resize(race_manager->getNumberOfKarts());
|
||||||
m_kart_replay_event.resize(race_manager->getNumberOfKarts());
|
m_kart_replay_event.resize(race_manager->getNumberOfKarts());
|
||||||
|
unsigned int max_frames = unsigned int( stk_config->m_replay_max_time
|
||||||
|
/ stk_config->m_replay_dt);
|
||||||
for(unsigned int i=0; i<race_manager->getNumberOfKarts(); i++)
|
for(unsigned int i=0; i<race_manager->getNumberOfKarts(); i++)
|
||||||
{
|
{
|
||||||
m_transform_events[i].resize(stk_config->m_max_history);
|
m_transform_events[i].resize(max_frames);
|
||||||
// Rather arbitraritly sized, it will be added with push_back
|
// Rather arbitraritly sized, it will be added with push_back
|
||||||
m_kart_replay_event[i].reserve(100);
|
m_kart_replay_event[i].reserve(500);
|
||||||
}
|
}
|
||||||
m_count_transforms.clear();
|
m_count_transforms.clear();
|
||||||
m_count_transforms.resize(race_manager->getNumberOfKarts(), 0);
|
m_count_transforms.resize(race_manager->getNumberOfKarts(), 0);
|
||||||
@ -124,7 +126,7 @@ void ReplayRecorder::update(float dt)
|
|||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
m_last_saved_time[i] = time;
|
||||||
m_count_transforms[i]++;
|
m_count_transforms[i]++;
|
||||||
if(m_count_transforms[i]>=m_transform_events[i].size())
|
if(m_count_transforms[i]>=m_transform_events[i].size())
|
||||||
{
|
{
|
||||||
@ -171,14 +173,15 @@ void ReplayRecorder::Save()
|
|||||||
fprintf(fd, "track: %s\n", world->getTrack()->getIdent().c_str());
|
fprintf(fd, "track: %s\n", world->getTrack()->getIdent().c_str());
|
||||||
fprintf(fd, "Laps: %d\n", race_manager->getNumLaps());
|
fprintf(fd, "Laps: %d\n", race_manager->getNumLaps());
|
||||||
|
|
||||||
|
unsigned int max_frames = unsigned int( stk_config->m_replay_max_time
|
||||||
|
/ stk_config->m_replay_dt );
|
||||||
for(unsigned int k=0; k<num_karts; k++)
|
for(unsigned int k=0; k<num_karts; k++)
|
||||||
{
|
{
|
||||||
fprintf(fd, "model: %s\n", world->getKart(k)->getIdent().c_str());
|
fprintf(fd, "model: %s\n", world->getKart(k)->getIdent().c_str());
|
||||||
fprintf(fd, "size: %d\n", m_count_transforms[k]);
|
fprintf(fd, "size: %d\n", m_count_transforms[k]);
|
||||||
|
|
||||||
unsigned int num_transforms =
|
unsigned int num_transforms = std::min(max_frames,
|
||||||
std::min((unsigned int)stk_config->m_max_history,
|
m_count_transforms[k]);
|
||||||
m_count_transforms[k] );
|
|
||||||
for(unsigned int i=0; i<num_transforms; i++)
|
for(unsigned int i=0; i<num_transforms; i++)
|
||||||
{
|
{
|
||||||
const TransformEvent *p=&(m_transform_events[k][i]);
|
const TransformEvent *p=&(m_transform_events[k][i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user