コード例 #1
0
ファイル: MainLogic.cs プロジェクト: dampirik/ByNekki
        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;
            }
        }
コード例 #2
0
ファイル: MainLogic.cs プロジェクト: dampirik/ByNekki
        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);
            }
        }