Esempio n. 1
0
 public static List <TilePosition> GetInflateOneBorder(IObstacleInfo obstacle, bool isActor)
 {
     if (obstacle is IBuildingInfo)
     {
         IBuildingInfo building = obstacle as IBuildingInfo;
         if (!s_BuildingInflateOneBorderDict.ContainsKey(building.BuildingType))
         {
             List <TilePosition> inflateOneObstacleList = Inflate(obstacle, isActor);
             List <TilePosition> border = FindBorder(inflateOneObstacleList);
             s_BuildingInflateOneBorderDict.Add(building.BuildingType, border);
         }
         return(s_BuildingInflateOneBorderDict[building.BuildingType]);
     }
     else
     {
         IRemovableObjectInfo removableObject = obstacle as IRemovableObjectInfo;
         if (!s_RemovableObjectInflateOneBorderDict.ContainsKey(removableObject.ObjectType))
         {
             List <TilePosition> inflateOneObstacleList = Inflate(obstacle, isActor);
             List <TilePosition> border = FindBorder(inflateOneObstacleList);
             s_RemovableObjectInflateOneBorderDict.Add(removableObject.ObjectType, border);
         }
         return(s_RemovableObjectInflateOneBorderDict[removableObject.ObjectType]);
     }
 }
Esempio n. 2
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);
    }
Esempio n. 3
0
 public BuilderBuildState(NewAI aiBehavior, IObstacleInfo targetInfo, IMapData mapData, TilePosition buildPosition) : base(aiBehavior)
 {
     this.m_TargetInfo     = targetInfo;
     this.m_TargetPosition = this.m_TargetInfo.BuildingPosition;
     this.m_BuildPosition  = buildPosition;
     this.m_MapData        = mapData;
 }
Esempio n. 4
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);
    }
    public BuilderBuildHoverState(IObstacleInfo targetInfo, IMapData mapData, TilePosition targetPosition, NewAI aiBehavior)
        : base(mapData, targetPosition, aiBehavior, targetInfo)
    {
        ActorConfig config = ActorPrefabConfig.Instance.GetComponent <ActorConfig>();

        this.WalkVelocity = config.BuilderMoveVelocity;
    }
    protected override void CalculateLightPositions(GameObject target, int targetRow, int targetColumn)
    {
        base.CalculateLightPositions(target, targetRow, targetColumn);
        IObstacleInfo property = this.m_MapData.GetObstacleInfoFormActorObstacleMap(targetRow, targetColumn);

        int radius = Mathf.FloorToInt(m_AttackScope /
                                      Mathf.Min(ClientSystemConstants.ACTOR_TILE_MAP_TILE_SIZE.width,
                                                ClientSystemConstants.ACTOR_TILE_MAP_TILE_SIZE.height));

        radius = Mathf.Max(0, radius - 1);
        foreach (TilePosition offset in property.ActorObstacleList)
        {
            TilePosition targetPosition = property.ActorPosition + offset;

            List <TilePosition> destinationTiles = RoundHelper.FillCircle(targetPosition.Column, targetPosition.Row, radius);
            foreach (TilePosition lightPosition in destinationTiles)
            {
                if (lightPosition.IsValidActorTilePosition())
                {
                    if (!this.m_PreviousTargetLightPositions.Contains(lightPosition.Column + (lightPosition.Row << 16)))
                    {
                        this.m_PreviousTargetLightPositions.Add(lightPosition.Column + (lightPosition.Row << 16));
                    }
                }
            }
        }
    }
Esempio n. 7
0
    private static List <TilePosition> FindBorder(IObstacleInfo obstacleInfo)
    {
        ObstacleConfigData data = null;

        if (obstacleInfo is IBuildingInfo)
        {
            data = ConfigInterface.Instance.BuildingConfigHelper.GetBuildingData(((IBuildingInfo)obstacleInfo).BuildingType, 0);
        }
        else
        {
            data = ConfigInterface.Instance.RemovableConfigHelper.GetRemovableObjectData(((IRemovableObjectInfo)obstacleInfo).ObjectType);
        }

        List <TilePosition> obstacleList = new List <TilePosition>();

        int minRow    = 255;
        int maxRow    = -255;
        int minColumn = 255;
        int maxColumn = -255;

        foreach (ConfigUtilities.Structs.TilePoint obstacle in data.ActorObstacleList)
        {
            minRow    = Mathf.Min(minRow, obstacle.row);
            maxRow    = Mathf.Max(maxRow, obstacle.row);
            minColumn = Mathf.Min(minColumn, obstacle.column);
            maxColumn = Mathf.Max(maxColumn, obstacle.column);

            obstacleList.Add(obstacle.ConvertToTilePosition());
        }

        return(FindBorder(obstacleList, minRow, maxRow, minColumn, maxColumn));
    }
Esempio n. 8
0
    public void SendBuilder(int builderNO, IObstacleInfo targetInfo)
    {
        BuildingLogicData builderHutData = LogicController.Instance.GetBuildingObject(
            new BuildingIdentity(ConfigUtilities.Enums.BuildingType.BuilderHut, builderNO));
        int builderLevel = builderHutData.Level;

        BuildingSceneDirector.Instance.SendBuilderToBuild(builderNO, builderLevel, builderHutData.BuildingPosition,
                                                          targetInfo, SceneManager.Instance);

        this.AddBusyBuilder(builderNO, targetInfo);
    }
Esempio n. 9
0
 protected virtual int GetWeightAccordingToObstacle(IObstacleInfo obstacle)
 {
     if (obstacle is IRemovableObjectInfo)
     {
         return(1000);
     }
     else
     {
         return(20);
     }
 }
Esempio n. 10
0
    protected override int GetWeightAccordingToObstacle(IObstacleInfo obstacle)
    {
        if (obstacle is IBuildingInfo)
        {
            if (((IBuildingInfo)obstacle).BuildingType == BuildingType.Wall)
            {
                return(10);
            }
        }

        return(base.GetWeightAccordingToObstacle(obstacle));
    }
Esempio n. 11
0
	public static bool IsBuildingHover(this IObstacleInfo buildingInfo, IMapData mapData)
	{
		if(Application.loadedLevelName != ClientStringConstants.BUILDING_SCENE_LEVEL_NAME)
		{
			return false;
		}
		else
		{
			TilePosition buildingPosition = buildingInfo.GetBuildingFirstBuildingPosition();
			return mapData.GetBuildingObjectFromBuildingObstacleMap(buildingPosition.Row, buildingPosition.Column) == null;
		}
	}
Esempio n. 12
0
    public Nullable <bool> FindNeighourWallNotNull(BuildingObstacleDirection wallDirection, int index)
    {
        TilePosition      tilePosition      = null;
        BuildingLogicData buildingLogicData = null;

        switch (wallDirection)
        {
        case BuildingObstacleDirection.Top:
            tilePosition = new TilePosition(this.BuildingLogicData.BuildingPosition.Column, this.BuildingLogicData.BuildingPosition.Row + index);

            break;

        case BuildingObstacleDirection.Bottom:
            tilePosition = new TilePosition(this.BuildingLogicData.BuildingPosition.Column, this.BuildingLogicData.BuildingPosition.Row - index);

            break;

        case BuildingObstacleDirection.Left:
            tilePosition = new TilePosition(this.BuildingLogicData.BuildingPosition.Column - index, this.BuildingLogicData.BuildingPosition.Row);

            break;

        case BuildingObstacleDirection.Right:
            tilePosition = new TilePosition(this.BuildingLogicData.BuildingPosition.Column + index, this.BuildingLogicData.BuildingPosition.Row);
            break;
        }

        IObstacleInfo obstacleInfo = SceneManager.Instance.GetBuildingInfoFormBuildingObstacleMap(tilePosition.Row, tilePosition.Column);

        if (obstacleInfo == null)
        {
            return(null);
        }
        else
        {
            buildingLogicData = obstacleInfo as BuildingLogicData;
            if (buildingLogicData != null)
            {
                if (buildingLogicData.BuildingIdentity.buildingType == BuildingType.Wall)
                {
                    return(true);
                }
                else
                {
                    return(null);
                }
            }
            return(null);
        }
    }
	protected override void CalculateLightPositions (GameObject target, int targetRow, int targetColumn)
	{
		base.CalculateLightPositions (target, targetRow, targetColumn);
		
		IObstacleInfo obstacleInfo = this.m_MapData.GetObstacleInfoFormActorObstacleMap(this.m_SourceRow, this.m_SourceColumn);
		if(obstacleInfo != null)
		{
			TilePosition position = obstacleInfo.ActorPosition;
			foreach(TilePosition offset in obstacleInfo.ActorObstacleList)
			{
				TilePosition lightPosition = position + offset;
				this.m_PreviousTargetLightPositions.Add(lightPosition.GetIndexInt());
			}
		}
	}
    public int GetWeight(int row, int column, int destinationRow, int destinationColumn)
    {
        GameObject target = this.m_MapData.GetBuildingObjectFromBuildingObstacleMap(destinationRow, destinationColumn);

        if (!this.m_MapData.ActorCanPass(destinationRow, destinationColumn))
        {
            if (target != this.m_PreviousCalculateTarget)
            {
                this.CalculateLightPositions(target);
                this.m_PreviousCalculateTarget = target;
            }
            if (this.IsInLightArray(row, column))
            {
                return(1);
            }
        }
        IObstacleInfo obstacleInfo = this.m_MapData.GetObstacleInfoFormActorObstacleMap(row, column);
        int           weight       = obstacleInfo == null ? 1 : this.GetWeightAccordingToObstacle(obstacleInfo);

        return(weight);
    }
    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);
    }
Esempio n. 16
0
    public void SendBuilderToBuild(int builderNO, int builderLevel, TilePosition builderHutPosition,
                                   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);
            builder.transform.position = PositionConvertor.GetWorldPositionFromBuildingTileIndex(builderHutPosition);
        }

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

        builderAI.MapData   = mapData;
        builderAI.BuilderNO = builderNO;
        builderAI.Build(targetInfo);
    }
 public MovableTargetWalkState(IMapData mapData, TilePosition targetPosition, NewAI aiBehavior, IObstacleInfo targetInfo)
     : base(mapData, targetPosition, aiBehavior)
 {
     this.m_TargetInfo           = targetInfo;
     this.m_TargetObjectPosition = targetInfo.ActorPosition;
 }
Esempio n. 18
0
 public void AddBusyBuilder(int builderNO, IObstacleInfo targetInfo)
 {
     this.Builders[builderNO].Build(targetInfo);
     this.m_BusyBuilderNumber++;
 }
Esempio n. 19
0
	public static TilePosition GetBuildingFirstActorPosition(this IObstacleInfo buildingInfo)
	{
		return buildingInfo.ActorPosition + buildingInfo.ActorObstacleList[0];
	}
Esempio n. 20
0
 public void Build(IObstacleInfo target)
 {
     this.m_Data.CurrentWorkTarget = target;
 }
Esempio n. 21
0
    public void Build(IObstacleInfo targetInfo)
    {
        BuilderWalkState walkState = new BuilderWalkState(targetInfo, this.MapData, targetInfo.ActorPosition, this);        //targetData, targetData.BuildingPosition, this);

        this.ChangeState(walkState);
    }
Esempio n. 22
0
    private static List <TilePosition> Inflate(IObstacleInfo obstacleInfo, bool isActor)
    {
        ObstacleConfigData data = null;

        if (obstacleInfo is IBuildingInfo)
        {
            data = ConfigInterface.Instance.BuildingConfigHelper.GetBuildingData(((IBuildingInfo)obstacleInfo).BuildingType, 0);
        }
        else
        {
            data = ConfigInterface.Instance.RemovableConfigHelper.GetRemovableObjectData(((IRemovableObjectInfo)obstacleInfo).ObjectType);
        }

        List <TilePosition> obstacleList = new List <TilePosition>();

        if (isActor)
        {
            foreach (ConfigUtilities.Structs.TilePoint obstacle in data.ActorObstacleList)
            {
                obstacleList.Add(obstacle.ConvertToTilePosition());
            }
        }
        else
        {
            foreach (ConfigUtilities.Structs.TilePoint obstacle in data.BuildingObstacleList)
            {
                obstacleList.Add(obstacle.ConvertToTilePosition());
            }
        }

        List <TilePosition> inflateList = new List <TilePosition>();

        foreach (TilePosition obstacle in obstacleList)
        {
            TilePosition up        = new TilePosition(obstacle.Column, obstacle.Row - 1);
            TilePosition down      = new TilePosition(obstacle.Column, obstacle.Row + 1);
            TilePosition left      = new TilePosition(obstacle.Column - 1, obstacle.Row);
            TilePosition right     = new TilePosition(obstacle.Column + 1, obstacle.Row);
            TilePosition leftUp    = new TilePosition(obstacle.Column - 1, obstacle.Row - 1);
            TilePosition rightUp   = new TilePosition(obstacle.Column + 1, obstacle.Row - 1);
            TilePosition leftDown  = new TilePosition(obstacle.Column - 1, obstacle.Row + 1);
            TilePosition rightDown = new TilePosition(obstacle.Column + 1, obstacle.Row + 1);

            if (!obstacleList.Contains(up) && !inflateList.Contains(up))
            {
                inflateList.Add(up);
            }
            if (!obstacleList.Contains(down) && !inflateList.Contains(down))
            {
                inflateList.Add(down);
            }
            if (!obstacleList.Contains(left) && !inflateList.Contains(left))
            {
                inflateList.Add(left);
            }
            if (!obstacleList.Contains(right) && !inflateList.Contains(right))
            {
                inflateList.Add(right);
            }
            if (!obstacleList.Contains(leftUp) && !inflateList.Contains(leftUp))
            {
                inflateList.Add(leftUp);
            }
            if (!obstacleList.Contains(rightUp) && !inflateList.Contains(rightUp))
            {
                inflateList.Add(rightUp);
            }
            if (!obstacleList.Contains(leftDown) && !inflateList.Contains(leftDown))
            {
                inflateList.Add(leftDown);
            }
            if (!obstacleList.Contains(rightDown) && !inflateList.Contains(rightDown))
            {
                inflateList.Add(rightDown);
            }
        }
        List <TilePosition> result = new List <TilePosition>();

        result.AddRange(obstacleList);
        result.AddRange(inflateList);
        return(result);
    }
Esempio n. 23
0
    public void Build(IObstacleInfo targetInfo, TilePosition buildPosition)
    {
        BuilderBuildState buildState = new BuilderBuildState(this, targetInfo, this.MapData, buildPosition);

        this.ChangeState(buildState);
    }
Esempio n. 24
0
 public static List <TilePosition> GetInflateOneBorder(IObstacleInfo obstacle)
 {
     return(GetInflateOneBorder(obstacle, true));
 }
Esempio n. 25
0
 public static TilePosition FindValidInflateOneBorderPoint(IObstacleInfo obstacleInfo)
 {
     return(FindValidInflateOneBorderPoint(obstacleInfo, true));
 }
 protected virtual int GetWeightAccordingToObstacle(IObstacleInfo obstacle)
 {
     return(4);
 }