示例#1
0
        public void RequestCombatOp(ICombatOperation newOp)
        {
            lock (_combatQueueLock) {
                _combatQueue.Enqueue(newOp);

                Monitor.Pulse(_combatQueueLock);
            }
        }
    public void Execute(ICombatOperation combatOperation)
    {
        // execute
        combatOperation.Execute();

        // prepare list
        Queue<IBattleEvent> events = new Queue<IBattleEvent>();
        combatOperation.GenerateEvents (events);

        // process events
        ProcessEvents(events);
    }
    /// <summary>
    /// Execute an operation and manage check resulting event with CombatStatusEffect Rules if any
    /// </summary>
    /// <param name="operation">Operation.</param>
    private void ExecuteAttackOperation(ICombatOperation operation, 
	                                    CombatResolver srcResolver, 
	                                    CombatResolver destResolver, 
	                                    StatusEffectRule [] effectRules)
    {
        // check to see if we were alive before executing the event
        BattleEntity destEntity = destResolver.entity;
        bool wasAlive = destEntity.currentHP > 0;

        // execute and apply damage
        IBattleEvent battleEvent = null;
        BattleEventType eventType = battleEvent.EventType;

        // notify resulting battle event
        BattleSystem.Instance.PostBattleEvent(battleEvent);

        // check to see if it was a damage event to see if we killed them
        if (eventType == BattleEventType.DAMAGE && wasAlive && destEntity.currentHP <= 0) {
            destEntity.character.curHP = 0;
            DeathEvent deathEvent = new DeathEvent(destEntity);
            BattleSystem.Instance.PostBattleEvent(deathEvent);
        }

        // lets see if we hit the target or not
        bool hitTarget = eventType == BattleEventType.DAMAGE
                        || eventType == BattleEventType.NON_DAMAGE
                        || eventType == BattleEventType.ITEM;

        bool missedTarget = eventType == BattleEventType.DODGE
                        || eventType == BattleEventType.RESIST;

        // iterate through combnat effects to see what should apply
        foreach (StatusEffectRule combatStatusEffect in effectRules) {
            switch(combatStatusEffect.rule) {
            case StatusEffectRule.StatusEffectRuleHitPredicate.ON_HIT:
                if(hitTarget) {
                    ApplyEffect(combatStatusEffect, srcResolver.entity);
                }
                break;
            case StatusEffectRule.StatusEffectRuleHitPredicate.ON_MISS:
                if(missedTarget) {
                    ApplyEffect(combatStatusEffect, srcResolver.entity);
                }
                break;
            case StatusEffectRule.StatusEffectRuleHitPredicate.ALWAYS:
            default:
                ApplyEffect(combatStatusEffect, srcResolver.entity);
                break;
            }
        }
    }
示例#4
0
 public void ExecuteCombat(ICombatOperation combatOperation)
 {
     mCombatExecutor.Execute(combatOperation);
 }
示例#5
0
 public void ExecuteCombat(ICombatOperation combatOperation)
 {
     if (mService != null) {
         mService.ExecuteCombat(combatOperation);
     }
 }