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); }
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); }
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); } } }
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(); }
protected override bool OnTargetMove() { this.m_TargetObjectPosition = this.m_TargetInfo.ActorPosition; this.m_TargetPosition = BorderPointHelper.FindValidInflateOneBorderPoint(this.m_TargetInfo); this.FindPath(); return(true); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); } }