private void Update() { int layer_mask = LayerMask.GetMask("model3d"); Ray rayInfo = Camera.main.ScreenPointToRay(Input.mousePosition); bool isHit = Physics.Raycast(rayInfo, out RaycastHit hitInfo, float.MaxValue, layerMask: layer_mask); RestoreSelectionAction(); SelectAction(isHit, hitInfo); switch (modelerState) { case ModelerState.None: modelerState = SelectionActions(ModelerState.None); break; case ModelerState.DrawQuad: modelerState = DrawActions(ModelerState.DrawQuad); break; case ModelerState.DrawCube: modelerState = DrawActions(ModelerState.DrawCube); break; default: break; } switch (toolState) { case ToolState.None: isExtruding = false; break; case ToolState.Extrude: if (selectionState != SelectionState.Face) { break; } if (Input.GetMouseButton(0)) { if (EventSystem.current.IsPointerOverGameObject() == false) { if (selectedPrimitiveObject != null) { float magnitude = Input.GetAxis("Mouse X") + Input.GetAxis("Mouse Y"); ExtrudeFace(magnitude, true); isExtruding = true; } } } if (isExtruding == true) { if (Input.GetMouseButtonUp(0)) { if (EventSystem.current.IsPointerOverGameObject() == false) { if (selectedPrimitiveObject != null) { selectedPrimitiveObject.GetCompound().FinishExtrude(); isExtruding = false; } } } } break; default: break; } }
protected ModelerState SelectionActions(ModelerState modelerState) { if (Input.GetMouseButtonDown(0)) { if (EventSystem.current.IsPointerOverGameObject() == false) { if (selectedPrimitiveObject != null) { selectedPrimitiveObject.GetCompound().SelectAll(false); selectedPrimitiveObject = null; } } switch (selectionState) { case SelectionState.Object: if (hitPrimitiveObject != null) { if (selectedPrimitiveObject != null) { selectedPrimitiveObject.GetCompound().SelectAll(false); } selectedPrimitiveObject = hitTr.GetComponent<PrimitiveObject>(); selectedPrimitiveObject.GetCompound().SelectAll(true); } break; case SelectionState.Face: if (hitPrimitiveObject != null) { if (selectedPrimitiveObject != null) { selectedPrimitiveObject.IsSelected = false; } selectedPrimitiveObject = hitTr.GetComponent<PrimitiveObject>(); selectedPrimitiveObject.IsSelected = true; } break; case SelectionState.Edge: break; case SelectionState.Vertex: break; default: break; } } return modelerState; }
protected ModelerState DrawActions(ModelerState modelerState) { int layer_mask = LayerMask.GetMask("floor"); Vector3 point = Vector3.zero; Ray rayInfo = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(rayInfo, out RaycastHit hitInfo, float.MaxValue, layerMask: layer_mask) == true) { point = hitInfo.point; point.y = 0; } switch (drawState) { case DrawState.isSettingUp: drawState = DrawState.isPlacing; break; case DrawState.isPlacing: UIManager.instance.ToolActions.ExtrudeToggleAction(false); if (Input.GetMouseButtonUp(0)) { if (modelerState == ModelerState.DrawQuad) { newCo = CompoundObject.MakeQuad(ModelParent, 2f); newCo.transform.position = point; } else if (modelerState == ModelerState.DrawCube) { newCo = CompoundObject.MakeCube(ModelParent, 2f); newCo.transform.position = point; } drawState = DrawState.isMoving; } break; case DrawState.isMoving: newCo.transform.position = point; if (Input.GetMouseButtonUp(0)) { drawState = DrawState.isDrawing; } break; case DrawState.isDrawing: if (newCo != null) { float magnitude = (Input.GetAxis("Mouse X") + Input.GetAxis("Mouse Y")); UIManager.instance.InputPanel.SetMagnitudeFieldActive(true); UIManager.instance.InputPanel.SetMagnitudeFieldText(newCo.Magnitute.ToString()); newCo.UpdateUniformlyCompoundbject(magnitude); } if (Input.GetMouseButtonUp(0)) { UIManager.instance.InputPanel.SetAllActive(false); newCo = null; drawState = DrawState.isSettingUp; return ModelerState.None; } return modelerState; default: break; } return modelerState; }
public void SetModelerState(ModelerState state) { modelerState = state; }