예제 #1
0
        public void BuildOn(Edge edge)
        {
            if (_startingNode == null || _endingNode == null)
            {
                throw new InvalidOperationException("Provide nodes to build on first");
            }

            edge.segmentGroup?.Destroy();

            _intermediatePoints = _lineFactory.GetIntermediatePoints(_startingNode.Value, _endingNode.Value, _rotation);

            if (_lineStart == null)
            {
                _lineStart = CreateDefaultLineEnding(edge.EdgeClass?.TexturePath);
            }

            if (_lineEnd == null)
            {
                _lineEnd = CreateDefaultLineEnding(edge.EdgeClass?.TexturePath);
            }

            var segments = new List <GameObject>();

            for (int i = 0; i < _intermediatePoints.Count - 1; i++)
            {
                var segment  = CreateCylinder(_class?.Scale ?? 1f);
                var material = _materialCache.GetByTexturePath(edge.EdgeClass?.TexturePath);
                segment.GetComponent <Renderer>().material = material;
                segments.Add(segment);
            }

            var segmentGroup = new SegmentGroup(_lineStart, segments, _lineEnd);

            segmentGroup.PlaceAlongPoints(_intermediatePoints);
            edge.segmentGroup    = segmentGroup;
            edge.labelGameObject = _label;
        }