ok I will answer again
I think maybe your problem is in two places , try to rewrite these places with code below
maybe this helps...
if (v1.active == true && v2.active == true)
{
v1pos -= cv * ((1 - t) * lambda / 2.0f) * fraction; // (1-t)/2
v2pos -= cv * (t * lambda / 2.0f) * fraction; // t/2 ( t+(1-t))/2=1/2 half energy for edge
}
else if (v1.active == false && v2.active == true)
{
v2pos -= cv * (t * lambda/2.0f) * fraction; //half energy for edge
}
else if (v1.active == true && v2.active == false)
{
v1pos -= cv * ((1 - t) * lambda/2.0f) * fraction; //half energy
}
mpos += cv * fraction/2.0f; // if half energy for edge so must leav half energy to m
About mass, ofcouse if mass different , collision will effect diferently for that objects
//redistribute energy to objects with different mass float c=1/(obj1.invmass+obj2.invmass); obj1.vec -= obj1.invmass*c/2*collision_vector; obj2.vec += obj1.invmass*c/2*collision_vector; //invmas=1/mass;