示例#1
0
    protected void DoStep(Vector2Int direction)
    {
        Vector2Int head_pos = fHeadPosition + direction;

        if (CheckCollision(head_pos))
        {
            SnakeNode cur_node  = fFirstNode;
            SnakeNode prev_node = fLastNode;
            MoveNodeAfter(fLastNode, fFirstNode);
            fHeadPosition       = head_pos;
            cur_node.NodeType   = SnakeNode_NodeType.Head;
            cur_node.Direction  = direction;
            cur_node.M_Position = fHeadPosition;
            prev_node.NodeType  = SnakeNode_NodeType.Body;
            prev_node.RefreshGraphic();
            fFirstNode.NodeType = SnakeNode_NodeType.Tail;
            fFirstNode.RefreshGraphic();
            OnStep.Invoke(this);
        }
    }
示例#2
0
    protected void FullMoveTo(Vector2Int m_position)
    {
        SnakeNode node = fLastNode;

        while (node != null)
        {
            node.NodeType   = SnakeNode_NodeType.Body;
            node.Direction  = Vector2Int.zero;
            node.M_Position = m_position;
            m_position     += Vector2Int.down;
            node            = node.PrevSibling;
        }

        if (fFirstNode != null)
        {
            fFirstNode.NodeType = SnakeNode_NodeType.Tail;
            fLastNode.NodeType  = SnakeNode_NodeType.Head;

            if (fLastNode.PrevSibling != null)
            {
                fSpeedVector = fLastNode.M_Position - fLastNode.PrevSibling.M_Position;
            }
            else
            {
                fSpeedVector = Vector2Int.zero;
            }
        }

        node = fLastNode;

        while (node != null)
        {
            node.RefreshGraphic();
            node = node.PrevSibling;
        }
    }