Exemplo n.º 1
0
    public static TilePosition FindValidInflateOneBorderPoint(IObstacleInfo obstacleInfo, bool isActor)
    {
        List <TilePosition> borders = GetInflateOneBorder(obstacleInfo, isActor);

        int          index  = Random.Range(0, borders.Count);
        TilePosition result = isActor ? obstacleInfo.ActorPosition + borders[index] :
                              obstacleInfo.BuildingPosition + borders[index];

        if (isActor)
        {
            while (!result.IsValidActorTilePosition())
            {
                index  = Random.Range(0, borders.Count);
                result = obstacleInfo.ActorPosition + borders[index];
            }
        }
        else
        {
            while (!result.IsValidBuildingTilePosition())
            {
                index  = Random.Range(0, borders.Count);
                result = obstacleInfo.BuildingPosition + borders[index];
            }
        }
        //Debug.Log(result.Row + " , " + result.Column);
        return(result);
    }
Exemplo 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);
    }
Exemplo n.º 3
0
    private void Appear()
    {
        List <IBuildingInfo> buildings = ((VillagerAI)this.m_AIBehavior).SceneHelper.GetBuildingsOfTypes(this.m_AppearBuildings);
        int           index            = Random.Range(0, buildings.Count);
        IBuildingInfo appearBuilding   = buildings[index];

        while (appearBuilding.IsBuildingHover(((VillagerAI)this.m_AIBehavior).MapData))
        {
            index          = Random.Range(0, buildings.Count);
            appearBuilding = buildings[index];
        }


        List <TilePosition> borders = BorderPointHelper.GetBorder(appearBuilding);

        index = Random.Range(0, borders.Count);
        TilePosition appearPoint = appearBuilding.ActorPosition + borders[index];

        while (!appearPoint.IsValidActorTilePosition())
        {
            index       = Random.Range(0, borders.Count);
            appearPoint = appearBuilding.BuildingPosition + borders[index];
        }

        this.m_AIBehavior.transform.position = PositionConvertor.GetWorldPositionFromActorTileIndex(appearPoint);
        this.m_AnimationController.SetVisible();
    }
Exemplo n.º 4
0
    private bool IsNeedCheck(TilePosition position, TilePosition startPosition, int currentLayer, int deltaRow, int deltaColumn)
    {
        if (!position.IsValidActorTilePosition())
        {
            return(false);
        }

        int dRow    = position.Row - startPosition.Row;
        int dColumn = position.Column - startPosition.Column;

        if (dRow * deltaRow < 0 || dColumn * deltaColumn < 0 ||
            (deltaRow == 0 && dRow != 0) ||
            (deltaColumn == 0 && dColumn != 0))
        {
            return(false);
        }

        int distance = Mathf.Abs(position.Row - startPosition.Row) + Mathf.Abs(position.Column - startPosition.Column);

        return(distance == currentLayer);
    }
    protected override bool IsInLightArray(int row, int column)
    {
        GameObject relatedObject = this.m_MapData.GetBulidingObjectFromActorObstacleMap(row, column);

        if (relatedObject == null)
        {
            return(false);
        }
        IObstacleInfo property         = this.m_MapData.GetObstacleInfoFormActorObstacleMap(row, column);
        TilePosition  buildingPosition = property.ActorPosition;

        foreach (TilePosition offset in property.ActorObstacleList)
        {
            TilePosition position = buildingPosition + offset;
            if (position.IsValidActorTilePosition() &&
                !this.m_PreviousTargetLightPositions.Contains(position.Column + (position.Row << 16)))
            {
                return(false);
            }
        }
        return(true);
    }
Exemplo n.º 6
0
    public TilePosition FindCampStandablePoint(IBuildingInfo campInfo)
    {
        int          index = Random.Range(0, campInfo.BuildingObstacleList.Count);
        TilePosition buildingObstaclePosition = campInfo.BuildingObstacleList[index];

        TilePosition buildingPosition = campInfo.BuildingPosition + buildingObstaclePosition;

        TilePosition actorObstaclePosition = PositionConvertor.GetActorTilePositionFromBuildingTilePosition(buildingPosition);
        TilePosition actorOffset           = actorObstaclePosition - campInfo.ActorPosition;

        while (!actorObstaclePosition.IsValidActorTilePosition() ||
               campInfo.ActorObstacleList.Contains(actorOffset))
        {
            index = Random.Range(0, campInfo.BuildingObstacleList.Count);
            buildingObstaclePosition = campInfo.BuildingObstacleList[index];

            buildingPosition = campInfo.BuildingPosition + buildingObstaclePosition;

            actorObstaclePosition = PositionConvertor.GetActorTilePositionFromBuildingTilePosition(buildingPosition);
            actorOffset           = actorObstaclePosition - campInfo.ActorPosition;
        }
        return(actorObstaclePosition);
    }
Exemplo n.º 7
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);
         * }
         */
    }