Posted By: Superku
ent_bonereset_all + end_blendpose - 05/02/17 14:46
Hello!
1) Apparently ent_bonereset_all() is not working in the sense of updating the visible mesh of an entity (at least when not GPU animated) when it's the only bone operation called that frame.
Download code + model
A workaround: Resetting a random other bone that frame. This will update the rest of the mesh as well.
EDIT:
2) Back to my original problem from which the first one originated:
I cannot copy to (or from?) another entity.pose than pose 1 unless I've used ent_animate with pose != 1 at least once:
Press [S] first. This should copy the animation to pose 2 (I use stuff like that to save an old animation state for a couple of frames, which normally works quite good - the code here is just to demonstrate the issue).
When you now press [Space] it should show that animation instead of "testB". This only happens though when you press [W] at least once.
1) Apparently ent_bonereset_all() is not working in the sense of updating the visible mesh of an entity (at least when not GPU animated) when it's the only bone operation called that frame.
Code:
/////////////////////////////// #include <acknex.h> #include <default.c> /////////////////////////////// void main() { fps_max = 60; video_mode = 10; level_load(NULL); ENTITY* ent_minitest = ent_create("minitest.mdl",vector(256,0,0),NULL); ent_minitest.pan = 180; while(1) { if(key_1) ent_animate(ent_minitest,"testB",100,0); if(key_2) ent_bonereset_all(ent_minitest); if(key_3) ent_bonereset(ent_minitest,"Bone1"); wait(1); } }
Download code + model
A workaround: Resetting a random other bone that frame. This will update the rest of the mesh as well.
EDIT:
2) Back to my original problem from which the first one originated:
I cannot copy to (or from?) another entity.pose than pose 1 unless I've used ent_animate with pose != 1 at least once:
Code:
/////////////////////////////// #include <acknex.h> #include <default.c> /////////////////////////////// void main() { fps_max = 60; video_mode = 10; level_load(NULL); ENTITY* ent_minitest = ent_create("minitest.mdl",vector(256,0,0),NULL); ent_minitest.pan = 180; while(1) { if(key_w) // first press [s] { ent_minitest.pose = 2; ent_animate(ent_minitest,"testA",100,0); } if(key_s) // press this first, then [space] -> no effect { ent_minitest.pose = 1; ent_animate(ent_minitest,"testA",100,0); int i; for(i = 1; i <= 4; i++) ent_bonerotate(ent_minitest,str_printf(NULL,"Bone%d",i),vector(sinv(total_ticks*5)*15*(1-2*(i > 2)),0,0)); ent_blendpose(ent_minitest,2,1,100); // has no effect, or the subsequent ent_blendpose call } ent_minitest.pose = 1; ent_animate(ent_minitest,"testB",100,0); if(key_space) ent_blendpose(ent_minitest,1,2,100); wait(1); } }
Press [S] first. This should copy the animation to pose 2 (I use stuff like that to save an old animation state for a couple of frames, which normally works quite good - the code here is just to demonstrate the issue).
When you now press [Space] it should show that animation instead of "testB". This only happens though when you press [W] at least once.