private void UpdateStateStop() { if (Input.GetKeyDown(KeyCode.A)) { if (_selectedIndex - 1 >= 0) { ChangeActiveFrame(_selectedIndex - 1); SetTextCurrentFrame(); } } else if (Input.GetKeyDown(KeyCode.D)) { if (_selectedIndex + 1 < _frames.Count) { ChangeActiveFrame(_selectedIndex + 1); SetTextCurrentFrame(); } } else if (Input.GetKeyDown(KeyCode.Backspace)) { if (_selectedIndex < 0 || _frames.Count <= 1) return; var oldIndex = _selectedIndex; if (_selectedIndex - 1 >= 0) { ChangeActiveFrame(_selectedIndex - 1); var frame = _frames[oldIndex]; _frames.RemoveAt(oldIndex); Destroy(frame.gameObject); } else { ChangeActiveFrame(_selectedIndex + 1); var frame = _frames[oldIndex]; _frames.RemoveAt(oldIndex); Destroy(frame.gameObject); _selectedIndex = 0; } SetTextCurrentFrame(); } if (EventSystem.current.IsPointerOverGameObject()) return; if (Input.GetMouseButtonDown(1)) { Debug.Log("Create/Delete vertex"); var mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition); var vertex = _vertices.FirstOrDefault(item => item.Collision(mouse)); if (vertex == null) { var item = (GameObject)Instantiate(VertexPrefab, Vector3.zero, Quaternion.identity); item.transform.parent = _currentFrame.transform; item.transform.position = new Vector3(mouse.x, mouse.y, 0); vertex = item.GetComponent<VertexData>(); _vertices.Add(vertex); foreach (var frame in _frames) { ChangeItem change; if (!frame.Changes.TryGetValue(vertex.Id, out change)) { change = new ChangeItem(vertex.Id); frame.Changes.Add(vertex.Id, change); } change.CurrentPosition = vertex.transform.position; } } else { Destroy(vertex.gameObject); _vertices.Remove(vertex); foreach (var frame in _frames) { frame.Changes.Remove(vertex.Id); } var ribs = _ribs.Where(rib => rib.VertexA.Id == vertex.Id || rib.VertexB.Id == vertex.Id).ToList(); foreach (var rib in ribs) { Destroy(rib.gameObject); _ribs.Remove(rib); } } } else if (Input.GetMouseButtonUp(0) && _activeVertex != null && !Input.GetKey(KeyCode.LeftControl)) { Debug.Log("Clear active vertex"); _activeVertex = null; } else if (Input.GetMouseButtonDown(0) && _activeVertex != null && Input.GetKey(KeyCode.LeftControl)) { Debug.Log("Create/delete rib"); var mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition); var vertex = _vertices.FirstOrDefault(item => item.Collision(mouse)); if (vertex != null && vertex != _activeVertex) { var rib = _ribs.FirstOrDefault( r => (r.VertexA.Id == vertex.Id && r.VertexB.Id == _activeVertex.Id) || (r.VertexB.Id == vertex.Id && r.VertexA.Id == _activeVertex.Id)); if (rib == null) { var item = (GameObject)Instantiate(RibPrefab, Vector3.zero, Quaternion.identity); item.transform.parent = _currentFrame.transform; item.transform.position = new Vector3(mouse.x, mouse.y, 0); rib = item.GetComponent<RibData>(); rib.VertexA = _activeVertex; rib.VertexB = vertex; _ribs.Add(rib); } else { Destroy(rib.gameObject); _ribs.Remove(rib); } } _activeVertex = null; } else if (Input.GetMouseButtonDown(0) && _activeVertex == null) { Debug.Log("Select vertex"); var mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition); var vertex = _vertices.FirstOrDefault(item => item.Collision(mouse)); _activeVertex = vertex; } else if (Input.GetMouseButton(0) && _activeVertex != null && !Input.GetKey(KeyCode.LeftControl)) { Debug.Log("Move vertex"); var mouse = Camera.main.ScreenToWorldPoint(Input.mousePosition); _activeVertex.transform.position = new Vector3(mouse.x, mouse.y, 0); } if (Input.GetKeyUp(KeyCode.LeftControl) && _activeVertex!=null) { Debug.Log("Clear active vertex by UpLeftControl"); _activeVertex = null; } }
public void SetState(GUIState state) { if (_currentState == GUIState.None) { _stopStateMenu.SetActive(false); _playStateMenu.SetActive(false); _startSelectFrameAnimation = 0; } else if (_currentState == GUIState.Play) { _timeAnimation = 0; _nextStepTimeAnimation = 0; _playStateMenu.SetActive(false); } else if (_currentState == GUIState.Stop) { _stopStateMenu.SetActive(false); } var oldState = _currentState; _currentState = state; if (_currentState == GUIState.Play) { _activeVertex = null; _startSelectFrameAnimation = _selectedIndex; for (var i = 0; i < _selectedIndex; i++) { _timeAnimation += _frames[i].FrameTime; } _nextStepTimeAnimation = _timeAnimation + _frames[_selectedIndex].FrameTime; LoadChangeByFrame(_selectedIndex > 0 ? _selectedIndex - 1 : 0); var frame = _frames[_selectedIndex]; foreach (var change in frame.Changes) { var vertex = _vertices.FirstOrDefault(s => s.Id == change.Key); if (vertex == null) { Debug.LogError("vertex == null id ==" + change.Key + " frame == " + _selectedIndex); continue; } vertex.StartPosition = vertex.transform.position; vertex.EndPosition = change.Value.CurrentPosition; } _playStateMenu.SetActive(true); } else if (_currentState == GUIState.Stop) { _selectedIndex = _startSelectFrameAnimation; foreach (var frame in _frames) { frame.IsActive = false; } _frames[_selectedIndex].IsActive = true; LoadChangeByFrame(_selectedIndex); _stopStateMenu.SetActive(true); } SetTextCurrentFrame(); var @event = ChangeState; if (@event != null) { @event(oldState, _currentState); } }