示例#1
0
    public void HitEnemy(BasePlayer player, BaseEnemy enemy)
    {
        if (enemy is IUnitDamageable)
        {
            Damage dmg = player.CalculateDamage(enemy);                      // return negative damage if it's fatal; probably stupid hack to avoid struct for damage
            if (dmg.is_crit && player.CritEvent != null)
            {
                player.CritEvent();
            }
            if (((IUnitDamageable)enemy).TakeDamage(dmg))                   // return true if damage is fatal
            {
                if (player.DeathEvent != null)
                {
                    player.DeathEvent();
                }
            }
            if (player.HitEvent != null)
            {
                player.HitEvent();
            }
            var msg = enemy.GetNode("/root/messanger") as messanger;
            msg.EnemyDamage(dmg, enemy.GetTranslation());
        }

        if (enemy is IUnitPushable)
        {
            ((IUnitPushable)enemy).PushBack(player.GetTransform().basis.z * 100);
        }
    }