Zero>
Code:
def Collision(cn):
ow = cn.owner
collision = cn.sensors["collision"]
collision.propName = "solid"
multiplier = 1
if ow["health"] > 0:
if collision.positive:
linv_now = ow.getLinearVelocity()
linv_before = ow.get("linv_before", linv_now)
applied_vec = linv_now - linv_before
print ("For object:", ow.name)
print ("--Impact magnitude:", applied_vec.magnitude)
print ("")
ow["health"] = ow.get("health", 0.0) - applied_vec.magnitude * multiplier
print(str(ow.name) + str(ow["health"]))
else:
ow["linv_before"] = ow.getLinearVelocity()
This is my collision code, it simply takes the linear velocity and compares it to before, subtracting any difference from a health value (the multiplier allows me to lessen or worsen collisions). I did have a line that printed the direction of the hit too. I hope it is of some use. At some point I think Blenders physics are going to be able to detect the magnitude of collisions automatically- will be great when it does!
Split times are working for me, although sometimes when multiple ships fly across the line it gets confused.