static PiratesOnlineHexagonGrid CreateGrid(int x, int z, Vector3 position, PiratesOnlineNode node) { PiratesOnlineHexagonGrid grid = CreateGrid(x, z, position); if (grid != null) { grid.UpdateMesh(node); } return(grid); }
public override void OnInspectorGUI() { DrawDefaultInspector(); if (Application.isPlaying) { PiratesOnlineHexagonGrid grid = target as PiratesOnlineHexagonGrid; if (grid != null) { grid.GridX = (short)EditorGUILayout.IntField("Grid X", grid.GridX); grid.GridZ = (short)EditorGUILayout.IntField("Grid Z", grid.GridZ); } } }
void SpawnAround(PiratesOnlineHexagonGrid grid) { // Only update if we got a new closest grid if (grid != null) { Vector3 pos = grid.transform.position; for (int x = -PiratesOnlineConstants.SpawnDistance; x <= PiratesOnlineConstants.SpawnDistance; ++x) { for (int z = -PiratesOnlineConstants.SpawnDistance; z <= PiratesOnlineConstants.SpawnDistance; ++z) { Vector3 p = pos; // p.x += (x * PiratesOnlineConstants.GridWidth); p.z += (z * PiratesOnlineConstants.GridHeight); // Make sure we have this grid CreateGrid(grid.GridX + x, grid.GridZ + z, p, testNode); } } // Find out-dated grids for (int i = 0; i < activeGrids.Count; ++i) { // Grab grid PiratesOnlineHexagonGrid neighbor = (PiratesOnlineHexagonGrid)activeGrids[i]; // Calculate distances int xDist = grid.GridX - neighbor.GridX; int zDist = grid.GridZ - neighbor.GridZ; // Check x distance if (xDist > PiratesOnlineConstants.SpawnDistance || xDist < -PiratesOnlineConstants.SpawnDistance) { RecycleGrid(neighbor); --i; } // Check z distance else if (zDist > PiratesOnlineConstants.SpawnDistance || zDist < -PiratesOnlineConstants.SpawnDistance) { RecycleGrid(neighbor); --i; } } } }
static void RecycleGrid(PiratesOnlineHexagonGrid grid) { // Remove from world keyMap.Remove((grid.GridX << 16) | grid.GridZ); // Remove from active grids activeGrids.Remove(grid); // Deactivate grid.gameObject.SetActiveRecursively(false); // Recycle recycledGrids.Enqueue(grid); //GameObject.Destroy(grid.gameObject); }
static PiratesOnlineHexagonGrid CreateGrid(int x, int z, Vector3 position) { if (x < 0 || z < 0) { return(null); } if (x >= PiratesOnlineConstants.GridCount || z >= PiratesOnlineConstants.GridCount) { return(null); } if (HasGrid(x, z)) { return(null); } PiratesOnlineHexagonGrid grid = null; if (recycledGrids.Count > 0) { grid = (PiratesOnlineHexagonGrid)recycledGrids.Dequeue(); grid.gameObject.SetActiveRecursively(true); } else { // Create new grid object GameObject go = (GameObject)GameObject.Instantiate(instance.prefab, Vector3.zero, Quaternion.identity); // Grab new component grid = (PiratesOnlineHexagonGrid)go.GetComponent(typeof(PiratesOnlineHexagonGrid)); // Init grid.InitMesh(); } grid.GridX = x; grid.GridZ = z; grid.transform.position = position; AddGrid(grid); return(grid); }
void Move(Vector3 m) { // If theres no movement, ignore if (m == Vector3.zero) { return; } // Never move further then 1.0 units per frame (really fast) m = Quaternion.Euler(0, 50, 0) * m; m = Vector3.ClampMagnitude(m * Time.deltaTime * scrollSpeed, 1f); // Squared distance, just start at max possible value float sqrDistance = float.MaxValue; //PiratesOnlineHexagonGrid previousGrid = closestGrid; for (int i = 0; i < activeGrids.Count; ++i) { // Grab grid PiratesOnlineHexagonGrid grid = (PiratesOnlineHexagonGrid)activeGrids[i]; // Move! grid.transform.position += m; // Check if this grid is the closest one float sqrMagnitude = grid.transform.position.sqrMagnitude; // Check if this is the closest one so far if (sqrMagnitude < sqrDistance) { closestGrid = grid; sqrDistance = sqrMagnitude; } } // Spawn around closest grid SpawnAround(closestGrid); }
static void RecycleGrid(PiratesOnlineHexagonGrid grid) { // Remove from world keyMap.Remove((grid.GridX << 16) | grid.GridZ); // Remove from active grids activeGrids.Remove(grid); // Deactivate grid.gameObject.SetActiveRecursively(false); // Recycle recycledGrids.Enqueue(grid); //GameObject.Destroy(grid.gameObject); }
void SpawnAround(PiratesOnlineHexagonGrid grid) { // Only update if we got a new closest grid if (grid != null) { Vector3 pos = grid.transform.position; for (int x = -PiratesOnlineConstants.SpawnDistance; x <= PiratesOnlineConstants.SpawnDistance; ++x) { for (int z = -PiratesOnlineConstants.SpawnDistance; z <= PiratesOnlineConstants.SpawnDistance; ++z) { Vector3 p = pos; // p.x += (x * PiratesOnlineConstants.GridWidth); p.z += (z * PiratesOnlineConstants.GridHeight); // Make sure we have this grid CreateGrid(grid.GridX + x, grid.GridZ + z, p, testNode); } } // Find out-dated grids for (int i = 0; i < activeGrids.Count; ++i) { // Grab grid PiratesOnlineHexagonGrid neighbor = (PiratesOnlineHexagonGrid)activeGrids[i]; // Calculate distances int xDist = grid.GridX - neighbor.GridX; int zDist = grid.GridZ - neighbor.GridZ; // Check x distance if (xDist > PiratesOnlineConstants.SpawnDistance || xDist < -PiratesOnlineConstants.SpawnDistance) { RecycleGrid(neighbor); --i; } // Check z distance else if (zDist > PiratesOnlineConstants.SpawnDistance || zDist < -PiratesOnlineConstants.SpawnDistance) { RecycleGrid(neighbor); --i; } } } }
public static void AddGrid(PiratesOnlineHexagonGrid grid) { keyMap[(grid.GridX << 16) | grid.GridZ] = grid; activeGrids.Add(grid); }
void Move(Vector3 m) { // If theres no movement, ignore if (m == Vector3.zero) { return; } // Never move further then 1.0 units per frame (really fast) m = Quaternion.Euler(0, 50, 0) * m; m = Vector3.ClampMagnitude(m * Time.deltaTime * scrollSpeed, 1f); // Squared distance, just start at max possible value float sqrDistance = float.MaxValue; //PiratesOnlineHexagonGrid previousGrid = closestGrid; for (int i = 0; i < activeGrids.Count; ++i) { // Grab grid PiratesOnlineHexagonGrid grid = (PiratesOnlineHexagonGrid)activeGrids[i]; // Move! grid.transform.position += m; // Check if this grid is the closest one float sqrMagnitude = grid.transform.position.sqrMagnitude; // Check if this is the closest one so far if (sqrMagnitude < sqrDistance) { closestGrid = grid; sqrDistance = sqrMagnitude; } } // Spawn around closest grid SpawnAround(closestGrid); }
public static bool GetGrid(int x, int z, out PiratesOnlineHexagonGrid grid) { return keyMap.TryGetValue((x << 16) | z, out grid); }
public static void AddGrid(PiratesOnlineHexagonGrid grid) { keyMap[(grid.GridX << 16) | grid.GridZ] = grid; activeGrids.Add(grid); }
public static bool GetGrid(int x, int z, out PiratesOnlineHexagonGrid grid) { return(keyMap.TryGetValue((x << 16) | z, out grid)); }