Finished rewrite of actor animation system
* Rewrote the actor animation system to work like sprites * Renamed a few functions * Added DeleteSpriteAnimation() and the delete queue to sprites * Removed transitions for the time being (they don't seem to work in irrlicht right now * Added PreUpdate() function * Added documentation for name changes and new functions
This commit is contained in:
@@ -2998,6 +2998,28 @@ int rc_canvasClip(int x, int y, int w, int h)
|
||||
|
||||
|
||||
|
||||
void rc_preUpdate()
|
||||
{
|
||||
//3D World Update
|
||||
rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, rc_physics3D.fixedTimeStep);
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
{
|
||||
if(rc_canvas[i].type != RC_CANVAS_TYPE_SPRITE)
|
||||
continue;
|
||||
|
||||
float step = rc_canvas[i].physics2D.timeStep;
|
||||
int32 velocityIterations = rc_canvas[i].physics2D.velocityIterations;
|
||||
int32 positionIterations = rc_canvas[i].physics2D.positionIterations;
|
||||
|
||||
if(rc_canvas[i].physics2D.enabled)
|
||||
rc_canvas[i].physics2D.world->Step(step, velocityIterations, positionIterations);
|
||||
}
|
||||
|
||||
hasPreUpdated = true;
|
||||
}
|
||||
|
||||
bool rc_update()
|
||||
{
|
||||
@@ -3353,26 +3375,29 @@ bool rc_update()
|
||||
|
||||
for(int i = 0; i < rc_transition_actor.size();)
|
||||
{
|
||||
if((frame_current_time - rc_actor[i].transition_start_time) >= rc_actor[i].transition_time)
|
||||
int t_actor = rc_transition_actor[i];
|
||||
|
||||
if((frame_current_time - rc_actor[t_actor].transition_start_time) >= rc_actor[t_actor].transition_time)
|
||||
{
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[i].mesh_node;
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[t_actor].mesh_node;
|
||||
node->setTransitionTime(0);
|
||||
node->setJointMode(irr::scene::EJUOR_NONE);
|
||||
rc_actor[i].transition = false;
|
||||
rc_actor[i].transition_time = 0;
|
||||
rc_actor[i].transition_start_time = 0;
|
||||
rc_transition_actor.erase(i);
|
||||
rc_actor[t_actor].transition = false;
|
||||
rc_actor[t_actor].transition_time = 0;
|
||||
rc_actor[t_actor].transition_start_time = 0;
|
||||
rc_transition_actor.erase(t_actor);
|
||||
|
||||
rc_actor[i].animation[0].start_frame = (int)rc_actor[i].transition_frame;
|
||||
rc_actor[i].animation[0].end_frame = (int)rc_actor[i].transition_frame;
|
||||
rc_actor[i].animation[0].fps = 0;
|
||||
rc_actor[i].current_animation_loop = 0;
|
||||
rc_actor[i].isPlaying = true;
|
||||
rc_actor[i].current_animation = 0;
|
||||
rc_actor[t_actor].animation[0].start_frame = (int)rc_actor[t_actor].transition_frame;
|
||||
rc_actor[t_actor].animation[0].end_frame = (int)rc_actor[t_actor].transition_frame;
|
||||
rc_actor[t_actor].animation[0].fps = 0;
|
||||
rc_actor[t_actor].current_animation_loop = 0;
|
||||
rc_actor[t_actor].isPlaying = true;
|
||||
rc_actor[t_actor].current_animation = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[i].mesh_node;
|
||||
//std::cout << "Animate dammit" << std::endl;
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[t_actor].mesh_node;
|
||||
node->animateJoints();
|
||||
i++;
|
||||
}
|
||||
@@ -3381,9 +3406,12 @@ bool rc_update()
|
||||
|
||||
VideoDriver->beginScene(true, true);
|
||||
|
||||
rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, rc_physics3D.fixedTimeStep);
|
||||
if(!hasPreUpdated)
|
||||
{
|
||||
rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, rc_physics3D.fixedTimeStep);
|
||||
}
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
{
|
||||
@@ -3454,6 +3482,8 @@ bool rc_update()
|
||||
rc_setActiveCanvas(rc_active_canvas);
|
||||
}
|
||||
|
||||
hasPreUpdated = false; //Will be set to true if PreUpdate() is called
|
||||
|
||||
#ifdef RC_WEB
|
||||
emscripten_sleep(0);
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user