private bool CheckTile(IntegerCoordinate2D coordinate) { if (_collisionTileBuffer.TryGetValue(coordinate, out _)) { return(false); } CreateTile(coordinate); return(true); }
private void SetLocation(IntegerCoordinate2D location, TerrainCollisionController controller) { _location = location; var currentTransform = transform; currentTransform.name = "Collision Tile (" + _location.x + " " + _location.y + ")"; _controller = controller; _physicalSize = (_controller.collisionBlockVertexCount - 1) * controller.terrainController.terrainGeneratorSettings.gridSize; currentTransform.position = new Vector3(_physicalSize * _location.x, 0, _physicalSize * _location.y); StartCoroutine(Build()); }
//Create a new collision Tile. public static TerrainCollisionTile Instantiate(IntegerCoordinate2D location, TerrainCollisionController controller) { var gameObject = new GameObject(); gameObject.transform.parent = controller.child; var collider = gameObject.AddComponent <MeshCollider>(); collider.cookingOptions = MeshColliderCookingOptions.None; //collider.convex = true; var tile = gameObject.AddComponent <TerrainCollisionTile>(); tile.SetLocation(location, controller); return(tile); }
private void FixedUpdate() { UpdateLoadingCenters(); var loadsThisFrame = 0; foreach (var loadingState in _currentCenterLoadingStates) { var center = loadingState.Key; for (var i = loadingState.Value.loadingCircleIndex; i < _loadingCircle.Length; i++) { if (loadsThisFrame > 2) { break; } loadingState.Value.loadingCircleIndex = i; _intermediateCoordinate2D = new IntegerCoordinate2D(_loadingCircle[i].x + center.x, _loadingCircle[i].y + center.y); if (CheckTile(_intermediateCoordinate2D)) { loadsThisFrame++; } } } }
private void CreateTile(IntegerCoordinate2D coordinate) { _collisionTileBuffer.Add(coordinate, TerrainCollisionTile.Instantiate(coordinate, this)); }