// This is the main controller for combat. It arbitrates the interaction, records what took place // into a combat result, and sends out a message to both parties about the combat result. public static void ResolveAttackCollision(CombatAttackModel attack, CombatReceiverModel receiver) { CombatResult result; result = new CombatResult(); // Record models result.Attack = attack; result.Receiver = receiver; result.DamageToReceiver = attack.Damage; result.DamageToAttacker = receiver.DamageToAttackerOnHit; if (receiver.AllowColorLeech) { result.ColorChangeAttacker = DetermineColorLeech(attack, receiver, result.DamageToReceiver/receiver.InitialHealthPoints); } else { result.ColorChangeAttacker = Vector3.zero; } // Determine if attack will kill the receiver. if ( (receiver.HealthPoints - result.DamageToReceiver) <= 0) { result.DamageToAttacker += receiver.DamageToAttackerOnKill; } // Send result back to the receiver. receiver.SendMessage("ReceiveCombatResult", result, SendMessageOptions.DontRequireReceiver); attack.SendMessage("AttackCombatResult", result, SendMessageOptions.DontRequireReceiver); // Inform the owner of the attack success. if (attack.Owner) { attack.Owner.SendMessage("AttackCombatResult", result, SendMessageOptions.DontRequireReceiver); } }
// This is the main controller for combat. It arbitrates the interaction, records what took place // into a combat result, and sends out a message to both parties about the combat result. public static void ResolveAttackCollision(CombatAttackModel attack, CombatReceiverModel receiver) { CombatResult result; result = new CombatResult(); // Record models result.Attack = attack; result.Receiver = receiver; result.DamageToReceiver = attack.Damage; result.DamageToAttacker = receiver.DamageToAttackerOnHit; if (receiver.AllowColorLeech) { result.ColorChangeAttacker = DetermineColorLeech(attack, receiver, result.DamageToReceiver / receiver.InitialHealthPoints); } else { result.ColorChangeAttacker = Vector3.zero; } // Determine if attack will kill the receiver. if ((receiver.HealthPoints - result.DamageToReceiver) <= 0) { result.DamageToAttacker += receiver.DamageToAttackerOnKill; } // Send result back to the receiver. receiver.SendMessage("ReceiveCombatResult", result, SendMessageOptions.DontRequireReceiver); attack.SendMessage("AttackCombatResult", result, SendMessageOptions.DontRequireReceiver); // Inform the owner of the attack success. if (attack.Owner) { attack.Owner.SendMessage("AttackCombatResult", result, SendMessageOptions.DontRequireReceiver); } }