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))); }
public float DistanceFrom(NavigablePoint point) { return(Vector3.Distance(Position, point.Position)); }