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); }
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); }
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(); }
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); }
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); }
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); * } */ }