public void Update(Vector3 rayOrigin, Vector3 rayDirection, float rayLength) { if (m_state == State.Select) { m_selection.Raycast(rayOrigin, rayDirection, rayLength); Vector3[] vertices; int[] triangles; Vector2[] uv; m_selection.GenerateMeshData(out vertices, out triangles, out uv); if (vertices.Length > 0) { m_mesh.Clear(); m_mesh.vertices = vertices; m_mesh.uv = uv; m_mesh.triangles = triangles; m_mesh.RecalculateBounds(); //TODO: make a GetTransform function m_gameObject.transform.rotation = m_selection.rotation; m_gameObject.transform.position = m_selection.position; m_gameObject.transform.localScale = m_selection.scale; } } else if (m_state == State.AnimatedExtrude) { float delta = Time.time - m_extrudeStart; float extrudeLength = Mathf.Lerp(0, m_extrudeLength, delta / m_extrudeTime); Vector3[] vertices; int[] triangles; Vector2[] uv; switch (m_platformType) { default: case PlatformType.Raised: m_meshExtruder.ExtrudeCapped(out vertices, out triangles, out uv, extrudeLength, m_cappedTopUV, m_cappedCrownUV, m_cappedBaseUV); break; case PlatformType.Floating: case PlatformType.Wall: m_meshExtruder.ExtrudeSimpleWithBottom(out vertices, out triangles, out uv, extrudeLength, m_movingTopUV, m_movingSideUV, m_movingBottomUV, extrudeLength * 100); break; } m_mesh.Clear(); m_mesh.vertices = vertices; m_mesh.uv = uv; m_mesh.triangles = triangles; m_mesh.RecalculateBounds(); m_mesh.RecalculateNormals(); m_meshRenderer.material = m_extrudeMaterial; m_meshCollider.sharedMesh = null; m_meshCollider.sharedMesh = m_mesh; if (delta >= m_extrudeTime) { switch (m_platformType) { case PlatformType.Raised: break; case PlatformType.Floating: m_gameObject.AddComponent <FloatingPlatform>(); break; } m_state = State.Idle; m_gameObject = null; //TODO: call OnFinished() } } }
private void Update() { if (!PlayspaceManager.Instance.IsScanningComplete()) { return; } // Get current joypad axis values #if UNITY_EDITOR float hor = Input.GetAxis("Horizontal"); float ver = Input.GetAxis("Vertical"); bool buttonA = Input.GetKeyDown(KeyCode.Joystick1Button0); bool buttonB = Input.GetKeyDown(KeyCode.Joystick1Button1); #else m_xboxController.Update(); float hor = m_xboxController.GetAxisLeftThumbstickX(); float ver = m_xboxController.GetAxisLeftThumbstickY(); bool buttonA = m_xboxController.GetButtonDown(ControllerButton.A); bool buttonB = m_xboxController.GetButtonDown(ControllerButton.B); #endif float delta = (Mathf.Abs(ver) > 0.25f ? ver : 0) * Time.deltaTime; if (m_state == State.Select) { m_selection.Raycast(Camera.main.transform.position, Camera.main.transform.forward); Vector3[] vertices; int[] triangles; Vector2[] uv; m_selection.GenerateMeshData(out vertices, out triangles, out uv); if (vertices.Length > 0) { m_mesh.Clear(); m_mesh.vertices = vertices; m_mesh.uv = uv; m_mesh.triangles = triangles; m_mesh.RecalculateBounds(); //TODO: make a GetTransform function m_gameObject.transform.rotation = m_selection.rotation; m_gameObject.transform.position = m_selection.position; m_gameObject.transform.localScale = m_selection.scale; if (buttonA) { m_state = State.ExtrudeSimple; m_meshExtruder = new MeshExtruder(m_selection); } else if (buttonB) { m_state = State.ExtrudeCapped; m_meshExtruder = new MeshExtruder(m_selection); } } } else if (m_state == State.ExtrudeSimple) { m_extrudeLength += delta; Vector3[] vertices; int[] triangles; Vector2[] uv; m_meshExtruder.ExtrudeSimple(out vertices, out triangles, out uv, m_extrudeLength, m_topUV, m_sideUV, m_extrudeLength * 100);// SelectionTile.SIDE_CM); m_mesh.Clear(); m_mesh.vertices = vertices; m_mesh.uv = uv; m_mesh.triangles = triangles; m_mesh.RecalculateBounds(); m_mesh.RecalculateNormals(); m_meshRenderer.material = extrudeMaterial; m_meshCollider.sharedMesh = null; m_meshCollider.sharedMesh = m_mesh; if (buttonA) { m_state = State.Finished; } } else if (m_state == State.ExtrudeCapped) { m_extrudeLength += delta; Vector3[] vertices; int[] triangles; Vector2[] uv; m_meshExtruder.ExtrudeCapped(out vertices, out triangles, out uv, m_extrudeLength, m_topUV, m_sideUV, m_sideUV); m_mesh.Clear(); m_mesh.vertices = vertices; m_mesh.uv = uv; m_mesh.triangles = triangles; m_mesh.RecalculateBounds(); m_mesh.RecalculateNormals(); m_meshRenderer.material = extrudeMaterial; m_meshCollider.sharedMesh = null; m_meshCollider.sharedMesh = m_mesh; if (buttonA) { m_state = State.Finished; } } }