I guess all I can say is if the GetBonePosition function is returning the
local origin instead of the offset from the global origin.

And I was thinking something like,

vector v_direction = NewBoneOrigin - PreviousBoneOrigin;
float length_moved = v_direction.Length2D(); // I dont remember the
magnitude function, its something like Length2D.

Then you have a distance traveled plus a direction of movement which you
could clamp how you see fit.
length_moved could be used to determine a velocity for that frame.

On Fri, Sep 25, 2009 at 1:07 AM, Michael Chang <[email protected]>wrote:

> >
> > Micheal, as you know I'm doing something rather similar. I've gotten it
> > working reasonably well, but in truth I don't like the way I have it
> > working. It's laggy and a bit jumpy, and plays terribly for players with
> > latency more than 50. But I can basically show you how it works, here's
> the
> > abridged version:
> >
>
> Jorge:
> Dude thanks again for sharing the code. Much appreciated.
>
> I've spent a good deal of time trying to get this to work the way I want.
> There seems to be some oddities with GetIntervalMovement. When I print out
> the deltas for newPosition - GetLocaPosition(), what appears to be
> happening
> is that
>
> 1. When I'm not moving, the deltas are incorrect and extremely small.
> 2. When I'm pressing +forward the deltas are correct and the player
> animates
> correctly.
>
> What's the relationship with GetIntervalMovement and user commands? I've
> traced all the lines of code with Studio_Seq stuff and nothing seems to
> care
> about current speed or input. I'm at a total loss as to why
> GetIntervalMovement would return different things based on whether or not
> I'm trying to move!!
>
>
>
> You could get a bone position (spine bone perhaps) and save that, and frame
> > by frame compare the distance the bone traveled to get a velocity from
> that
> > and apply it to the player. Maybe this isn't what you want thought. ;)
> >
> >
> Ryan:
>
> I spent about a minute sketching this out not expecting it to work and not
> surprisingly it didn't.
>
>    int boneNum = player->LookupBone("ValveBiped.Bip01_Pelvis");
>    if(boneNum==-1)
>        return;
>
>    Vector bonePos;
>    QAngle boneAngle;
>    player->GetBonePosition(boneNum, bonePos, boneAngle);
>
>    if(lastBonePos == vec3_origin){
>        lastBonePos = bonePos;
>        return;
>    }
>
>    Vector delta = bonePos-lastBonePos;
>    mv->m_vecVelocity = delta/gpGlobals->frametime;
>    lastBonePos = bonePos;
>
> What would be the right approach to this? This doesn't seem right at all.
>
>
> Thanks for your patience guys. I guess I'm trying to do something that's
> not
> very common in Source so there's not much documentation on this at all :|
>
> ~M
> _______________________________________________
> To unsubscribe, edit your list preferences, or view the list archives,
> please visit:
> http://list.valvesoftware.com/mailman/listinfo/hlcoders
>
>


-- 
~Ryan ( skidz )
_______________________________________________
To unsubscribe, edit your list preferences, or view the list archives, please 
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders

Reply via email to