public void CreateLineItem(ILineModel lineModel) { ProjectItem projectItem = Instantiate(_projectItemPrefab, _parent, false); projectItem.Initialize(lineModel, OnSelectItem, OnUnselectItem, OnDeleteItem, OnCopyLine); _itemLines.Add(projectItem); }
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(); } }
private void OnSelectItem(ILineModel lineModel) { foreach (ProjectItem line in _itemLines) { if (line.LineModel.Guid != lineModel.Guid) { line.UnSelect(); OnUnselectItem(line.LineModel); } } LineSelectedSignal.Dispatch(lineModel); }
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); } }
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); } }
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); }
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; } }
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); }
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); } }
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); }
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]; }
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(); } }
private void OnLineDeletedRequested(ILineModel line) { DeleteLineSignal.Dispatch(line.Guid); }
private void OnLineUpdatedReceived(ILineModel line) { View.Refresh((LineModel)line); }
public void UpdateLine(ILineModel line) { LineModel = line; }
private void OnAddLineReceived(ILineModel line) { _undoLines.Push(new Tuple <ActionType, ILineModel>(ActionType.Add, line)); UndoAvailableSignal.Dispatch(true); SaveAvailableSignal.Dispatch(true); }
private void OnDeleteItem(ILineModel lineModel) { _itemLines.RemoveAll(t => t.LineModel.Guid == lineModel.Guid); LineDeletedSignal.Dispatch(lineModel); }
private void OnUnselectItem(ILineModel lineModel) { LineUnSelectedSignal.Dispatch(lineModel.Guid); }
private void OnLineSelected(ILineModel lineModel) { SelectLineSignal.Dispatch((LineModel)lineModel); }
private void OnLineAdded(ILineModel lineModel) { View.CreateLineItem(lineModel); }
private void OnAddLineReceived(ILineModel line) { _lines.Add(line.Guid, line); UpdateLine((LineModel)line); }
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; }
private void OnLineCopiedRequested(ILineModel linemodel) { SetBrushFromCopySignal.Dispatch((LineModel)linemodel); }