public void ReleaseFireBall(Vector3 pos, FactionType releaseFaction)
    {
        GameObject fireBall = (GameObject)Instantiate(Resources.Load("GameScene/PlayerSkillFireBall"));

        fireBall.transform.position = pos;
        tk2dSpriteAnimator animator = fireBall.GetComponent <tk2dSpriteAnimator>();

        animator.AnimationCompleted = delegate
        {
            Damage fireBallDamage = new Damage();
            fireBallDamage.DamageValue = 1000;
            fireBallDamage.ShowCrit    = true;
            List <GameObject> enemies = ActorsManager.GetInstance().GetEnemyActorsInDistance(releaseFaction, pos, 50);
            enemies.ForEach(
                enemy =>
            {
                if (enemy != null)
                {
                    ActorController actorCtrl = enemy.GetComponent <ActorController>();
                    actorCtrl.TakeDamage(fireBallDamage);
                }
            });
            Destroy(fireBall);
        };
    }
    public void ReleaseLightningBolt(FactionType releaseFaction)
    {
        Damage lightningBoltDamage = new Damage();

        lightningBoltDamage.DamageValue = 300;
        lightningBoltDamage.ShowCrit    = true;
        List <GameObject> enemyActors = ActorsManager.GetInstance().GetAllEnemyActors(releaseFaction);

        enemyActors.ForEach(
            enemyActor =>
        {
            GameObject lightningBolt =
                (GameObject)Instantiate(Resources.Load("GameScene/PlayerSkillLightningBolt"));
            lightningBolt.transform.parent        = enemyActor.transform;
            lightningBolt.transform.localPosition = new Vector3(0, 0, 0);
            tk2dSpriteAnimator animator           = lightningBolt.GetComponent <tk2dSpriteAnimator>();
            animator.AnimationCompleted           = delegate
            {
                if (enemyActor != null)
                {
                    ActorController actorCtrl = enemyActor.GetComponent <ActorController>();
                    actorCtrl.TakeDamage(lightningBoltDamage);
                    Destroy(lightningBolt);
                }
            };
        });
    }
 private void Start()
 {
     this.gameSceneController = GameObject.Find("GameSceneController").GetComponent <GameSceneController>();
     this.buildingsManager    = BuildingsManager.GetInstance();
     this.actorsManager       = ActorsManager.GetInstance();
     this.InvokeRepeating("CheckResult", 0f, 0.1f);
 }
    public void ReleaseBloodlust(FactionType releaseFaction)
    {
        List <GameObject> myActors = ActorsManager.GetInstance().GetActorsOfFaction(releaseFaction);

        myActors.ForEach(
            actor =>
        {
            GameObject bloodlust              = (GameObject)Instantiate(Resources.Load("GameScene/PlayerSkillBloodlust"));
            bloodlust.name                    = "BloodLustRelease";
            bloodlust.transform.parent        = actor.transform;
            bloodlust.transform.localPosition = new Vector3(0, 0, 0);
            tk2dSpriteAnimator animator       = bloodlust.GetComponent <tk2dSpriteAnimator>();
            animator.Play("Release");
            animator.AnimationCompleted = delegate
            {
                Destroy(bloodlust);
                if (actor != null)
                {
                    ActorController actorCtrl   = actor.GetComponent <ActorController>();
                    actorCtrl.BloodSuckingRatio = 30;
                    actorCtrl.AttackPlusRatio   = 1.5f;
                    GameObject bloodBustHalo    =
                        (GameObject)Instantiate(Resources.Load("GameScene/PlayerSkillBloodlust"));
                    bloodBustHalo.name                    = "BloodBustHalo";
                    bloodBustHalo.transform.parent        = actor.transform;
                    bloodBustHalo.transform.localPosition = new Vector3(10, -5, 0);
                    bloodBustHalo.GetComponent <tk2dSpriteAnimator>().Play("Halo");
                }
            };
        });
    }
    public void ReleaseHeal(FactionType releaseFaction)
    {
        Damage healDamage = new Damage();

        healDamage.DamageValue = -300;
        healDamage.ShowCrit    = true;
        List <GameObject> myActors = ActorsManager.GetInstance().GetActorsOfFaction(releaseFaction);

        myActors.ForEach(
            actor =>
        {
            GameObject heal              = (GameObject)Instantiate(Resources.Load("GameScene/PlayerSkillHeal"));
            heal.transform.parent        = actor.transform;
            heal.transform.localPosition = new Vector3(0, 0, 0);
            tk2dSpriteAnimator animator  = heal.GetComponent <tk2dSpriteAnimator>();
            animator.AnimationCompleted  = delegate
            {
                if (actor != null)
                {
                    ActorController actorCtrl = actor.GetComponent <ActorController>();
                    actorCtrl.TakeDamage(healDamage);
                    Destroy(heal);
                }
            };
        });
    }
Beispiel #6
0
 private void DispatchActor(BuildingController entityType, BuildingLevel buildingLevel)
 {
     ActorsManager.GetInstance()
     .CreateNewActor(
         entityType.Building.FactionType, entityType.Building.Race,
         buildingLevel == BuildingLevel.BuildingLevel1 ? entityType.Building.ProducedActorTypeLevel1 : entityType.Building.ProducedActorTypeLevel2,
         entityType.MyTransform.position);
 }
Beispiel #7
0
    private void Start()
    {
        actorsManager = FindObjectOfType <ActorsManager>();

        if (!actorsManager.actors.Contains(this))
        {
            actorsManager.actors.Add(this);
        }
    }
        void Awake()
        {
            ActorsManager actorsManager = FindObjectOfType <ActorsManager>();

            if (actorsManager != null)
            {
                actorsManager.SetPlayer(gameObject);
            }
        }
Beispiel #9
0
    private void Start()
    {
        m_ActorsManager = GameObject.FindObjectOfType <ActorsManager>();

        // Register as an actor
        if (!m_ActorsManager.actors.Contains(this))
        {
            m_ActorsManager.actors.Add(this);
        }
    }
Beispiel #10
0
    private void Start()
    {
        m_ActorsManager = GameObject.FindObjectOfType <ActorsManager>();
        DebugUtility.HandleErrorIfNullFindObject <ActorsManager, Actor>(m_ActorsManager, this);

        //アクターとして登録します
        if (!m_ActorsManager.actors.Contains(this))
        {
            m_ActorsManager.actors.Add(this);
        }
    }
Beispiel #11
0
    void Start()
    {
        m_ActorsManager = FindObjectOfType <ActorsManager>();
        //DebugUtility.HandleErrorIfNullFindObject<ActorsManager, Actor>(m_ActorsManager, this);

        // Register as an actor
        if (!m_ActorsManager.Actors.Contains(this))
        {
            m_ActorsManager.Actors.Add(this);
        }
    }
Beispiel #12
0
    private void Start()
    {
        m_ActorsManager = GameObject.FindObjectOfType <ActorsManager>();
        DebugUtility.HandleErrorIfNullFindObject <ActorsManager, Actor>(m_ActorsManager, this);

        // Register as an actor
        // Agregar un actor
        if (!m_ActorsManager.actors.Contains(this))
        {
            m_ActorsManager.actors.Add(this);
        }
    }
    private void Start()
    {
        //here the actor manager takes the game object for example the player or the enemy
        m_ActorsManager = GameObject.FindObjectOfType <ActorsManager>();
        DebugUtility.HandleErrorIfNullFindObject <ActorsManager, Actor>(m_ActorsManager, this);

        // Register as an actor
        //here the actor is put into the empty Plot
        if (!m_ActorsManager.actors.Contains(this))
        {
            m_ActorsManager.actors.Add(this);
        }
    }
Beispiel #14
0
    void Start()
    {
        m_EnemyManager = FindObjectOfType <EnemyManager>();
        DebugUtility.HandleErrorIfNullFindObject <EnemyManager, EnemyController>(m_EnemyManager, this);

        m_ActorsManager = FindObjectOfType <ActorsManager>();
        DebugUtility.HandleErrorIfNullFindObject <ActorsManager, EnemyController>(m_ActorsManager, this);

        m_EnemyManager.RegisterEnemy(this);

        m_Health = GetComponent <Health>();
        DebugUtility.HandleErrorIfNullGetComponent <Health, EnemyController>(m_Health, this, gameObject);

        m_Actor = GetComponent <Actor>();
        DebugUtility.HandleErrorIfNullGetComponent <Actor, EnemyController>(m_Actor, this, gameObject);

        m_NavMeshAgent  = GetComponent <NavMeshAgent>();
        m_SelfColliders = GetComponentsInChildren <Collider>();

        m_GameFlowManager = FindObjectOfType <GameFlowManager>();
        DebugUtility.HandleErrorIfNullFindObject <GameFlowManager, EnemyController>(m_GameFlowManager, this);

        // Subscribe to damage & death actions
        m_Health.onDie     += OnDie;
        m_Health.onDamaged += OnDamaged;

        weapon.owner = gameObject;

        foreach (var renderer in GetComponentsInChildren <Renderer>(true))
        {
            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
            {
                if (renderer.sharedMaterials[i] == eyeColorMaterial)
                {
                    m_EyeRendererData = new RendererIndexData(renderer, i);
                }

                if (renderer.sharedMaterials[i] == bodyMaterial)
                {
                    m_BodyRenderers.Add(new RendererIndexData(renderer, i));
                }
            }
        }

        m_EyeColorMaterialPropertyBlock  = new MaterialPropertyBlock();
        m_BodyFlashMaterialPropertyBlock = new MaterialPropertyBlock();

        m_EyeColorMaterialPropertyBlock.SetColor("_EmissionColor", defaultEyeColor);
        m_EyeRendererData.renderer.SetPropertyBlock(m_EyeColorMaterialPropertyBlock, m_EyeRendererData.materialIndex);
    }
Beispiel #15
0
 public static ActorsManager GetInstance()
 {
     if (instance == null)
     {
         lock (_lock)
         {
             if (instance == null)
             {
                 instance = new ActorsManager();
             }
         }
     }
     return(instance);
 }
        void Start()
        {
            ActorsManager actorsManager = FindObjectOfType <ActorsManager>();

            if (actorsManager != null)
            {
                m_PlayerTransform = actorsManager.Player.transform;
            }
            else
            {
                enabled = false;
                return;
            }

            m_OriginalOffset = transform.position - m_PlayerTransform.position;
        }
 public void ClearGameScene()
 {
     if (this.GameResultChecker != null)
     {
         Destroy(this.GameResultChecker.gameObject);
     }
     ActorsManager.GetInstance().DestroyAllActors();
     BuildingsManager.GetInstance().DestroyAllBuildings();
     Destroy(this.battleFieldMap);
     Destroy(GameObject.FindGameObjectWithTag("Obstacle"));
     GameObject[] torchs = GameObject.FindGameObjectsWithTag("GameSceneTorch");
     for (int i = 0; i < torchs.Length; i++)
     {
         Destroy(torchs[i]);
     }
 }
Beispiel #18
0
    public List <GameObject> SeekAndGetEnemies(bool ignoreObstacles = true, bool ignoreAir = true)
    {
        List <GameObject> result = ActorsManager.GetInstance()
                                   .GetEnemyActorsInDistanceAndSortByDistance(this, this.MyActor.ActorAttack.ViewDistance, ignoreObstacles);

        if (!ignoreAir && !this.MyActor.AttackAirForce)
        {
            for (int i = 0; i < result.Count; i++)
            {
                if (result[i] != null)
                {
                    ActorController actorCtrl = result[i].GetComponent <ActorController>();
                    if (actorCtrl.MyActor.IsAirForce)
                    {
                        result.RemoveAt(i);
                    }
                }
            }
        }
        return(result);
    }
    public void StartArmageddon()
    {
        this.IsArmageddon = true;
        List <GameObject> allBuildings = BuildingsManager.GetInstance().GetAllBuildings();

        allBuildings.ForEach(
            building =>
        {
            if (building != null)
            {
                BuildingController buildingCtrl = building.GetComponent <BuildingController>();
                if (!buildingCtrl.Building.IsMainCity)
                {
                    ActorsManager actorsManager = ActorsManager.GetInstance();
                    for (int i = 0; i < 4; i++)
                    {
                        if (buildingCtrl.Building.CurrentLevel == BuildingLevel.BuildingLevel1 || buildingCtrl.Building.CurrentLevel == BuildingLevel.BuildingLevel2 && i < 2)
                        {
                            actorsManager.CreateNewActor(
                                buildingCtrl.Building.FactionType,
                                buildingCtrl.Building.Race,
                                buildingCtrl.Building.ProducedActorTypeLevel1,
                                building.transform.position
                                + new Vector3(Random.Range(-40, 40), Random.Range(-40, 40), 0));
                        }
                        else if (buildingCtrl.Building.CurrentLevel == BuildingLevel.BuildingLevel2)
                        {
                            actorsManager.CreateNewActor(
                                buildingCtrl.Building.FactionType,
                                buildingCtrl.Building.Race,
                                buildingCtrl.Building.ProducedActorTypeLevel2,
                                building.transform.position
                                + new Vector3(Random.Range(-20, 20), Random.Range(-20, 20), 0));
                        }
                    }
                    BuildingsManager.GetInstance().DestroyBuilding(building);
                }
            }
        });
    }
Beispiel #20
0
    public List <GameObject> SeekAndGetFriendlyActorsInDistance(
        int distance,
        bool ignoreObstacles = true,
        bool ignoreAir       = true)
    {
        List <GameObject> result = ActorsManager.GetInstance()
                                   .GetFriendlyActorsInDistance(this.MyActor.FactionType, this.myTransform.position, distance, ignoreObstacles);

        if (!ignoreAir && !this.MyActor.AttackAirForce)
        {
            for (int i = 0; i < result.Count; i++)
            {
                if (result[i] != null)
                {
                    ActorController actorCtrl = result[i].GetComponent <ActorController>();
                    if (actorCtrl.MyActor.IsAirForce)
                    {
                        result.RemoveAt(i);
                    }
                }
            }
        }
        return(result);
    }
Beispiel #21
0
 public GameState()
 {
     this.actorsManager = new ActorsManager();
     this.Properties = new PropertyBag<object>();
     this.MaxPlayers = 0;
 }
Beispiel #22
0
 public GameState()
 {
     this.actorsManager = new ActorsManager();
     this.Properties    = new PropertyBag <object>();
     this.MaxPlayers    = 0;
 }
 protected virtual void Start()
 {
     m_ActorsManager = FindObjectOfType <ActorsManager>();
     DebugUtility.HandleErrorIfNullFindObject <ActorsManager, DetectionModule>(m_ActorsManager, this);
 }
Beispiel #24
0
    void Start()
    {
        m_EnemyManager = FindObjectOfType <EnemyManager>();
        DebugUtility.HandleErrorIfNullFindObject <EnemyManager, EnemyController>(m_EnemyManager, this);

        m_ActorsManager = FindObjectOfType <ActorsManager>();
        DebugUtility.HandleErrorIfNullFindObject <ActorsManager, EnemyController>(m_ActorsManager, this);

        m_EnemyManager.RegisterEnemy(this);

        m_Health = GetComponent <Health>();
        DebugUtility.HandleErrorIfNullGetComponent <Health, EnemyController>(m_Health, this, gameObject);

        m_Actor = GetComponent <Actor>();
        DebugUtility.HandleErrorIfNullGetComponent <Actor, EnemyController>(m_Actor, this, gameObject);

        m_NavMeshAgent  = GetComponent <NavMeshAgent>();
        m_SelfColliders = GetComponentsInChildren <Collider>();

        m_GameFlowManager = FindObjectOfType <GameFlowManager>();
        DebugUtility.HandleErrorIfNullFindObject <GameFlowManager, EnemyController>(m_GameFlowManager, this);

        // Subscribe to damage & death actions
        m_Health.onDie     += OnDie;
        m_Health.onDamaged += OnDamaged;

        // Find and initialize all weapons
        FindAndInitializeAllWeapons();
        var weapon = GetCurrentWeapon();

        weapon.ShowWeapon(true);

        var detectionModules = GetComponentsInChildren <DetectionModule>();

        DebugUtility.HandleErrorIfNoComponentFound <DetectionModule, EnemyController>(detectionModules.Length, this, gameObject);
        DebugUtility.HandleWarningIfDuplicateObjects <DetectionModule, EnemyController>(detectionModules.Length, this, gameObject);
        // Initialize detection module
        m_DetectionModule = detectionModules[0];
        m_DetectionModule.onDetectedTarget += OnDetectedTarget;
        m_DetectionModule.onLostTarget     += OnLostTarget;
        onAttack += m_DetectionModule.OnAttack;

        var navigationModules = GetComponentsInChildren <NavigationModule>();

        DebugUtility.HandleWarningIfDuplicateObjects <DetectionModule, EnemyController>(detectionModules.Length, this, gameObject);
        // Override navmesh agent data
        if (navigationModules.Length > 0)
        {
            m_NavigationModule          = navigationModules[0];
            m_NavMeshAgent.speed        = m_NavigationModule.moveSpeed;
            m_NavMeshAgent.angularSpeed = m_NavigationModule.angularSpeed;
            m_NavMeshAgent.acceleration = m_NavigationModule.acceleration;
        }

        foreach (var renderer in GetComponentsInChildren <Renderer>(true))
        {
            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
            {
                if (renderer.sharedMaterials[i] == eyeColorMaterial)
                {
                    m_EyeRendererData = new RendererIndexData(renderer, i);
                }

                if (renderer.sharedMaterials[i] == bodyMaterial)
                {
                    m_BodyRenderers.Add(new RendererIndexData(renderer, i));
                }
            }
        }

        m_BodyFlashMaterialPropertyBlock = new MaterialPropertyBlock();

        // Check if we have an eye renderer for this enemy
        if (m_EyeRendererData.renderer != null)
        {
            m_EyeColorMaterialPropertyBlock = new MaterialPropertyBlock();
            m_EyeColorMaterialPropertyBlock.SetColor("_EmissionColor", defaultEyeColor);
            m_EyeRendererData.renderer.SetPropertyBlock(m_EyeColorMaterialPropertyBlock, m_EyeRendererData.materialIndex);
        }
    }
Beispiel #25
0
 public async Task <ActorsAddOutput> ActorsAdd(Actors Actors)
 {
     return(await ActorsManager.ActorsAdd(Actors));
 }
Beispiel #26
0
 public async Task <ActorDeleteOutput> DeleteActor(ActorDeleteInput Parameters)
 {
     return(await ActorsManager.DeleteActors(Parameters));
 }
Beispiel #27
0
 private void Start()
 {
     m_ActorsManager = FindObjectOfType <ActorsManager>();
     DebugUtility.HandleErrorIfNullFindObject <ActorsManager, EnemyController>(m_ActorsManager, this);
 }
Beispiel #28
0
    void Start()
    {
        m_EnemyManager = FindObjectOfType <EnemyManager>();
        DebugUtility.HandleErrorIfNullFindObject <EnemyManager, EnemyController>(m_EnemyManager, this);

        m_ActorsManager = FindObjectOfType <ActorsManager>();
        DebugUtility.HandleErrorIfNullFindObject <ActorsManager, EnemyController>(m_ActorsManager, this);

        m_EnemyManager.RegisterEnemy(this);

        m_Health = GetComponent <Health>();
        DebugUtility.HandleErrorIfNullGetComponent <Health, EnemyController>(m_Health, this, gameObject);

        m_Actor = GetComponent <Actor>();
        DebugUtility.HandleErrorIfNullGetComponent <Actor, EnemyController>(m_Actor, this, gameObject);

        m_NavMeshAgent  = GetComponent <NavMeshAgent>();
        m_SelfColliders = GetComponentsInChildren <Collider>();

        m_GameFlowManager = FindObjectOfType <GameFlowManager>();
        DebugUtility.HandleErrorIfNullFindObject <GameFlowManager, EnemyController>(m_GameFlowManager, this);

        //ダメージと死のアクションをサブスクライブします
        m_Health.onDie     += OnDie;
        m_Health.onDamaged += OnDamaged;

        //すべての武器を見つけて初期化します
        FindAndInitializeAllWeapons();
        var weapon = GetCurrentWeapon();

        weapon.ShowWeapon(true);

        var detectionModules = GetComponentsInChildren <DetectionModule>();

        DebugUtility.HandleErrorIfNoComponentFound <DetectionModule, EnemyController>(detectionModules.Length, this, gameObject);
        DebugUtility.HandleWarningIfDuplicateObjects <DetectionModule, EnemyController>(detectionModules.Length, this, gameObject);
        //検出モジュールを初期化します
        m_DetectionModule = detectionModules[0];
        m_DetectionModule.onDetectedTarget += OnDetectedTarget;
        m_DetectionModule.onLostTarget     += OnLostTarget;
        onAttack += m_DetectionModule.OnAttack;

        var navigationModules = GetComponentsInChildren <NavigationModule>();

        DebugUtility.HandleWarningIfDuplicateObjects <DetectionModule, EnemyController>(detectionModules.Length, this, gameObject);
        // navmeshエージェントのデータを上書きします
        if (navigationModules.Length > 0)
        {
            m_NavigationModule          = navigationModules[0];
            m_NavMeshAgent.speed        = m_NavigationModule.moveSpeed;
            m_NavMeshAgent.angularSpeed = m_NavigationModule.angularSpeed;
            m_NavMeshAgent.acceleration = m_NavigationModule.acceleration;
        }

        foreach (var renderer in GetComponentsInChildren <Renderer>(true))
        {
            for (int i = 0; i < renderer.sharedMaterials.Length; i++)
            {
                if (renderer.sharedMaterials[i] == eyeColorMaterial)
                {
                    m_EyeRendererData = new RendererIndexData(renderer, i);
                }

                if (renderer.sharedMaterials[i] == bodyMaterial)
                {
                    m_BodyRenderers.Add(new RendererIndexData(renderer, i));
                }
            }
        }

        m_BodyFlashMaterialPropertyBlock = new MaterialPropertyBlock();

        //この敵のアイレンダラーがあるかどうかを確認します
        if (m_EyeRendererData.renderer != null)
        {
            m_EyeColorMaterialPropertyBlock = new MaterialPropertyBlock();
            m_EyeColorMaterialPropertyBlock.SetColor("_EmissionColor", defaultEyeColor);
            m_EyeRendererData.renderer.SetPropertyBlock(m_EyeColorMaterialPropertyBlock, m_EyeRendererData.materialIndex);
        }
    }
Beispiel #29
0
 public async Task <ActorUpdateOutput> UptadeActor(ActorUptadeInput Parameters)
 {
     return(await ActorsManager.UptadeActor(Parameters));
 }
Beispiel #30
0
 public async Task <List <Actors> > GetActors(GetActorInput Parameters)
 {
     return(await ActorsManager.GetActors(Parameters));
 }
    public void ReleaseActiveSpell(ActorController entityType, ActorSpell actorSpell)
    {
        switch (actorSpell.ActorSpellName)
        {
        case ActorSpellName.MortarAttack:
        {
            List <GameObject> enemies = entityType.SeekAndGetEnemiesInDistance(120);
            if (enemies != null && enemies.Count != 0)
            {
                Damage motarAttackDamage = new Damage();
                motarAttackDamage.DamageValue = 21;
                motarAttackDamage.ShowCrit    = true;
                enemies.ForEach(
                    enemy =>
                    {
                        GameObject maEffect =
                            (GameObject)Object.Instantiate(Resources.Load("GameScene/ActorSkillEffect"));
                        maEffect.transform.parent        = enemy.transform;
                        maEffect.transform.localPosition = new Vector3(0, 0, 0);
                        tk2dSpriteAnimator animator      = maEffect.GetComponent <tk2dSpriteAnimator>();
                        animator.Play("Bombard");
                        animator.AnimationCompleted = delegate
                        {
                            if (enemy != null)
                            {
                                ActorController actorCtrl = enemy.GetComponent <ActorController>();
                                entityType.SendDamage(actorCtrl, motarAttackDamage);
                                Object.Destroy(maEffect);
                            }
                        };
                    });
            }
            break;
        }

        case ActorSpellName.ArcaneExplosion:
        {
            List <GameObject> enemies = entityType.SeekAndGetEnemiesInDistance(120);
            if (enemies != null && enemies.Count != 0)
            {
                Damage motarAttackDamage = new Damage();
                motarAttackDamage.DamageValue = 27;
                motarAttackDamage.ShowCrit    = true;
                enemies.ForEach(
                    enemy =>
                    {
                        GameObject aeEffect =
                            (GameObject)Object.Instantiate(Resources.Load("GameScene/ActorSkillEffect"));
                        aeEffect.transform.parent        = enemy.transform;
                        aeEffect.transform.localPosition = new Vector3(0, 0, 0);
                        tk2dSpriteAnimator animator      = aeEffect.GetComponent <tk2dSpriteAnimator>();
                        animator.Play("ArcaneExplosion");
                        animator.AnimationCompleted = delegate
                        {
                            if (enemy != null)
                            {
                                ActorController actorCtrl = enemy.GetComponent <ActorController>();
                                entityType.SendDamage(actorCtrl, motarAttackDamage);
                                Object.Destroy(aeEffect);
                            }
                        };
                    });
            }
            break;
        }

        case ActorSpellName.HolyLight:
        {
            List <GameObject> myActors =
                ActorsManager.GetInstance().GetActorsOfFaction(entityType.MyActor.FactionType);
            if (myActors != null && myActors.Count != 0)
            {
                GameObject targetActor = myActors[Random.Range(0, myActors.Count)];
                Damage     zapDamage   = new Damage();
                zapDamage.DamageValue = -300;
                zapDamage.ShowCrit    = true;
                GameObject hlEffect =
                    (GameObject)Object.Instantiate(Resources.Load("GameScene/ActorSkillEffect"));
                hlEffect.transform.parent        = targetActor.transform;
                hlEffect.transform.localPosition = new Vector3(11, 38, 0);
                tk2dSpriteAnimator animator = hlEffect.GetComponent <tk2dSpriteAnimator>();
                animator.Play("HolyLight");
                animator.AnimationCompleted = delegate
                {
                    if (targetActor != null)
                    {
                        ActorController actorCtrl = targetActor.GetComponent <ActorController>();
                        entityType.SendDamage(targetActor.GetComponent <ActorController>(), zapDamage);
                        Object.Destroy(hlEffect);
                    }
                };
            }
            break;
        }

        case ActorSpellName.ShamanBless:
        {
            List <GameObject> myActors =
                ActorsManager.GetInstance().GetActorsOfFaction(entityType.MyActor.FactionType);
            if (myActors != null && myActors.Count != 0)
            {
                GameObject      targetActor = myActors[Random.Range(0, myActors.Count)];
                ActorController actorCtrl   = targetActor.GetComponent <ActorController>();
                actorCtrl.IsShamanBlessing = true;
            }
            break;
        }

        case ActorSpellName.Ensnare:
        {
            List <GameObject> airForceActors =
                ActorsManager.GetInstance().GetEnemyAirForceActorsOfFactionInDistance(entityType, 70);
            if (airForceActors != null && airForceActors.Count != 0)
            {
                GameObject      targetActor    = airForceActors[Random.Range(0, airForceActors.Count)];
                ActorController actorCtrl      = targetActor.GetComponent <ActorController>();
                GameObject      ensnareEffectA =
                    (GameObject)Object.Instantiate(Resources.Load("GameScene/ActorSkillEffect"));
                ensnareEffectA.transform.localPosition = entityType.myTransform.position;
                float scale = Vector3.Distance(entityType.myTransform.position, targetActor.transform.position)
                              / 60f;
                ensnareEffectA.transform.localScale = new Vector3(scale, 1f, 1f);
                tk2dSpriteAnimator animator = ensnareEffectA.GetComponent <tk2dSpriteAnimator>();
                animator.Play("EnsnareA");
                animator.AnimationCompleted = delegate
                {
                    Object.Destroy(ensnareEffectA.gameObject);
                };
                actorCtrl.IsCaught = true;
            }
            break;
        }

        case ActorSpellName.GodBless:
        {
            List <GameObject> myActors =
                ActorsManager.GetInstance()
                .GetFriendlyActorsInDistance(
                    entityType.MyActor.FactionType,
                    entityType.myTransform.position,
                    actorSpell.AttackRange);
            if (myActors != null && myActors.Count != 0)
            {
                myActors.ForEach(
                    actor =>
                    {
                        ActorController actorCtrl = actor.GetComponent <ActorController>();
                        actorCtrl.MyActor.ActorArmor.ArmorAmount += actorSpell.IncreaseFriendlyForcesArmor;
                    });
            }
            break;
        }
        }
    }