Esempio n. 1
0
    public void ConstructDefender()
    {
        GameObject defender = GameObject.Instantiate(this.m_DefenderPrefab) as GameObject;

        defender.transform.position = transform.position;

        defender.transform.parent = this.m_ParentNode;

        /*
         * DefenderBehavior behavior = defender.GetComponent<DefenderBehavior>();
         * behavior.MapData = this.m_MapData;
         *
         *
         * ArmyWeightDataCalculator weightCalculator = defender.GetComponent<ArmyWeightDataCalculator>();
         * weightCalculator.MapData = this.m_MapData;
         *
         * CharacterWalk walk = defender.GetComponent<CharacterWalk>();
         * walk.MapData = this.m_MapData;
         */

        //CharacterHPBehavior hpBehavior = defender.GetComponent<CharacterHPBehavior>();

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

        property.CharacterType = CharacterType.Defender;

        BattleSceneHelper.Instance.ConstructActor
            (defender, PositionConvertor.GetActorTileIndexFromWorldPosition(defender.transform.position));
    }
Esempio n. 2
0
    private bool FindDefender(TilePosition currentPosition)
    {
        foreach (TilePosition offset in this.CharacterAI.AttackBehavior.AttackScopeArray)
        {
            TilePosition positon = currentPosition + offset;

            bool isNeedContinue = true;
            if (positon.IsValidActorTilePosition())
            {
                List <GameObject> actors = this.CharacterAI.BattleMapData.ActorArray[positon.Row, positon.Column];

                foreach (GameObject actor in actors)
                {
                    CharacterPropertyBehavior property = actor.GetComponent <CharacterPropertyBehavior>();
                    if (property.CharacterType == CharacterType.Defender)
                    {
                        isNeedContinue = false;
                        if (Vector2.SqrMagnitude((Vector2)(this.m_AIBehavior.transform.position - actor.transform.position))
                            <= this.CharacterAI.AttackBehavior.AttackScopeSqr)
                        {
                            AttackState attackState = new AttackState(this.m_AIBehavior, new AITargetObject(actor, (Vector2)actor.transform.position), this.CharacterAI.AttackBehavior);
                            this.m_AIBehavior.ChangeState(attackState);
                            return(true);
                        }
                    }
                }
            }
            if (!isNeedContinue)
            {
                break;
            }
        }
        return(false);
    }
    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);
                    }
                }
            }
        }
    }
Esempio n. 4
0
    public List <GameObject> GetActors(List <TilePosition> tiles, TargetType type)
    {
        if (type == TargetType.AirGround)
        {
            return(this.GetActors(tiles));
        }
        else
        {
            List <GameObject> result = new List <GameObject>();

            foreach (TilePosition tile in tiles)
            {
                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.Type == type)
                        {
                            result.Add(character);
                        }
                    }
                }
            }
            return(result);
        }
    }
Esempio n. 5
0
    public override void AICalculate()
    {
        if (this.m_AIBehavior.CanTakeResponse)
        {
            List <GameObject> targets = BattleSceneHelper.Instance.GetActors(this.m_DefenseObjectBattleBehavior.TriggerList,
                                                                             this.m_DefenseObjectBattleBehavior.TargetType);
            foreach (GameObject target in targets)
            {
                CharacterPropertyBehavior characterProperty = target.GetComponent <CharacterPropertyBehavior>();
                if (characterProperty.CharacterType == CharacterType.Invader)
                {
                    float distanceSqrt = Vector2.SqrMagnitude((Vector2)this.m_DefenseObjectBattleBehavior.Property.AnchorTransform.position -
                                                              (Vector2)target.transform.position);
                    if (distanceSqrt <= this.m_DefenseObjectBattleBehavior.TriggerScopeSqrt)
                    {
                        this.m_DefenseObjectBattleBehavior.DisplayTriggerAnimation();
                        if (Application.loadedLevelName.Equals(ClientStringConstants.BATTLE_SCENE_LEVEL_NAME))
                        {
                            DefenseObjectPropertyBehavior property = this.m_AIBehavior.GetComponent <DefenseObjectPropertyBehavior>();
                            CommunicationUtility.Instance.TriggerDefenseObject(new TriggerDefenseObjectRequestParameter()
                            {
                                DefenseObjectID = property.DefenseObjectID, OperateTime = TimeTickRecorder.Instance.CurrentTimeTick - BattleDirector.Instance.MatchStartTick
                            });
                        }

                        if (this.m_DefenseObjectBattleBehavior.TriggerTick == 0)
                        {
                            this.m_DefenseObjectBattleBehavior.Effect();

                            LastingEffectBehavior lastingEffect = this.m_DefenseObjectBattleBehavior as LastingEffectBehavior;
                            if (lastingEffect != null && lastingEffect.CurrentTimes != lastingEffect.TotalTimes)
                            {
                                DefenseObjectLastingState lastingState = new DefenseObjectLastingState(this.m_AIBehavior, lastingEffect);
                                this.m_AIBehavior.ChangeState(lastingState);
                            }
                            AudioController.Play(this.m_DefenseObjectBattleBehavior.EffectSound);
                        }
                        else
                        {
                            DefenseObjectTriggerState triggerState = new DefenseObjectTriggerState(this.m_AIBehavior);
                            this.m_AIBehavior.ChangeState(triggerState);
                        }
                        break;
                    }
                }
            }
        }
    }
Esempio n. 6
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));
    }
Esempio n. 7
0
    protected void ClearActor()
    {
        TilePosition currentPosition = PositionConvertor.GetActorTileIndexFromWorldPosition(this.transform.position);

        BattleSceneHelper.Instance.DestroyActor(gameObject, currentPosition);

        if (Application.loadedLevelName == ClientStringConstants.BATTLE_SCENE_LEVEL_NAME)
        {
            CharacterPropertyBehavior property = this.GetComponent <CharacterPropertyBehavior>();
            if (property.CharacterType == CharacterType.Invader)
            {
                if (BattleSceneHelper.Instance.TotalInvaderCount == 0 &&
                    BattleRecorder.Instance.DropArmyCount == ArmyMenuPopulator.Instance.TotalArmyCount &&
                    BattleRecorder.Instance.DropMercenaryCount == ArmyMenuPopulator.Instance.TotalMercenaryCount)
                {
                    BattleDirector.Instance.EndMatch();
                }
            }
        }
    }
Esempio n. 8
0
    private void NotifyNearbyInvader()
    {
        Vector3      anchorPosition = this.m_BaseProperty.AnchorTransform.position;
        TilePosition center         = PositionConvertor.GetActorTileIndexFromWorldPosition(anchorPosition);
        int          tileRadius     = Mathf.CeilToInt(this.m_NotifyRadius /
                                                      Mathf.Min(ClientSystemConstants.ACTOR_TILE_MAP_TILE_SIZE.width, ClientSystemConstants.ACTOR_TILE_MAP_TILE_SIZE.height));
        List <TilePosition> points = RoundHelper.FillCircle(center.Column, center.Row, tileRadius);

        List <GameObject> actors = this.SceneHelper.GetActors(points, TargetType.Ground);

        foreach (GameObject actor in actors)
        {
            CharacterPropertyBehavior property = actor.GetComponent <CharacterPropertyBehavior>();
            if (property.CharacterType == CharacterType.Invader)
            {
                Vector2 dist = (Vector2)(anchorPosition - actor.transform.position);
                if (this.m_NotifyRadiusSqr >= Vector2.SqrMagnitude(dist))
                {
                    actor.GetComponent <CharacterAI>().SetIdle(false);
                }
            }
        }
    }
Esempio n. 9
0
    public override void AICalculate()
    {
        /*
         * if(this.m_TargetBuilding != null)
         * {
         *      if(++this.m_MoveTicks == this.m_TotalTicks)
         *      {
         *              this.m_AIBehavior.transform.position = new Vector3(this.m_TargetPosition.x, this.m_TargetPosition.y, this.m_TargetPosition.y);
         *              TilePosition currentPosition = PositionConvertor.GetActorTileIndexFromWorldPosition(this.m_AIBehavior.transform.position);
         *              if(this.m_PreviousPosition != currentPosition)
         *              {
         *                      BattleMapData.Instance.RefreshInformationWithMoveActor(this.m_AIBehavior.gameObject, this.m_PreviousPosition, currentPosition);
         *              }
         *              this.Bomb(this.m_TargetBuilding);
         *      }
         *      else
         *      {
         */
        this.m_AIBehavior.transform.position = new Vector3(this.m_AIBehavior.transform.position.x + this.m_MoveVector.x,
                                                           this.m_AIBehavior.transform.position.y + this.m_MoveVector.y,
                                                           this.m_AIBehavior.transform.position.y + this.m_MoveVector.y);

        TilePosition currentPosition = PositionConvertor.GetActorTileIndexFromWorldPosition(this.m_AIBehavior.transform.position);

        if (this.m_PreviousPosition != currentPosition)
        {
            if (currentPosition.IsValidActorTilePosition())
            {
                BattleMapData.Instance.RefreshInformationWithMoveActor(this.m_AIBehavior.gameObject, this.m_PreviousPosition, currentPosition);
                if (!BattleMapData.Instance.ActorCanPass(currentPosition.Row, currentPosition.Column))
                {
                    this.Bomb(BattleMapData.Instance.GetBulidingObjectFromActorObstacleMap(currentPosition.Row, currentPosition.Column));
                }
            }
            else
            {
                BattleSceneHelper.Instance.DestroyActor(this.m_AIBehavior.gameObject, this.m_PreviousPosition);
                GameObject.Destroy(this.m_AIBehavior.gameObject);
                if (Application.loadedLevelName == ClientStringConstants.BATTLE_SCENE_LEVEL_NAME)
                {
                    CharacterPropertyBehavior property = this.CharacterAI.PropertyBehavior;
                    if (property.CharacterType == CharacterType.Invader)
                    {
                        if (BattleSceneHelper.Instance.TotalInvaderCount == 0 &&
                            BattleRecorder.Instance.DropArmyCount == ArmyMenuPopulator.Instance.TotalArmyCount &&
                            BattleRecorder.Instance.DropMercenaryCount == ArmyMenuPopulator.Instance.TotalMercenaryCount)
                        {
                            BattleDirector.Instance.EndMatch();
                        }
                    }
                }
            }
        }
        this.m_PreviousPosition = currentPosition;



        /*
         *      }
         * }
         * else
         * {
         *      this.CharacterAI.SetIdle(false);
         * }
         */
    }