private void FindAndApplySurfaceRotation(bool instantRotation = false) { currentDistance = raycastLength; // Forward/Backward FindWorldTileSurface(transform.forward); FindWorldTileSurface(-transform.forward); // Right/Left FindWorldTileSurface(transform.right); FindWorldTileSurface(-transform.right); // Up/Down FindWorldTileSurface(transform.up); FindWorldTileSurface(-transform.up); // If a new world tile surface was found and doesn't have the // current rotation, apply the new rotation if (newWorldTileSurface != null) { if (newWorldTileSurface.SurfaceRotation != currentRotation) { ApplyRotation(instantRotation); } newWorldTileSurface = null; } }
private void FindWorldTileSurface(Vector3 direction) { Ray ray = new Ray(transform.position, direction); RaycastHit hit; if (Physics.Raycast(ray, out hit, raycastLength)) { WorldTileSurface worldTileSurface = hit.collider.gameObject.GetComponent <WorldTileSurface>(); if (worldTileSurface != null) { float distance = Vector3.Distance(transform.position, worldTileSurface.transform.position); if (distance < currentDistance) { newWorldTileSurface = worldTileSurface; currentDistance = distance; } } } if (drawDebugLines) { Debug.DrawLine(ray.origin, ray.origin + (ray.direction * raycastLength), Color.green); } }
private void OnPlayerInputEvent(object sender, PlayerInputArgs e) { if (e.inputState == InputState.Down && e.playerInputType == PlayerInputType.SpawnCheat) { WorldTile worldTile = world.GetRandomSurfacedWorldTile(); WorldTileSurface worldTileSurface = worldTile.GetRandomWalkablePlane(); Player player = Instantiate(playerPrefab); // TODO: Set different parent, higher up in hierarchy player.transform.parent = worldTile.transform.parent; player.transform.position = worldTileSurface.transform.position; player.Activate(); Log("Spawned player on coordinate [" + worldTile.Coordinates.x + ", " + worldTile.Coordinates.y + ", " + worldTile.Coordinates.z + "] on the " + worldTileSurface.SurfaceRotation + " side."); } }