| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /******************************************************************************/
- #include "stdafx.h"
- namespace EE{
- /******************************************************************************/
- Motion& Motion::clear()
- {
- skel_anim=null;
- time =0;
- blend =0;
- time_prev=time_delta=0;
- return T;
- }
- Motion& Motion::set(AnimatedSkeleton &anim_skel, C Str &animation)
- {
- clear();
- skel_anim=anim_skel.findSkelAnim(animation);
- return T;
- }
- Motion& Motion::set(AnimatedSkeleton &anim_skel, C UID &anim_id)
- {
- clear();
- skel_anim=anim_skel.findSkelAnim(anim_id);
- return T;
- }
- /******************************************************************************/
- Bool Motion::eventAfter (CChar8 *name )C {return skel_anim ? skel_anim->eventAfter (name , time_prev ) : false;}
- Bool Motion::eventOccurred(CChar8 *name )C {return skel_anim ? skel_anim->eventOccurred(name , time_prev, time_delta) : false;}
- Bool Motion::eventBetween (CChar8 *from, CChar8 *to)C {return skel_anim ? skel_anim->eventBetween (from, to, time_prev, time_delta) : false;}
- Flt Motion::eventProgress(CChar8 *from, CChar8 *to)C {return skel_anim ? skel_anim->eventProgress(from, to, time ) : 0;}
- Bool Motion::eventAfter (Flt event_time )C {return skel_anim ? time>=event_time : false;}
- Bool Motion::eventOccurred(Flt event_time )C {return skel_anim ? EventOccurred(event_time, time_prev, time_delta) : false;}
- Bool Motion::eventBetween (Flt from, Flt to)C {return skel_anim ? EventBetween (from, to, time_prev, time_delta) : false;}
- Flt Motion::eventProgress(Flt from, Flt to)C {return skel_anim ? LerpR(from, to, time ) : 0;}
- /******************************************************************************/
- Bool Motion::updateAuto(Flt blend_in_speed, Flt blend_out_speed, Flt time_speed)
- {
- if(!is())return false; // return false if the motion isn't valid and can be deleted
- if(time < skel_anim->length()) // if not finished
- {
- blend+=blend_in_speed*Time.d(); // blend in
- if(blend>=1) // if fully blended
- {
- blend =1;
- time_prev =time;
- time_delta=time_speed*Time.d();
- time +=time_delta;
- }
- }else // if finished
- {
- blend-=blend_out_speed*Time.d(); // blend out
- if(blend<=0) // if blended out
- {
- blend =0;
- skel_anim=null;
- return false;
- }
- }
- return true;
- }
- Bool Motion::updateIn(Flt blend_in_speed, Flt time_speed)
- {
- if(!is())return false; // return false if the motion isn't valid and can be deleted
- blend+=blend_in_speed*Time.d(); // blend in
- if(blend>=1) // if fully blended
- {
- blend =1;
- time_prev =time;
- time_delta=time_speed*Time.d();
- time +=time_delta;
- if(time >= skel_anim->length())return false; // if finished
- }
- return true;
- }
- Bool Motion::updateOut(Flt blend_out_speed)
- {
- if(!is())return false; // return false if the motion isn't valid and can be deleted
- blend-=blend_out_speed*Time.d(); // blend out
- if(blend<=0) // if blended out
- {
- blend =0;
- skel_anim=null;
- return false;
- }
- return true;
- }
- /******************************************************************************/
- Bool Motion::save(File &f)C
- {
- if(!skel_anim)f.cmpUIntV(0);else // version #0 specifies totally empty motion (which doesn't require additional data, and uses only 1 byte of storage)
- {
- f.cmpUIntV(1); // version
- f.putAsset(skel_anim->id());
- f.putMulti(blend, time, time_prev, time_delta);
- }
- return f.ok();
- }
- Bool Motion::load(File &f, C AnimatedSkeleton &anim_skel)
- {
- switch(f.decUIntV()) // version
- {
- case 0: clear(); return f.ok();
- case 1:
- {
- skel_anim=anim_skel.findSkelAnim(f.getAssetID());
- f.getMulti(blend, time, time_prev, time_delta);
- if(f.ok())return true;
- }break;
- }
- clear(); return false;
- }
- /******************************************************************************/
- }
- /******************************************************************************/
|