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); } }
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; } }