Ejemplo n.º 1
0
        public void CreateLineItem(ILineModel lineModel)
        {
            ProjectItem projectItem = Instantiate(_projectItemPrefab, _parent, false);

            projectItem.Initialize(lineModel, OnSelectItem, OnUnselectItem, OnDeleteItem, OnCopyLine);
            _itemLines.Add(projectItem);
        }
Ejemplo n.º 2
0
        public void Initialize(ILineModel lineModel, IAudioPeerService audioPeer, Material trailMaterial)
        {
            _lineModel = lineModel;
            _audioPeer = audioPeer;

            _currentScale                = lineModel.PhyllotaxisProperty.Scale;
            _forward                     = true;
            _trailRenderer               = GetComponent <TrailRenderer>();
            _trailRenderer.material      = new Material(trailMaterial);
            _trailRenderer.colorGradient = lineModel.Gradient;
            _trailRenderer.widthCurve    = lineModel.WidthCurve;

            if (lineModel.IsEmissionEnabled)
            {
                _trailRenderer.sharedMaterial.EnableKeyword("_EMISSION");
                _trailRenderer.sharedMaterial.SetColor("_EmissionColor", lineModel.EmissionColor * lineModel.EmissionIntensity);
            }

            _number = lineModel.PhyllotaxisProperty.NumberStart;
            transform.localPosition = CalculatePhyllotaxis(lineModel.PhyllotaxisProperty.Degree, _currentScale, _number);
            if (lineModel.PhyllotaxisProperty.UseLerping)
            {
                _isLerping = true;
                SetLerpPositions();
            }
        }
Ejemplo n.º 3
0
 private void OnSelectItem(ILineModel lineModel)
 {
     foreach (ProjectItem line in _itemLines)
     {
         if (line.LineModel.Guid != lineModel.Guid)
         {
             line.UnSelect();
             OnUnselectItem(line.LineModel);
         }
     }
     LineSelectedSignal.Dispatch(lineModel);
 }
Ejemplo n.º 4
0
 private void DeleteLine(ILineModel line, bool undo)
 {
     ProjectService.DeleteLine(line.Guid);
     if (undo)
     {
         _undoLines.Push(new Tuple <ActionType, ILineModel>(ActionType.Delete, line));
         UndoAvailableSignal.Dispatch(true);
     }
     else
     {
         _redoLines.Push(new Tuple <ActionType, ILineModel>(ActionType.Add, line));
         RedoAvailableSignal.Dispatch(true);
     }
 }
Ejemplo n.º 5
0
 private void UpdateLine(ILineModel line, bool undo)
 {
     ProjectService.UpdateLine((LineModel)line);
     if (undo)
     {
         _undoLines.Push(new Tuple <ActionType, ILineModel>(ActionType.Edit, line));
         UndoAvailableSignal.Dispatch(true);
     }
     else
     {
         _redoLines.Push(new Tuple <ActionType, ILineModel>(ActionType.Edit, line));
         RedoAvailableSignal.Dispatch(true);
     }
 }
Ejemplo n.º 6
0
        public void CreateLine(ILineModel line)
        {
            GameObject currentLine = Instantiate(DrawService.GetLinePrefab(), Vector3.zero, Quaternion.identity);

            currentLine.transform.SetParent(DrawService.GetRoot3D().transform, false);
            LineRenderer lineRenderer = currentLine.GetComponent <LineRenderer>();

            lineRenderer.sharedMaterial = new Material(DrawService.GetLineMaterial());
            lineRenderer.positionCount  = line.KochLineProperty.OriginalPositions.Length;
            lineRenderer.SetPositions(line.KochLineProperty.OriginalPositions);
            line.LineGameObject = lineRenderer;
            _lines.Add(line.Guid, line);
            UpdateLine((LineModel)line);
        }
Ejemplo n.º 7
0
        private void ScaleReact(ILineModel line)
        {
            if (!line.ScaleProperty.IsScaleReactOnAudio)
            {
                return;
            }
            float value;

            switch (line.EmissionProperty.EmissionFrequencyType)
            {
            case AudioFrequencyType.Band:
                value = AudioPeerService.GetAudioBand(line.ScaleProperty.ScaleBandBuffer);
                break;

            case AudioFrequencyType.BandBuffer:
                value = AudioPeerService.GetAudioBandBuffer(line.ScaleProperty.ScaleBandBuffer);
                break;

            case AudioFrequencyType.Amplitude:
                value = AudioPeerService.GetAmplitude();
                break;

            case AudioFrequencyType.AmplitudeBuffer:
                value = AudioPeerService.GetAmplitudeBuffer();
                break;

            case AudioFrequencyType.Frequency:
                value = AudioPeerService.GetFrequencyBand(line.ScaleProperty.ScaleBandBuffer);
                break;

            case AudioFrequencyType.FrequencyBuffer:
                value = AudioPeerService.GetFrequencyBandBuffer(line.ScaleProperty.ScaleBandBuffer);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            if (value > line.ScaleProperty.ScaleThreshold)
            {
                line.LineGameObject.widthMultiplier = value * line.ScaleProperty.ScaleMultiplier;
            }
            else
            {
                line.LineGameObject.widthMultiplier = 1;
            }
        }
Ejemplo n.º 8
0
        public void Initialize(ILineModel lineModel, Action <ILineModel> onSelectAction, Action <ILineModel> onUnselectAction, Action <ILineModel> onDeleteAction, Action <ILineModel, bool> onCopyAction)
        {
            LineModel         = lineModel;
            _onSelectAction   = onSelectAction;
            _onUnselectAction = onUnselectAction;
            _onDeleteAction   = onDeleteAction;
            _onCopyAction     = onCopyAction;

            _title.SetText(lineModel.DisplayName);

            _deleteButton.gameObject.SetActive(false);
            _copyButton.gameObject.SetActive(false);

            _itemButton.buttonObject.onClick.AddListener(OnButtonSelected);
            _deleteButton.buttonObject.onClick.AddListener(OnDeleteClicked);
            _copyButton.buttonObject.onClick.AddListener(OnCopyClicked);
        }
Ejemplo n.º 9
0
        private void EmissionReact(ILineModel line)
        {
            if (!line.EmissionProperty.IsEmissionReactOnAudio || !line.IsEmissionEnabled)
            {
                return;
            }
            float value;

            switch (line.EmissionProperty.EmissionFrequencyType)
            {
            case AudioFrequencyType.Band:
                value = AudioPeerService.GetAudioBand(line.EmissionProperty.EmissionBandBuffer);
                break;

            case AudioFrequencyType.BandBuffer:
                value = AudioPeerService.GetAudioBandBuffer(line.EmissionProperty.EmissionBandBuffer);
                break;

            case AudioFrequencyType.Amplitude:
                value = AudioPeerService.GetAmplitude();
                break;

            case AudioFrequencyType.AmplitudeBuffer:
                value = AudioPeerService.GetAmplitudeBuffer();
                break;

            case AudioFrequencyType.Frequency:
                value = AudioPeerService.GetFrequencyBand(line.EmissionProperty.EmissionBandBuffer);
                break;

            case AudioFrequencyType.FrequencyBuffer:
                value = AudioPeerService.GetFrequencyBandBuffer(line.EmissionProperty.EmissionBandBuffer);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            if (value > line.EmissionProperty.EmissionThreshold)
            {
                line.LineGameObject.sharedMaterial.SetColor("_EmissionColor", line.EmissionIntensity * line.EmissionColor * value);
            }
            else
            {
                line.LineGameObject.sharedMaterial.SetColor("_EmissionColor", Color.black);
            }
        }
Ejemplo n.º 10
0
    private void GenerateKochLine(ILineModel lineModel, Vector3[] positions, Keyframe[] keys, bool outwards, float generatorMultiplier)
    {
        List <LineSegment> lineSegments = new List <LineSegment>();

        for (int i = 0; i < positions.Length - 1; i++)
        {
            LineSegment _line = new LineSegment
            {
                StartPosition = positions[i],
                EndPosition   = i == positions.Length - 1 ? positions[0] : positions[i + 1],
            };
            _line.Direction = (_line.EndPosition - _line.StartPosition).normalized;
            _line.Length    = Vector3.Distance(_line.EndPosition, _line.StartPosition);
            lineSegments.Add(_line);
        }

        List <Vector3> newPosition    = new List <Vector3>();
        List <Vector3> targetPosition = new List <Vector3>();

        foreach (LineSegment lineSegment in lineSegments)
        {
            newPosition.Add(lineSegment.StartPosition);
            targetPosition.Add(lineSegment.StartPosition);

            for (int j = 1; j < keys.Length - 1; j++)
            {
                float   moveAmount   = lineSegment.Length * keys[j].time;
                float   heightAmount = (lineSegment.Length * keys[j].value) * generatorMultiplier;
                Vector3 movePos      = lineSegment.StartPosition + (lineSegment.Direction * moveAmount);
                Vector3 direction    = outwards
                    ? Quaternion.AngleAxis(-90, new Vector3(0, 0, 1)) * lineSegment.Direction
                    : Quaternion.AngleAxis(90, new Vector3(0, 0, 1)) * lineSegment.Direction;
                newPosition.Add(movePos);
                targetPosition.Add(movePos + (direction * heightAmount));
            }
        }

        newPosition.Add(lineSegments[0].StartPosition);
        targetPosition.Add(lineSegments[0].StartPosition);
        _positions       = new Vector3[newPosition.Count];
        _targetPositions = new Vector3[targetPosition.Count];
        _positions       = newPosition.ToArray();
        _targetPositions = targetPosition.ToArray();
        _bezierPositions = BezierCurve(_targetPositions, _bezierVertexCount);
    }
Ejemplo n.º 11
0
        public void Initialize(ILineModel line, IAudioPeerService audioPeer)
        {
            _line      = line;
            _audioPeer = audioPeer;

            _targetPositions   = new Vector3[line.KochLineProperty.OriginalPositions.Length];
            _targetPositions   = line.KochLineProperty.OriginalPositions;
            _bezierVertexCount = line.KochLineProperty.BezierVertexCount;
            _lerpAudio         = new float[line.KochLineProperty.ShapePointAmount];

            foreach (StartGen t in line.KochLineProperty.ListStartGeneration)
            {
                GenerateKochLine(line, _targetPositions, line.KochLineProperty.AnimationCurve.keys, t.Outwards, t.Scale);
                _generationCount++;
            }

            _lerpPositions = new Vector3[_positions.Length];
        }
Ejemplo n.º 12
0
        private void OnCopyLine(ILineModel lineModel, bool selected)
        {
            foreach (ProjectItem projectItem in _itemLines)
            {
                if (projectItem.LineModel.Guid != lineModel.Guid)
                {
                    projectItem.DeselectCopy();
                }
            }

            if (selected)
            {
                LineCopiedSignal.Dispatch(lineModel);
            }
            else
            {
                LineResetSignal.Dispatch();
            }
        }
Ejemplo n.º 13
0
 private void OnLineDeletedRequested(ILineModel line)
 {
     DeleteLineSignal.Dispatch(line.Guid);
 }
Ejemplo n.º 14
0
 private void OnLineUpdatedReceived(ILineModel line)
 {
     View.Refresh((LineModel)line);
 }
Ejemplo n.º 15
0
 public void UpdateLine(ILineModel line)
 {
     LineModel = line;
 }
Ejemplo n.º 16
0
 private void OnAddLineReceived(ILineModel line)
 {
     _undoLines.Push(new Tuple <ActionType, ILineModel>(ActionType.Add, line));
     UndoAvailableSignal.Dispatch(true);
     SaveAvailableSignal.Dispatch(true);
 }
Ejemplo n.º 17
0
 private void OnDeleteItem(ILineModel lineModel)
 {
     _itemLines.RemoveAll(t => t.LineModel.Guid == lineModel.Guid);
     LineDeletedSignal.Dispatch(lineModel);
 }
Ejemplo n.º 18
0
 private void OnUnselectItem(ILineModel lineModel)
 {
     LineUnSelectedSignal.Dispatch(lineModel.Guid);
 }
Ejemplo n.º 19
0
 private void OnLineSelected(ILineModel lineModel)
 {
     SelectLineSignal.Dispatch((LineModel)lineModel);
 }
Ejemplo n.º 20
0
 private void OnLineAdded(ILineModel lineModel)
 {
     View.CreateLineItem(lineModel);
 }
Ejemplo n.º 21
0
 private void OnAddLineReceived(ILineModel line)
 {
     _lines.Add(line.Guid, line);
     UpdateLine((LineModel)line);
 }
Ejemplo n.º 22
0
    public void Initialize(ILineModel line, Transform parent, GameObject trailPrefab, Material trailMaterial, AnimationCurve trailWidthCurve, IAudioPeerService audioPeer)
    {
        _line      = line;
        _audioPeer = audioPeer;

        _trails     = new List <TrailObject>();
        _startColor = new Color(0, 0, 0, 0);
        _endColor   = new Color(0, 0, 0, 1);

        _targetPositions   = new Vector3[line.KochLineProperty.OriginalPositions.Length];
        _targetPositions   = line.KochLineProperty.OriginalPositions;
        _bezierVertexCount = line.KochLineProperty.BezierVertexCount;

        foreach (StartGen t in line.KochLineProperty.ListStartGeneration)
        {
            GenerateKochLine(line, _targetPositions, line.KochLineProperty.AnimationCurve.keys, t.Outwards, t.Scale);
            _generationCount++;
        }

        _lerpPositions = new Vector3[_positions.Length];

        for (int i = 0; i < line.KochLineProperty.ShapePointAmount; i++)
        {
            GameObject trailInstance = Instantiate(trailPrefab, transform.position, Quaternion.identity);
            trailInstance.transform.SetParent(parent);

            TrailObject trailObjectInstance = new TrailObject
            {
                Go            = trailInstance,
                Trail         = trailInstance.GetComponent <TrailRenderer>(),
                EmissionColor = line.Gradient.Evaluate(i * (1.0f / line.KochLineProperty.ShapePointAmount))
            };
            trailObjectInstance.Trail.material       = new Material(trailMaterial);
            trailObjectInstance.Trail.numCapVertices = 8;
            trailObjectInstance.Trail.widthCurve     = trailWidthCurve;
            Vector3 instantiatePosition;
            if (_generationCount > 0)
            {
                int step;
                if (line.KochLineProperty.UseBezierCurves)
                {
                    step = _bezierPositions.Length / line.KochLineProperty.ShapePointAmount;
                    instantiatePosition = _bezierPositions[i * step];
                    trailObjectInstance.CurrentTargetNum = (i * step) + 1;
                    trailObjectInstance.TargetPosition   = _bezierPositions[trailObjectInstance.CurrentTargetNum];
                }
                else
                {
                    step = _positions.Length / line.KochLineProperty.ShapePointAmount;
                    instantiatePosition = _positions[i * step];
                    trailObjectInstance.CurrentTargetNum = (i * step) + 1;
                    trailObjectInstance.TargetPosition   = _positions[trailObjectInstance.CurrentTargetNum];
                }
            }
            else
            {
                instantiatePosition = line.KochLineProperty.OriginalPositions[i];
                trailObjectInstance.CurrentTargetNum = i + 1;
                trailObjectInstance.TargetPosition   = line.KochLineProperty.OriginalPositions[trailObjectInstance.CurrentTargetNum];
            }
            trailObjectInstance.Go.transform.localPosition = instantiatePosition;
            _trails.Add(trailObjectInstance);
        }

        _enabled = true;
    }
Ejemplo n.º 23
0
 private void OnLineCopiedRequested(ILineModel linemodel)
 {
     SetBrushFromCopySignal.Dispatch((LineModel)linemodel);
 }