static void HandleCollision (Entity *ent, Entity *ent2, Vec3f norm) { if (ent2 && fabs(norm.x) > .8) { ent->vel.x += ent2->vel.x; } if (norm.Dot (ent->vel) < 0) // moving torwards entity { // velocity if (fabs(norm.y) > 0.5) // slide along floors ent->vel -= norm.Project(ent->vel)*1.5; else // bounce off walls ent->vel -= norm.Project(ent->vel)*1.2; if (ent2 && (ent2->type & ET_PLAYER) && fabs(norm.x) > .8) { ent->vel.x += ent2->vel.x*1.2; } ent->vel.z = 0.; } }