Mejoré un poco esto:
Quisiera que el daño a Mario dependa de la velocidad conque chocan, y que sea empujado según eso y... ¿su masa?
Estoy algo trancado en eso, tengo esto:
Distancia = IA._x-Player._x;
if (Distancia > 0) {
// DK está a la derecha de Mario:
IA._x = IA._x-DKSpeed;
if (IA.hitTest(Player)) {
if (Player.Action2 == "Walking") {
EmpujeaDKMario = DKMarioSpeed*Player.Facing + DKSpeed - DKMarioEdge - DKEdge;
if (EmpujeaDKMario < 0) {Se calcula la distancia entre Donkey Kong (DK) y Mario.
Les llamo IA y Player cuando me refiero a la posición o variables que pueden representar algo de otro personaje, estas son del que es manejado por la IA y por el jugador.
Mario es llamado DKMario para distinguirlo de otros posibles Marios.
Eso determina hacia dónde se mueve DK, izquierda o derecha, avanza hacia Mario.
Si están colisionando, y Mario está caminando, entonces el empuje que recibe puede aumentar o disminuir según si está caminando hacia DK o alejándose. Eso lo marca la variable Player.Facing (que indica hacia dónde está mirando).
DKMarioSpeed no es la velocidad conque se está moviendo sino con la que se mueve cuando se mueve. Lo que determina si se está moviendo es Player.Action2. Así que siempre es positiva.
DKSpeed lo mismo pero respecto a DK.
Edge viene a ser cuán puntiagudos son los personajes o si tienen espinas o algo, que al clavarse reducen el empuje.
Debo agregar que el peso de Mario reste y el de DK sume ¿así?
EmpujeaDKMario = (DKMarioSpeed*Player.Facing + DKSpeed) * (DKPeso - DKEdge - DKMarioPeso - DKMarioEdge);
¿Es muy importante el peso? Pensaba usar defensa, pero si un personaje es pequeño, aunque tenga mejor defensa que el otro, rebotaría ¿o lo abollaría o algo así? No había pensado en eso.
El tema es que si pongo peso es otro número a tener que elegir para cada personajes y prefiero evitarlo.
Bueno, si el empuje es >0, el personaje debería cambiar de posición, sino no, porque si se aplica un empuje negativo lo haría acercarse ¿no?
Me destranqué un poco creo. Entonces:
Distancia = IA._x-Player._x;
if (Distancia > 0) {
// DK está a la derecha de Mario:
IA._x = IA._x-DKSpeed;
if (IA.hitTest(Player)) {
if (Player.Action2 == "Walking") {
EmpujeaDKMario = (DKMarioSpeed*Player.Facing + DKSpeed) * (DKPeso - DKEdge - DKMarioPeso - DKMarioEdge);
} else {
EmpujeaDKMario = DKSpeed * (DKPeso - DKEdge - DKMarioPeso - DKMarioEdge);
}
if (EmpujeaDKMario > 0) {
// Mover a Mario.
}
Damage =Agregué que si Mario no se está moviendo entonces su velocidad no se considera en el cálculo. ¿Está bien?
El daño no estoy seguro que sea algo independiente al empuje recibido, diría que es:
Damage = (DKMarioSpeed*Player.Facing + DKSpeed) * (DKEdge + DKDF - DKMarioDF);
Parece que sí ¿está bien? Pero habría que ponerlo en el if correspondiente y quitar la velocidad de Mario si no se mueve.
Entre más rápido se estén moviendo hacia el otro, más daño.
Entre más puntiagudo o espinas, etc, tenga DK, más daño.
Entre más duro sea DK, más daño.
Entre más duro o elástico sea Mario, menos daño.
¿Está bien?