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; } } }
public void ExecuteCombat(ICombatOperation combatOperation) { mCombatExecutor.Execute(combatOperation); }
public void ExecuteCombat(ICombatOperation combatOperation) { if (mService != null) { mService.ExecuteCombat(combatOperation); } }