protected override void Calculate()
    {
        TilePosition        affectPosition = PositionConvertor.GetActorTileIndexFromWorldPosition(this.DestinationObject.GetDestinationPosition(this.transform.position));
        List <TilePosition> affectedTiles  = RoundHelper.FillCircle
                                                 (affectPosition.Column, affectPosition.Row, Mathf.CeilToInt(this.DamageScope /
                                                                                                             (float)Mathf.Min(ClientSystemConstants.ACTOR_TILE_MAP_TILE_SIZE.height,
                                                                                                                              ClientSystemConstants.ACTOR_TILE_MAP_TILE_SIZE.width)));

        foreach (TilePosition tile in affectedTiles)
        {
            if (tile.IsValidActorTilePosition())
            {
                List <GameObject> characters = BattleMapData.Instance.ActorArray[tile.Row, tile.Column];
                foreach (GameObject character in characters)
                {
                    CharacterPropertyBehavior property = character.GetComponent <CharacterPropertyBehavior>();
                    if (property.CharacterType == CharacterType.Invader)
                    {
                        //float distance = Vector2.Distance((Vector2)this.transform.position, (Vector2)character.transform.position);

                        //float percentage = (1 - distance) / this.m_GroupDamageScope;
                        //percentage = Mathf.Max(percentage, 0);

                        CharacterHPBehavior hpBehavior = character.GetComponent <CharacterHPBehavior>();
                        hpBehavior.DecreaseHP(this.Damage, this.AttackCategory);

                        this.PushCharacter(character);
                    }
                }
            }
        }
    }
Example #2
0
    private void ConstructCharacter(GameObject characterPrefab, Vector3 position, BuildingCategory favoriteCategory,
                                    int hp, int armorCategory, float moveVelocity, TargetType type, float attackCD, int attackValue, float attackScope,
                                    int damageScope, float middleSpeed, int attackCategory, TargetType targetType, float pushFactor, float pushAttenuateFactor)
    {
        GameObject army = GameObject.Instantiate(characterPrefab) as GameObject;

        army.transform.position = position;
        army.transform.parent   = this.m_ParentNode;

        CharacterAI ai = army.GetComponent <CharacterAI>();

        ai.BattleMapData       = BattleMapData.Instance;
        ai.BattleSceneHelper   = this.m_SceneHelper;
        ai.FavoriteCategory    = favoriteCategory;
        ai.PushFactor          = pushFactor;
        ai.PushAttenuateFactor = pushAttenuateFactor;

        ai.SetIdle(true);

        CharacterHPBehavior hpBehavior = army.GetComponent <CharacterHPBehavior>();

        hpBehavior.TotalHP       = hp;
        hpBehavior.ArmorCategory = armorCategory;
        if (hpBehavior is KodoHPBehavior)
        {
            KodoHPBehavior kodoHP = hpBehavior as KodoHPBehavior;
            kodoHP.Factory = this;
        }

        CharacterPropertyBehavior property = army.GetComponent <CharacterPropertyBehavior>();

        property.CharacterType = CharacterType.Invader;
        property.MoveVelocity  = moveVelocity;
        property.Type          = type;

        AttackBehavior attackBehavior = army.GetComponent <AttackBehavior>();

        attackBehavior.BulletParent   = this.m_BulletParent;
        attackBehavior.AttackCD       = Mathf.FloorToInt(attackCD * ClientConfigConstants.Instance.TicksPerSecond);
        attackBehavior.AttackValue    = attackValue;
        attackBehavior.AttackScope    = attackScope;
        attackBehavior.DamageScope    = damageScope;
        attackBehavior.BulletFlySpeed = middleSpeed;
        attackBehavior.AttackCategory = attackCategory;
        attackBehavior.TargetType     = targetType;
        BattleSceneHelper.Instance.ConstructActor
            (army, PositionConvertor.GetActorTileIndexFromWorldPosition(army.transform.position));
    }
Example #3
0
 IEnumerator CharacterDestroy()
 {
     for (int i = this.m_InvaderList.Count - 1; i >= 0; i--)
     {
         GameObject invader = this.m_InvaderList[i];
         if (invader != null)
         {
             CharacterHPBehavior hpBehavior = invader.GetComponent <CharacterHPBehavior>();
             BattleMapData.Instance.RefreshInformationWithDestroyActor(invader,
                                                                       PositionConvertor.GetActorTileIndexFromWorldPosition(invader.transform.position));
             hpBehavior.SetDead();
             yield return(new WaitForSeconds(0.2f));
         }
     }
     this.m_InvaderList.Clear();
 }
Example #4
0
 public void DestroyAllInvaders()
 {
     if (BattleDirector.Instance == null)
     {
         foreach (GameObject invader in this.m_InvaderList)
         {
             CharacterHPBehavior hpBehavior = invader.GetComponent <CharacterHPBehavior>();
             BattleMapData.Instance.RefreshInformationWithDestroyActor(invader,
                                                                       PositionConvertor.GetActorTileIndexFromWorldPosition(invader.transform.position));
             hpBehavior.SetDead();
         }
         this.m_InvaderList.Clear();
     }
     else
     {
         foreach (GameObject invader in this.m_InvaderList)
         {
             invader.GetComponent <NewAI>().enabled = false;
         }
         this.StartCoroutine("CharacterDestroy");
     }
 }