protected override void OnCreateCubeForPoint(NavigablePointCube cube, NavigablePoint point)
    {
        base.OnCreateCubeForPoint(cube, point);

        cube.transform.position = new Vector3(point.Position.x, (point.Position.y / 2f), point.Position.z);
        cube.Scale(new Vector3(CubeSize, point.Position.y, CubeSize));
    }
    public float Gradient(NavigablePoint point, Direction d)
    {
        Vector2Int gpa = Vector2Int.zero, gpb = Vector2Int.zero;

        switch (d)
        {
        case Direction.X:
            gpa = point.GridPosition + XNeighbours[0];
            gpa = point.GridPosition + XNeighbours[1];
            break;

        case Direction.Z:
            gpa = point.GridPosition + ZNeighbours[0];
            gpa = point.GridPosition + ZNeighbours[1];
            break;
        }

        if (pointMap.ContainsKey(gpa) && pointMap.ContainsKey(gpb))
        {
            return(pointMap[gpb].Position.y - pointMap[gpa].Position.y);
        }
        else
        {
            //TODO: better border policy
            return(0f);
        }
    }
    protected override void OnCreateCubeForPoint(NavigablePointCube cube, NavigablePoint point)
    {
        base.OnCreateCubeForPoint(cube, point);

        cube.transform.position = new Vector3(point.Position.x, (-point.Position.y / 2f), point.Position.z);
        cube.Scale(new Vector3(CubeSize, point.Position.y, CubeSize)); //todo only make cube as big as it needs to be to occupy gaps
    }
    private void CreateBuildingObject(IslandBuilding prefab, NavigablePoint point)
    {
        var building = Instantiate(prefab);

        building.transform.SetParent(transform);

        building.transform.localScale = building.transform.localScale * surface.CubeSize;

        building.transform.position = new Vector3(point.Position.x, Mathf.Max(surface.seaLevel, point.Position.y), point.Position.z);

        building.Place(point.GridPosition);
    }
    protected List <NavigablePoint> CreateCircle()
    {
        var navPoints = new List <NavigablePoint>();

        pointMap = new Dictionary <Vector2Int, NavigablePoint>();

        for (int i = -resolution; i <= resolution; i++)
        {
            for (int j = -resolution; j <= resolution; j++)
            {
                float x = i * CubeSize;
                float z = j * CubeSize;

                //Inside the circle
                if (IsValidPoint(x, z) == false)
                {
                    continue;
                }

                var point = new NavigablePoint()
                {
                    Position     = new Vector3(x, 0f, z),
                    IsUnlocked   = true,
                    GridPosition = new Vector2Int(i, j),
                };

                navPoints.Add(point);

                pointMap[new Vector2Int(i, j)] = point;
            }
        }

        foreach (var p in navPoints)
        {
            p.Neighbours = navPoints.Where(q =>
            {
                foreach (var n in XNeighbours.Union(ZNeighbours))
                {
                    if (q.GridPosition + n == p.GridPosition)
                    {
                        return(true);
                    }
                }

                return(false);
            });
        }

        return(navPoints);
    }
 protected virtual void OnCreateCubeForPoint(NavigablePointCube cube, NavigablePoint point)
 {
 }
 public float MaxGrad(NavigablePoint point)
 {
     return(Mathf.Max(Gradient(point, Direction.X), Gradient(point, Direction.Z)));
 }
Beispiel #8
0
 public float DistanceFrom(NavigablePoint point)
 {
     return(Vector3.Distance(Position, point.Position));
 }