Пример #1
0
    public void SendBuilderBuild(int builderNO, int builderLevel, IObstacleInfo targetInfo, IMapData mapData)
    {
        GameObject builder = null;

        if (this.m_Builders.ContainsKey(builderNO))
        {
            builder = this.m_Builders[builderNO];
            builder.SetActive(true);
        }
        else
        {
            builder = this.GenerateBuilder(builderNO, builderLevel);
            this.m_Builders.Add(builderNO, builder);
        }


        TilePosition buildPoint = BorderPointHelper.FindValidInflateOneBorderPoint(targetInfo);

        builder.transform.position = PositionConvertor.GetWorldPositionFromActorTileIndex(buildPoint);

        BuilderAI builderAI = builder.GetComponent <BuilderAI>();

        builderAI.MapData   = mapData;
        builderAI.BuilderNO = builderNO;
        builderAI.Build(targetInfo, buildPoint);
    }
Пример #2
0
    public void FindTargetObject(IBuildingInfo buildingInfo, TilePosition startPosition)
    {
        List <IBuildingInfo> buildings = this.SceneHelper.GetAllBuildings();

        int           index = Random.Range(0, buildings.Count);
        IBuildingInfo targetBuildingInfo = buildings[index];

        if (buildingInfo != null)
        {
            while (buildingInfo == targetBuildingInfo)
            {
                index = Random.Range(0, buildings.Count);
                targetBuildingInfo = buildings[index];
            }
        }

        TilePosition targetPoint = BorderPointHelper.FindValidInflateOneBorderPoint(targetBuildingInfo);

        if (startPosition != null)
        {
            this.transform.position = PositionConvertor.GetWorldPositionFromActorTileIndex(startPosition);
        }
        VillagerWalkState walkState = new VillagerWalkState(this.MapData, targetPoint, this, targetBuildingInfo);

        this.ChangeState(walkState);
    }
Пример #3
0
    protected override void FindPath()
    {
        this.m_TargetObjectPosition = this.m_TargetInfo.ActorPosition;

        List <TilePosition> border = BorderPointHelper.GetInflateOneBorder(this.m_TargetInfo);

        if (border.Contains(this.m_PreviousPosition - this.m_TargetObjectPosition))
        {
            this.m_TargetPosition = this.m_PreviousPosition;
            this.OnTargetReached();
        }
        else
        {
            List <TilePosition> aStarPath = AStarPathFinder.CalculateAStarPahtTile
                                                (this.FindPathStrategy, this.m_PreviousPosition, this.m_TargetPosition);

            this.m_LinePath.Clear();
            int destinationIndex = aStarPath.Count - 1;
            for (int i = destinationIndex - 1; i >= 0; i--)
            {
                TilePosition position = aStarPath[i];
                if (border.Contains(position - this.m_TargetObjectPosition))
                {
                    destinationIndex = i;
                    break;
                }
            }
            this.m_TargetPosition = aStarPath[destinationIndex];
            for (int i = 1; i <= destinationIndex; i++)
            {
                TilePosition astarPoint = aStarPath[i];
                this.m_LinePath.Enqueue(astarPoint);
            }
        }
    }
Пример #4
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();
    }
Пример #5
0
 protected override bool OnTargetMove()
 {
     this.m_TargetObjectPosition = this.m_TargetInfo.ActorPosition;
     this.m_TargetPosition       = BorderPointHelper.FindValidInflateOneBorderPoint(this.m_TargetInfo);
     this.FindPath();
     return(true);
 }
Пример #6
0
    public void RunAway(List <IBuildingInfo> builderHuts)
    {
        IBuildingInfo targetInfo  = builderHuts[this.BuilderNO];
        TilePosition  targetPoint = BorderPointHelper.FindValidInflateOneBorderPoint(targetInfo);

        ActorRunAwayState runAwayState = new ActorRunAwayState(this.MapData, targetPoint, this);

        this.ChangeState(runAwayState);
    }
Пример #7
0
    public void FinishBuild()
    {
        BuildingLogicData logicData = LogicController.Instance.GetBuildingObject(
            new BuildingIdentity(BuildingType.BuilderHut, this.BuilderNO));
        TilePosition targetPosition = BorderPointHelper.FindValidInflateOneBorderPoint(logicData);

        BuilderReturnState returnState = new BuilderReturnState(this.MapData, targetPosition, this, logicData);

        this.ChangeState(returnState);
    }
Пример #8
0
    public void SendMercenaryToCamp(MercenaryType mercenaryType, IBuildingInfo campInfo, IBuildingInfo factoryInfo)
    {
        GameObject   mercenary    = this.GenerateMercenary(mercenaryType);
        TilePosition initialPoint = BorderPointHelper.FindValidInflateOneBorderPoint(factoryInfo);

        mercenary.transform.position = PositionConvertor.GetWorldPositionFromActorTileIndex(initialPoint);

        ArmyAI ai = mercenary.GetComponent <ArmyAI>();

        ai.SendArmyToCamp(campInfo);
    }
Пример #9
0
    public void SendArmyToCamp(ArmyType armyType, int level, IBuildingInfo campInfo, IBuildingInfo factoryInfo)
    {
        GameObject   army         = this.GenerateArmy(armyType, level);
        TilePosition initialPoint = BorderPointHelper.FindValidInflateOneBorderPoint(factoryInfo);

        army.transform.position = PositionConvertor.GetWorldPositionFromActorTileIndex(initialPoint);

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

        ai.SendArmyToCamp(campInfo);
    }
Пример #10
0
 protected override bool OnTargetMove()
 {
     this.m_TargetPosition = this.m_TargetInfo.ActorPosition + this.m_Offset;
     while (!this.m_TargetPosition.IsValidActorTilePosition())
     {
         this.m_TargetPosition = BorderPointHelper.FindValidInflateOneBorderPoint(this.m_TargetInfo);
         this.m_Offset         = this.m_TargetPosition - this.m_TargetInfo.ActorPosition;
     }
     this.FindPath();
     return(true);
 }
Пример #11
0
    protected override void OnTimeUp()
    {
        TilePosition newBuildPosition = BorderPointHelper.FindValidInflateOneBorderPoint(this.m_TargetInfo);

        if (newBuildPosition.Equals(this.m_BuildPosition))
        {
            this.Initial();
        }
        else
        {
            BuilderBuildHoverState hoverState = new BuilderBuildHoverState(this.m_TargetInfo, this.m_MapData, newBuildPosition, this.m_AIBehavior);            //this.m_TargetInfo, newBuildPosition, this.m_AIBehavior);
            this.m_AIBehavior.ChangeState(hoverState);
        }
    }
Пример #12
0
    public void RunAway(HashSet <BuildingType> disappearBuildings)
    {
        if (this.m_CurrentState is VillagerDisappearState)
        {
            GameObject.Destroy(this.gameObject);
        }
        else
        {
            List <IBuildingInfo> buildings = this.SceneHelper.GetBuildingsOfTypes(disappearBuildings);
            int index = Random.Range(0, buildings.Count);

            IBuildingInfo disappearBuilding = buildings[index];
            TilePosition  targetPosition    = BorderPointHelper.FindValidInflateOneBorderPoint(disappearBuilding);

            ActorRunAwayState runAwayState = new ActorRunAwayState(this.MapData, targetPosition, this);
            this.ChangeState(runAwayState);
        }
    }