public void UseTargetedAbility(int actorId, AbilityType abilityId, int targetId, int collisionId) { // Validate that the ability can be used by the actor if (gamestate.ValidateTargetedAbilityUse(actorId, abilityId, targetId)) { // Check if the ability is instantly applied and apply it if it is if (!AbilityInfo.InfoArray [(int)abilityId].RequiresCollision) { Log.V("Instantly activating ability effects " + abilityId + " used by " + actorId + " on " + targetId); gamestate.TriggerAbility(abilityId, targetId, actorId); } // Queue the ability use to be sent to all clients gamestate.OutgoingReliableElements.Enqueue(new TargetedAbilityElement(actorId, abilityId, targetId, gamestate.MakeCollisionId())); } else { Log.V("Invalid ability use " + abilityId + " by " + actorId + " on " + targetId); } }
private void SignalCollision(CollisionItem toSignal) { Log.V("Signal collision " + toSignal.abilityId + ", " + toSignal.actorHitId + ", " + toSignal.actorCastId); toSignal.isSignalSent = true; gameState.TriggerAbility(toSignal.abilityId, toSignal.actorHitId, toSignal.actorCastId); }