Example #1
0
    // 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);
        }
    }
Example #2
0
    // 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);
        }
    }