From f723682eb9117deb18900f68be35751011f908fa Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:27:44 +0900 Subject: [PATCH 001/453] :name_badge: Rename to UniFlow instead of EventConnector --- Assets/CHANGELOG.md | 48 ++++++++- Assets/README.md | 6 +- Assets/Scripts/Connector/AnimationEvent.cs | 4 +- Assets/Scripts/Connector/AnimatorTrigger.cs | 6 +- Assets/Scripts/Connector/AudioController.cs | 30 +++++- Assets/Scripts/Connector/AudioEvent.cs | 21 +++- Assets/Scripts/Connector/CameraEvent.cs | 4 +- Assets/Scripts/Connector/Empty.cs | 2 +- Assets/Scripts/Connector/Interval.cs | 2 +- Assets/Scripts/Connector/LifecycleEvent.cs | 4 +- Assets/Scripts/Connector/LoadSceneEvent.cs | 31 ++++++ .../Scripts/Connector/LoadSceneEvent.cs.meta | 3 + Assets/Scripts/Connector/MouseEvent.cs | 4 +- Assets/Scripts/Connector/ParticleEvent.cs | 4 +- .../Connector/PhysicsCollision2DEvent.cs | 4 +- .../Connector/PhysicsCollisionEvent.cs | 4 +- .../Connector/PhysicsTrigger2DEvent.cs | 4 +- .../Scripts/Connector/PhysicsTriggerEvent.cs | 4 +- .../Scripts/Connector/PlayableController.cs | 69 ++++++++++-- .../Scripts/Connector/RectTransformEvent.cs | 4 +- .../Connector/SimpleAnimationController.cs | 100 ++++++++++++++++++ .../SimpleAnimationController.cs.meta | 3 + Assets/Scripts/Connector/TimelineSignal.cs | 6 +- Assets/Scripts/Connector/Timer.cs | 2 +- Assets/Scripts/Connector/TransformEvent.cs | 4 +- .../Connector/UIBehaviourEventTrigger.cs | 2 +- Assets/Scripts/Connector/UnloadSceneEvent.cs | 31 ++++++ .../Connector/UnloadSceneEvent.cs.meta | 3 + Assets/Scripts/EmptyEventReceiver.cs | 2 +- Assets/Scripts/EventConnectable.cs | 2 +- Assets/Scripts/EventMessages.cs | 2 +- Assets/Scripts/EventPublisher.cs | 2 +- Assets/Scripts/EventReceiver.cs | 2 +- Assets/Scripts/EventType.cs | 6 +- Assets/Scripts/IEventConnectable.cs | 2 +- Assets/Scripts/IEventPublisher.cs | 2 +- Assets/Scripts/IEventReceiver.cs | 2 +- .../Message/AnimatorTriggerEventData.cs | 2 +- .../Message/AudioControllerEventData.cs | 4 +- Assets/Scripts/Message/AudioEventData.cs | 4 +- Assets/Scripts/Message/CameraEventData.cs | 4 +- Assets/Scripts/Message/LifecycleEventData.cs | 4 +- Assets/Scripts/Message/MouseEventData.cs | 4 +- Assets/Scripts/Message/ParticleEventData.cs | 4 +- .../Message/PhysicsCollision2DEventData.cs | 4 +- .../Message/PhysicsCollisionEventData.cs | 4 +- .../Message/PhysicsTrigger2DEventData.cs | 4 +- .../Message/PhysicsTriggerEventData.cs | 4 +- .../Message/PlayableControllerEventData.cs | 15 ++- .../Scripts/Message/RectTransformEventData.cs | 4 +- .../SimpleAnimationControllerEventData.cs | 19 ++++ ...SimpleAnimationControllerEventData.cs.meta | 3 + Assets/Scripts/Message/TimelineEventData.cs | 2 +- Assets/Scripts/Message/TransformEventData.cs | 4 +- Assets/Tests/Runtime/Scripts/AllTest.cs | 11 +- .../Runtime/Scripts/AnimationEventTest.cs | 6 +- .../Runtime/Scripts/AnimatorTriggerTest.cs | 8 +- .../Runtime/Scripts/AudioControllerTest.cs | 8 +- .../Tests/Runtime/Scripts/AudioEventTest.cs | 8 +- .../Tests/Runtime/Scripts/CameraEventTest.cs | 8 +- Assets/Tests/Runtime/Scripts/IntervalTest.cs | 6 +- .../Runtime/Scripts/LifecycleEventTest.cs | 8 +- .../Runtime/Scripts/PlayableControllerTest.cs | 8 +- Assets/Tests/Runtime/Scripts/TestReceiver.cs | 2 +- .../Runtime/Scripts/TimelineSignalTest.cs | 8 +- Assets/Tests/Runtime/Scripts/TimerTest.cs | 6 +- .../Runtime/Scripts/UIBehaviourEventTest.cs | 4 +- ...onnectorTestBase.cs => UniFlowTestBase.cs} | 4 +- ...stBase.cs.meta => UniFlowTestBase.cs.meta} | 0 ...me.asmdef => UniFlow.Tests.Runtime.asmdef} | 2 +- ...meta => UniFlow.Tests.Runtime.asmdef.meta} | 0 .../{EventConnector.asmdef => UniFlow.asmdef} | 5 +- ...nector.asmdef.meta => UniFlow.asmdef.meta} | 0 Assets/package.json | 14 +-- Packages/manifest.json | 7 +- ProjectSettings/ProjectSettings.asset | 2 +- 76 files changed, 494 insertions(+), 151 deletions(-) create mode 100644 Assets/Scripts/Connector/LoadSceneEvent.cs create mode 100644 Assets/Scripts/Connector/LoadSceneEvent.cs.meta create mode 100644 Assets/Scripts/Connector/SimpleAnimationController.cs create mode 100644 Assets/Scripts/Connector/SimpleAnimationController.cs.meta create mode 100644 Assets/Scripts/Connector/UnloadSceneEvent.cs create mode 100644 Assets/Scripts/Connector/UnloadSceneEvent.cs.meta create mode 100644 Assets/Scripts/Message/SimpleAnimationControllerEventData.cs create mode 100644 Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta rename Assets/Tests/Runtime/Scripts/{EventConnectorTestBase.cs => UniFlowTestBase.cs} (92%) rename Assets/Tests/Runtime/Scripts/{EventConnectorTestBase.cs.meta => UniFlowTestBase.cs.meta} (100%) rename Assets/Tests/Runtime/{EventConnector.Tests.Runtime.asmdef => UniFlow.Tests.Runtime.asmdef} (93%) rename Assets/Tests/Runtime/{EventConnector.Tests.Runtime.asmdef.meta => UniFlow.Tests.Runtime.asmdef.meta} (100%) rename Assets/{EventConnector.asmdef => UniFlow.asmdef} (77%) rename Assets/{EventConnector.asmdef.meta => UniFlow.asmdef.meta} (100%) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 40ca861..83797f5 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,9 +1,51 @@ # Changelog -## [1.0.0] - YYYY-MM-DD +## [0.0.4-preview.5] - 2019-08-06 -* Initial version +Refactor code ### Features -* +* Add Interval event + +### Improvements + +* Refactor codes +* Reverses reference direction between Publishers + +## [0.0.3-preview.4] - 2019-08-06 + +Fix minor bugs + +### Fixes + +* Avoid `CS0649` warning +* Fix version conflicts in UniRx + +## [0.0.2-preview.3] - 2019-08-06 + +Support many events + +### Features + +* Support Lifecycle events +* Support Physics/Physics2D events +* Support Camera, Transform, RectTransform events +* Support Audio events + +### Improvements + +* Connect events correctly +* Refresh EventMessages on re-invoke event + +### Supports + +* Supported Unity version bumped up to 2019.2 + +## [0.0.1] - 2019-07-21 + +Initial version + +### Features + +* Implements simple events diff --git a/Assets/README.md b/Assets/README.md index c42425d..998f418 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -1,13 +1,13 @@ -# Event Connector +# UniFlow -EventConnector is a library that can connect various Unity events including user interaction without writing any C# script. +UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as "Tutorial that accepts user interaction" and "Waiting for the end of playback of Animation, Audio, Timeline, etc." can be implemented easily. ## Installation ```bash -upm add package dev.monry.upm.eventconnector +upm add package dev.monry.eventconnector ``` Please refer to [this repository](https://github.com/upm-packages/upm-cli) about the `upm` command. diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 54f2787..53bf67e 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -3,11 +3,11 @@ using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { // AnimationEvent cannot fire to Component attaching to another GameObject [RequireComponent(typeof(Animator))] - [AddComponentMenu("Event Connector/AnimationEvent", 301)] + [AddComponentMenu("Event Connector/AnimationEvent", 302)] public class AnimationEvent : EventPublisher { private ISubject Subject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index f83399c..4fb2a99 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -1,11 +1,11 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/AnimatorTrigger", 300)] + [AddComponentMenu("Event Connector/AnimatorTrigger", 301)] public class AnimatorTrigger : EventPublisher { [SerializeField] diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index f3b928d..1128e87 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -1,20 +1,37 @@ using System; -using EventConnector.Message; +using JetBrains.Annotations; +using UniFlow.Message; using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/AudioController", 302)] + [AddComponentMenu("Event Connector/AudioController", 303)] public class AudioController : EventPublisher { [SerializeField] private AudioControlMethod audioControlMethod = default; [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private AudioSource audioSource = default; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; private AudioControlMethod AudioControlMethod => audioControlMethod; - private AudioSource AudioSource => audioSource ? audioSource : audioSource = GetComponent(); + private AudioSource AudioSource + { + get => + audioSource != default + ? audioSource + : audioSource = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + [UsedImplicitly] + set => throw new NotImplementedException(); + } + + private AudioClip AudioClip => audioClip; private IDisposable Disposable { get; } = new CompositeDisposable(); @@ -31,6 +48,11 @@ public override IObservable OnPublishAsObservable() => private void InvokeAudioSourceMethod() { + if (AudioClip != default) + { + AudioSource.clip = AudioClip; + } + switch (AudioControlMethod) { case AudioControlMethod.Play: diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index d8f225b..5d3e5bf 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -1,12 +1,12 @@ using System; -using EventConnector.Message; +using JetBrains.Annotations; +using UniFlow.Message; using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { - [RequireComponent(typeof(AudioSource))] - [AddComponentMenu("Event Connector/AudioEvent", 303)] + [AddComponentMenu("Event Connector/AudioEvent", 304)] public class AudioEvent : EventPublisher { [SerializeField] private AudioEventType audioEventType = default; @@ -15,7 +15,18 @@ public class AudioEvent : EventPublisher private AudioSource audioSource = default; private AudioEventType AudioEventType => audioEventType; - private AudioSource AudioSource => audioSource ? audioSource : audioSource = GetComponent(); + private AudioSource AudioSource + { + get => + audioSource != default + ? audioSource + : audioSource = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + [UsedImplicitly] + set => audioSource = value; + } private IReadOnlyReactiveProperty> TimePair { get; set; } diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index c147688..cad7cd3 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/CameraEvent", 104)] public class CameraEvent : EventPublisher diff --git a/Assets/Scripts/Connector/Empty.cs b/Assets/Scripts/Connector/Empty.cs index 0daf301..902783a 100644 --- a/Assets/Scripts/Connector/Empty.cs +++ b/Assets/Scripts/Connector/Empty.cs @@ -2,7 +2,7 @@ using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/Empty", 10000)] public class Empty : EventPublisher diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index fc714e7..9b3b294 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -2,7 +2,7 @@ using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/Interval", 9001)] public class Interval : EventPublisher diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index d5f1be5..a12d6c2 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/LifecycleEvent", 100)] public class LifecycleEvent : EventPublisher diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs new file mode 100644 index 0000000..c1c1053 --- /dev/null +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using UniRx; +using UniRx.Async; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UniFlow.Connector +{ + [AddComponentMenu("Event Connector/LoadScene", 400)] + public class LoadSceneEvent : EventPublisher + { + [SerializeField] private List sceneNames = default; + private IEnumerable SceneNames => sceneNames; + + public override IObservable OnPublishAsObservable() + { + return LoadScenes() + .ToObservable() + .Select(_ => EventMessage.Create(EventType.LoadScene, this, SceneNames)); + } + + private async UniTask LoadScenes() + { + foreach (var sceneName in SceneNames) + { + await SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs.meta b/Assets/Scripts/Connector/LoadSceneEvent.cs.meta new file mode 100644 index 0000000..c53112a --- /dev/null +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 28abb11fbf954db080cb858d39c542f7 +timeCreated: 1565249834 \ No newline at end of file diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 72450ab..5395c1e 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/MouseEvent", 106)] public class MouseEvent : EventPublisher diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index f7ed672..829a955 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/ParticleEvent", 105)] public class ParticleEvent : EventPublisher diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 74cdfc4..69e7024 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/PhyticsCollision2DEvent", 201)] public class PhysicsCollision2DEvent : EventPublisher diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index 8e2b8de..513c317 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/PhysicsCollisionEvent", 200)] public class PhysicsCollisionEvent : EventPublisher diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 29b1755..7b3b528 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/PhysicsTrigger2DEvent", 203)] public class PhysicsTrigger2DEvent : EventPublisher diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index d2d8acd..957099d 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/PhyticsTriggerEvent", 202)] public class PhysicsTriggerEvent : EventPublisher diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 028a0ff..9ea2bb4 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -1,18 +1,41 @@ using System; -using EventConnector.Message; +using JetBrains.Annotations; +using UniFlow.Message; using UniRx; using UnityEngine; using UnityEngine.Playables; +using UnityEngine.Timeline; -namespace EventConnector.Connector +namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/PlayableController", 304)] + [AddComponentMenu("Event Connector/PlayableController", 305)] public class PlayableController : EventPublisher { + [SerializeField] private PlayableControlMethod playableControlMethod = default; [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private PlayableDirector playableDirector = default; - private PlayableDirector PlayableDirector => playableDirector ? playableDirector : playableDirector = GetComponent(); + [SerializeField] private TimelineAsset timelineAsset = default; + + private PlayableControlMethod PlayableControlMethod => playableControlMethod; + private PlayableDirector PlayableDirector + { + get => + playableDirector != default + ? playableDirector + : playableDirector = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + [UsedImplicitly] + set => playableDirector = value; + } + private TimelineAsset TimelineAsset + { + get => timelineAsset; + [UsedImplicitly] + set => timelineAsset = value; + } private IDisposable Disposable { get; } = new CompositeDisposable(); @@ -21,15 +44,49 @@ public override IObservable OnPublishAsObservable() => .Create( observer => { - PlayableDirector.Play(); - observer.OnNext(EventMessage.Create(EventType.PlayableController, PlayableDirector, PlayableControllerEventData.Create())); + InvokePlayableDirectorMethod(); + observer.OnNext(EventMessage.Create(EventType.PlayableController, PlayableDirector, PlayableControllerEventData.Create(PlayableControlMethod))); return Disposable; } ); + private void InvokePlayableDirectorMethod() + { + if (TimelineAsset != default) + { + PlayableDirector.playableAsset = TimelineAsset; + } + + switch (PlayableControlMethod) + { + case PlayableControlMethod.Play: + PlayableDirector.Play(); + break; + case PlayableControlMethod.Stop: + PlayableDirector.Stop(); + break; + case PlayableControlMethod.Pause: + PlayableDirector.Pause(); + break; + case PlayableControlMethod.Resume: + PlayableDirector.Resume(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + private void OnDestroy() { Disposable.Dispose(); } } + + public enum PlayableControlMethod + { + Play, + Stop, + Pause, + Resume, + } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index 54561b4..e73718e 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/RectTransformEvent", 103)] public class RectTransformEvent : EventPublisher diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs new file mode 100644 index 0000000..710e5b8 --- /dev/null +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -0,0 +1,100 @@ +using System; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + [AddComponentMenu("Event Connector/SimpleAnimationController", 300)] + public class SimpleAnimationController : EventPublisher + { + [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] + private SimpleAnimation simpleAnimation = default; + [SerializeField] + [Tooltip("If you do not specify it will be used SimpleAnimation setting")] + private AnimationClip animationClip = default; + + private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; + private AnimationClip AnimationClip => animationClip; + private SimpleAnimation SimpleAnimation + { + get => + simpleAnimation != default + ? simpleAnimation + : simpleAnimation = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent() + ; + [UsedImplicitly] + set => simpleAnimation = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnPublishAsObservable() => + Observable + .Create( + observer => + { + InvokeSimpleAnimationMethod(); + observer.OnNext(EventMessage.Create(EventType.SimpleAnimationController, SimpleAnimation, SimpleAnimationControllerEventData.Create(SimpleAnimationControlMethod))); + return Disposable; + } + ); + + protected override void Start() + { + base.Start(); + + if (AnimationClip != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) + { + SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); + } + } + + private void InvokeSimpleAnimationMethod() + { + switch (SimpleAnimationControlMethod) + { + case SimpleAnimationControlMethod.Play: + if (AnimationClip == default) + { + SimpleAnimation.Play(); + } + else + { + SimpleAnimation.Play(AnimationClip.GetInstanceID().ToString()); + } + break; + case SimpleAnimationControlMethod.Stop: + if (AnimationClip == default) + { + SimpleAnimation.Stop(); + } + else + { + SimpleAnimation.Stop(AnimationClip.GetInstanceID().ToString()); + } + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + } + + public enum SimpleAnimationControlMethod + { + Play, + Stop, + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs.meta b/Assets/Scripts/Connector/SimpleAnimationController.cs.meta new file mode 100644 index 0000000..86f36ec --- /dev/null +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e354102254874aecbac12539fc4505b3 +timeCreated: 1565255438 \ No newline at end of file diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/TimelineSignal.cs index cdb453d..5e58ab2 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/TimelineSignal.cs @@ -1,15 +1,15 @@ using System; -using EventConnector.Message; using JetBrains.Annotations; +using UniFlow.Message; using UniRx; using UnityEngine; using Object = UnityEngine.Object; -namespace EventConnector.Connector +namespace UniFlow.Connector { // Timeline SignalReceiver cannot serialize [Serializable] class // So I provide overloads to construct TimelineEventData - [AddComponentMenu("Event Connector/TimelineSignal", 305)] + [AddComponentMenu("Event Connector/TimelineSignal", 306)] public class TimelineSignal : EventPublisher { private ISubject Subject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index bb88485..5e6a5b9 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -2,7 +2,7 @@ using UniRx; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/Timer", 9000)] public class Timer : EventPublisher diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 9e590a2..b6ca8a1 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -1,10 +1,10 @@ using System; -using EventConnector.Message; +using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/TransformEvent", 102)] public class TransformEvent : EventPublisher diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index dc0cc25..56d9ade 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -4,7 +4,7 @@ using UnityEngine; using UnityEngine.EventSystems; -namespace EventConnector.Connector +namespace UniFlow.Connector { [AddComponentMenu("Event Connector/UIBehaviourEventTrigger", 101)] public class UIBehaviourEventTrigger : EventPublisher diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs new file mode 100644 index 0000000..7749b47 --- /dev/null +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using UniRx; +using UniRx.Async; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UniFlow.Connector +{ + [AddComponentMenu("Event Connector/UnloadScene", 401)] + public class UnloadSceneEvent : EventPublisher + { + [SerializeField] private List sceneNames = default; + private IEnumerable SceneNames => sceneNames; + + public override IObservable OnPublishAsObservable() + { + return UnloadScenes() + .ToObservable() + .Select(_ => EventMessage.Create(EventType.UnloadScene, this, SceneNames)); + } + + private async UniTask UnloadScenes() + { + foreach (var sceneName in SceneNames) + { + await SceneManager.UnloadSceneAsync(sceneName); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs.meta b/Assets/Scripts/Connector/UnloadSceneEvent.cs.meta new file mode 100644 index 0000000..7be582e --- /dev/null +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0a8555d88fa64fae816f0116869b471d +timeCreated: 1565249848 \ No newline at end of file diff --git a/Assets/Scripts/EmptyEventReceiver.cs b/Assets/Scripts/EmptyEventReceiver.cs index 403eaad..afd29be 100644 --- a/Assets/Scripts/EmptyEventReceiver.cs +++ b/Assets/Scripts/EmptyEventReceiver.cs @@ -1,4 +1,4 @@ -namespace EventConnector +namespace UniFlow { public class EmptyEventReceiver : EventReceiver { diff --git a/Assets/Scripts/EventConnectable.cs b/Assets/Scripts/EventConnectable.cs index 36f5611..ed3ef49 100644 --- a/Assets/Scripts/EventConnectable.cs +++ b/Assets/Scripts/EventConnectable.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace EventConnector +namespace UniFlow { public abstract class EventConnectable : MonoBehaviour, IEventConnectable { diff --git a/Assets/Scripts/EventMessages.cs b/Assets/Scripts/EventMessages.cs index 47ff01e..8e979f9 100644 --- a/Assets/Scripts/EventMessages.cs +++ b/Assets/Scripts/EventMessages.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using JetBrains.Annotations; -namespace EventConnector +namespace UniFlow { [PublicAPI] public class EventMessages : List diff --git a/Assets/Scripts/EventPublisher.cs b/Assets/Scripts/EventPublisher.cs index 8a06daf..78f8149 100644 --- a/Assets/Scripts/EventPublisher.cs +++ b/Assets/Scripts/EventPublisher.cs @@ -5,7 +5,7 @@ using UnityEngine; using Zenject; -namespace EventConnector +namespace UniFlow { public abstract class EventPublisher : EventConnectable, IEventPublisher { diff --git a/Assets/Scripts/EventReceiver.cs b/Assets/Scripts/EventReceiver.cs index 0ef480c..7dcfee1 100644 --- a/Assets/Scripts/EventReceiver.cs +++ b/Assets/Scripts/EventReceiver.cs @@ -1,4 +1,4 @@ -namespace EventConnector +namespace UniFlow { public abstract class EventReceiver : EventConnectable, IEventReceiver { diff --git a/Assets/Scripts/EventType.cs b/Assets/Scripts/EventType.cs index df1f5ff..ec0290c 100644 --- a/Assets/Scripts/EventType.cs +++ b/Assets/Scripts/EventType.cs @@ -1,4 +1,4 @@ -namespace EventConnector +namespace UniFlow { public enum EventType { @@ -16,12 +16,16 @@ public enum EventType PhysicsTrigger2DEvent, AnimatorTrigger, + SimpleAnimationController, AnimationEvent, AudioController, AudioEvent, PlayableController, TimelineSignal, + LoadScene, + UnloadScene, + Timer, Interval, Empty, diff --git a/Assets/Scripts/IEventConnectable.cs b/Assets/Scripts/IEventConnectable.cs index 7f17523..e9151af 100644 --- a/Assets/Scripts/IEventConnectable.cs +++ b/Assets/Scripts/IEventConnectable.cs @@ -1,4 +1,4 @@ -namespace EventConnector +namespace UniFlow { public interface IEventConnectable { diff --git a/Assets/Scripts/IEventPublisher.cs b/Assets/Scripts/IEventPublisher.cs index 745d360..68967ae 100644 --- a/Assets/Scripts/IEventPublisher.cs +++ b/Assets/Scripts/IEventPublisher.cs @@ -1,6 +1,6 @@ using System; -namespace EventConnector +namespace UniFlow { public interface IEventPublisher : IEventConnectable { diff --git a/Assets/Scripts/IEventReceiver.cs b/Assets/Scripts/IEventReceiver.cs index fe23d9e..ba065d0 100644 --- a/Assets/Scripts/IEventReceiver.cs +++ b/Assets/Scripts/IEventReceiver.cs @@ -1,4 +1,4 @@ -namespace EventConnector +namespace UniFlow { public interface IEventReceiver : IEventConnectable { diff --git a/Assets/Scripts/Message/AnimatorTriggerEventData.cs b/Assets/Scripts/Message/AnimatorTriggerEventData.cs index 05b19f6..6b4f409 100644 --- a/Assets/Scripts/Message/AnimatorTriggerEventData.cs +++ b/Assets/Scripts/Message/AnimatorTriggerEventData.cs @@ -1,7 +1,7 @@ using JetBrains.Annotations; using UnityEngine; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class AnimatorTriggerEventData diff --git a/Assets/Scripts/Message/AudioControllerEventData.cs b/Assets/Scripts/Message/AudioControllerEventData.cs index b5f58c5..97a2995 100644 --- a/Assets/Scripts/Message/AudioControllerEventData.cs +++ b/Assets/Scripts/Message/AudioControllerEventData.cs @@ -1,6 +1,6 @@ -using EventConnector.Connector; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { public struct AudioControllerEventData { diff --git a/Assets/Scripts/Message/AudioEventData.cs b/Assets/Scripts/Message/AudioEventData.cs index 421639d..da1637d 100644 --- a/Assets/Scripts/Message/AudioEventData.cs +++ b/Assets/Scripts/Message/AudioEventData.cs @@ -1,6 +1,6 @@ -using EventConnector.Connector; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { public struct AudioEventData { diff --git a/Assets/Scripts/Message/CameraEventData.cs b/Assets/Scripts/Message/CameraEventData.cs index 2d178e1..2c403db 100644 --- a/Assets/Scripts/Message/CameraEventData.cs +++ b/Assets/Scripts/Message/CameraEventData.cs @@ -1,6 +1,6 @@ -using EventConnector.Connector; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { public class CameraEventData { diff --git a/Assets/Scripts/Message/LifecycleEventData.cs b/Assets/Scripts/Message/LifecycleEventData.cs index 6fc7196..3d8edf0 100644 --- a/Assets/Scripts/Message/LifecycleEventData.cs +++ b/Assets/Scripts/Message/LifecycleEventData.cs @@ -1,8 +1,8 @@ using System; -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { [Serializable][PublicAPI] public class LifecycleEventData diff --git a/Assets/Scripts/Message/MouseEventData.cs b/Assets/Scripts/Message/MouseEventData.cs index 2da6009..c53ea6e 100644 --- a/Assets/Scripts/Message/MouseEventData.cs +++ b/Assets/Scripts/Message/MouseEventData.cs @@ -1,6 +1,6 @@ -using EventConnector.Connector; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { public class MouseEventData { diff --git a/Assets/Scripts/Message/ParticleEventData.cs b/Assets/Scripts/Message/ParticleEventData.cs index 4abb1bb..fa9aa4c 100644 --- a/Assets/Scripts/Message/ParticleEventData.cs +++ b/Assets/Scripts/Message/ParticleEventData.cs @@ -1,8 +1,8 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; using UnityEngine; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class ParticleEventData diff --git a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs b/Assets/Scripts/Message/PhysicsCollision2DEventData.cs index d899ce1..4a03226 100644 --- a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs +++ b/Assets/Scripts/Message/PhysicsCollision2DEventData.cs @@ -1,8 +1,8 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; using UnityEngine; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class PhysicsCollision2DEventData diff --git a/Assets/Scripts/Message/PhysicsCollisionEventData.cs b/Assets/Scripts/Message/PhysicsCollisionEventData.cs index 9579de8..e54887f 100644 --- a/Assets/Scripts/Message/PhysicsCollisionEventData.cs +++ b/Assets/Scripts/Message/PhysicsCollisionEventData.cs @@ -1,8 +1,8 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; using UnityEngine; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class PhysicsCollisionEventData diff --git a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs b/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs index 6c39e0e..27f807a 100644 --- a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs +++ b/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs @@ -1,8 +1,8 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; using UnityEngine; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class PhysicsTrigger2DEventData diff --git a/Assets/Scripts/Message/PhysicsTriggerEventData.cs b/Assets/Scripts/Message/PhysicsTriggerEventData.cs index 80e2f16..26599df 100644 --- a/Assets/Scripts/Message/PhysicsTriggerEventData.cs +++ b/Assets/Scripts/Message/PhysicsTriggerEventData.cs @@ -1,8 +1,8 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; using UnityEngine; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class PhysicsTriggerEventData diff --git a/Assets/Scripts/Message/PlayableControllerEventData.cs b/Assets/Scripts/Message/PlayableControllerEventData.cs index abc125e..7476033 100644 --- a/Assets/Scripts/Message/PlayableControllerEventData.cs +++ b/Assets/Scripts/Message/PlayableControllerEventData.cs @@ -1,8 +1,17 @@ -namespace EventConnector.Message +using UniFlow.Connector; + +namespace UniFlow.Message { public class PlayableControllerEventData { - public static PlayableControllerEventData Create() => - new PlayableControllerEventData(); + private PlayableControllerEventData(PlayableControlMethod playableControlMethod) + { + PlayableControlMethod = playableControlMethod; + } + + public PlayableControlMethod PlayableControlMethod { get; } + + public static PlayableControllerEventData Create(PlayableControlMethod playableControlMethod) => + new PlayableControllerEventData(playableControlMethod); } } \ No newline at end of file diff --git a/Assets/Scripts/Message/RectTransformEventData.cs b/Assets/Scripts/Message/RectTransformEventData.cs index 9d87576..0d3a3d2 100644 --- a/Assets/Scripts/Message/RectTransformEventData.cs +++ b/Assets/Scripts/Message/RectTransformEventData.cs @@ -1,7 +1,7 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class RectTransformEventData diff --git a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs new file mode 100644 index 0000000..e455493 --- /dev/null +++ b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs @@ -0,0 +1,19 @@ +using JetBrains.Annotations; +using UniFlow.Connector; + +namespace UniFlow.Message +{ + [PublicAPI] + public struct SimpleAnimationControllerEventData + { + private SimpleAnimationControllerEventData(SimpleAnimationControlMethod simpleAnimationControlMethod) + { + SimpleAnimationControlMethod = simpleAnimationControlMethod; + } + + public SimpleAnimationControlMethod SimpleAnimationControlMethod { get; } + + public static SimpleAnimationControllerEventData Create(SimpleAnimationControlMethod audioControlMethod) => + new SimpleAnimationControllerEventData(audioControlMethod); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta new file mode 100644 index 0000000..30ce8ed --- /dev/null +++ b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9d46cd952af74c3983c8a5533fa019ea +timeCreated: 1565255846 \ No newline at end of file diff --git a/Assets/Scripts/Message/TimelineEventData.cs b/Assets/Scripts/Message/TimelineEventData.cs index ff335ca..78d6eaf 100644 --- a/Assets/Scripts/Message/TimelineEventData.cs +++ b/Assets/Scripts/Message/TimelineEventData.cs @@ -3,7 +3,7 @@ using UnityEngine; using Object = UnityEngine.Object; -namespace EventConnector.Message +namespace UniFlow.Message { [Serializable][PublicAPI] public class TimelineEventData diff --git a/Assets/Scripts/Message/TransformEventData.cs b/Assets/Scripts/Message/TransformEventData.cs index 271ae3b..043ed70 100644 --- a/Assets/Scripts/Message/TransformEventData.cs +++ b/Assets/Scripts/Message/TransformEventData.cs @@ -1,7 +1,7 @@ -using EventConnector.Connector; using JetBrains.Annotations; +using UniFlow.Connector; -namespace EventConnector.Message +namespace UniFlow.Message { [PublicAPI] public class TransformEventData diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index e429b80..004fc62 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -1,19 +1,18 @@ using System.Collections; -using EventConnector; -using EventConnector.Connector; -using EventConnector.Message; using NUnit.Framework; +using UniFlow.Connector; +using UniFlow.Message; using UniRx.Triggers; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Playables; using UnityEngine.TestTools; using UnityEngine.UI; -using AnimationEvent = EventConnector.Connector.AnimationEvent; +using AnimationEvent = UniFlow.Connector.AnimationEvent; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class AllTest : EventConnectorTestBase + public class AllTest : UniFlowTestBase { [UnityTest] public IEnumerator All() diff --git a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs index 7122622..47e855f 100644 --- a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs @@ -2,11 +2,11 @@ using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; -using AnimationEvent = EventConnector.Connector.AnimationEvent; +using AnimationEvent = UniFlow.Connector.AnimationEvent; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class AnimationEventTest : EventConnectorTestBase + public class AnimationEventTest : UniFlowTestBase { [UnityTest] public IEnumerator AnimationEvent() diff --git a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs index d0ebafe..80023b8 100644 --- a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs @@ -1,13 +1,13 @@ using System.Collections; -using EventConnector.Message; +using UniFlow.Message; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; -using AnimationEvent = EventConnector.Connector.AnimationEvent; +using AnimationEvent = UniFlow.Connector.AnimationEvent; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class AnimatorTriggerTest : EventConnectorTestBase + public class AnimatorTriggerTest : UniFlowTestBase { [UnityTest] public IEnumerator AnimatorTrigger() diff --git a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs index 43e5141..5a465bf 100644 --- a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs @@ -1,17 +1,17 @@ using System; using System.Collections; using System.Linq; -using EventConnector.Connector; -using EventConnector.Message; +using UniFlow.Connector; +using UniFlow.Message; using NUnit.Framework; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.TestTools; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class AudioControllerTest : EventConnectorTestBase + public class AudioControllerTest : UniFlowTestBase { [UnityTest] public IEnumerator Play() diff --git a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs index 9d4a9cb..5da6bab 100644 --- a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs @@ -1,8 +1,8 @@ using System; using System.Collections; using System.Linq; -using EventConnector.Connector; -using EventConnector.Message; +using UniFlow.Connector; +using UniFlow.Message; using NUnit.Framework; using UniRx; using UnityEngine; @@ -10,9 +10,9 @@ using UnityEngine.TestTools; using Object = UnityEngine.Object; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class AudioEventTest : EventConnectorTestBase + public class AudioEventTest : UniFlowTestBase { [UnityTest] public IEnumerator PlayEvent() diff --git a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs index e4f7b84..ee105a1 100644 --- a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs @@ -1,17 +1,17 @@ using System; using System.Collections; using System.Linq; -using EventConnector.Connector; -using EventConnector.Message; +using UniFlow.Connector; +using UniFlow.Message; using NUnit.Framework; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.TestTools; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class CameraEventTest : EventConnectorTestBase + public class CameraEventTest : UniFlowTestBase { [UnityTest] public IEnumerator CameraBecomeVisibleEvent() diff --git a/Assets/Tests/Runtime/Scripts/IntervalTest.cs b/Assets/Tests/Runtime/Scripts/IntervalTest.cs index a7e9ca0..491823c 100644 --- a/Assets/Tests/Runtime/Scripts/IntervalTest.cs +++ b/Assets/Tests/Runtime/Scripts/IntervalTest.cs @@ -1,11 +1,11 @@ using System.Collections; -using EventConnector.Connector; +using UniFlow.Connector; using NUnit.Framework; using UnityEngine.TestTools; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class IntervalTest : EventConnectorTestBase + public class IntervalTest : UniFlowTestBase { [UnityTest] public IEnumerator Interval() diff --git a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs index c498228..abf097e 100644 --- a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs @@ -1,8 +1,8 @@ using System; using System.Collections; using System.Linq; -using EventConnector.Connector; -using EventConnector.Message; +using UniFlow.Connector; +using UniFlow.Message; using NUnit.Framework; using UniRx; using UnityEngine; @@ -10,9 +10,9 @@ using UnityEngine.TestTools; using Object = UnityEngine.Object; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class LifecycleEventTest : EventConnectorTestBase + public class LifecycleEventTest : UniFlowTestBase { private LifecycleEventType CurrentLifecycleEventType { get; set; } diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index ffd97b2..31a81a0 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -1,13 +1,13 @@ using System.Collections; -using EventConnector.Connector; -using EventConnector.Message; +using UniFlow.Connector; +using UniFlow.Message; using NUnit.Framework; using UnityEngine.Playables; using UnityEngine.TestTools; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class PlayableControllerTest : EventConnectorTestBase + public class PlayableControllerTest : UniFlowTestBase { [UnityTest] diff --git a/Assets/Tests/Runtime/Scripts/TestReceiver.cs b/Assets/Tests/Runtime/Scripts/TestReceiver.cs index 9ec0ec6..f4a6f95 100644 --- a/Assets/Tests/Runtime/Scripts/TestReceiver.cs +++ b/Assets/Tests/Runtime/Scripts/TestReceiver.cs @@ -1,4 +1,4 @@ -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { public class TestReceiver : EventReceiver { diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 912f264..361a088 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -1,12 +1,12 @@ using System.Collections; -using EventConnector.Connector; -using EventConnector.Message; +using UniFlow.Connector; +using UniFlow.Message; using NUnit.Framework; using UnityEngine.TestTools; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class TimelineSignalTest : EventConnectorTestBase + public class TimelineSignalTest : UniFlowTestBase { [UnityTest] public IEnumerator TimelineSignal() diff --git a/Assets/Tests/Runtime/Scripts/TimerTest.cs b/Assets/Tests/Runtime/Scripts/TimerTest.cs index 2fa8513..3bf3824 100644 --- a/Assets/Tests/Runtime/Scripts/TimerTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimerTest.cs @@ -1,11 +1,11 @@ using System.Collections; -using EventConnector.Connector; +using UniFlow.Connector; using NUnit.Framework; using UnityEngine.TestTools; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class TimerTest : EventConnectorTestBase + public class TimerTest : UniFlowTestBase { [UnityTest] public IEnumerator Timer() diff --git a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs index df69802..16f7096 100644 --- a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs @@ -6,9 +6,9 @@ using UnityEngine.TestTools; using UnityEngine.UI; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public class UIBehaviourEventTest : EventConnectorTestBase + public class UIBehaviourEventTest : UniFlowTestBase { [UnityTest] public IEnumerator UIBehaviourEventTrigger() diff --git a/Assets/Tests/Runtime/Scripts/EventConnectorTestBase.cs b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs similarity index 92% rename from Assets/Tests/Runtime/Scripts/EventConnectorTestBase.cs rename to Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs index 9a37e56..80103c0 100644 --- a/Assets/Tests/Runtime/Scripts/EventConnectorTestBase.cs +++ b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs @@ -6,9 +6,9 @@ using Zenject; using Object = UnityEngine.Object; -namespace EventConnector.Tests.Runtime +namespace UniFlow.Tests.Runtime { - public abstract class EventConnectorTestBase : ZenjectIntegrationTestFixture + public abstract class UniFlowTestBase : ZenjectIntegrationTestFixture { private const string ScenePath = "Tests/Runtime/Scenes/Basic/"; protected bool HasAssert { private get; set; } diff --git a/Assets/Tests/Runtime/Scripts/EventConnectorTestBase.cs.meta b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs.meta similarity index 100% rename from Assets/Tests/Runtime/Scripts/EventConnectorTestBase.cs.meta rename to Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs.meta diff --git a/Assets/Tests/Runtime/EventConnector.Tests.Runtime.asmdef b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef similarity index 93% rename from Assets/Tests/Runtime/EventConnector.Tests.Runtime.asmdef rename to Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef index 2f67dfc..45a7c4f 100644 --- a/Assets/Tests/Runtime/EventConnector.Tests.Runtime.asmdef +++ b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef @@ -1,5 +1,5 @@ { - "name": "EventConnector.Tests.Runtime", + "name": "UniFlow.Tests.Runtime", "references": [ "GUID:04f82f1ff3df44e29a1b2cce70510c34", "GUID:560b04d1a97f54a4e82edc0cbbb69285", diff --git a/Assets/Tests/Runtime/EventConnector.Tests.Runtime.asmdef.meta b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef.meta similarity index 100% rename from Assets/Tests/Runtime/EventConnector.Tests.Runtime.asmdef.meta rename to Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef.meta diff --git a/Assets/EventConnector.asmdef b/Assets/UniFlow.asmdef similarity index 77% rename from Assets/EventConnector.asmdef rename to Assets/UniFlow.asmdef index 41d7219..d69bf5e 100644 --- a/Assets/EventConnector.asmdef +++ b/Assets/UniFlow.asmdef @@ -1,11 +1,12 @@ { - "name": "EventConnector", + "name": "UniFlow", "references": [ "GUID:f06555f75b070af458a003d92f9efb00", + "GUID:aff632302a0b84b498c3f33f7639b4d3", "GUID:560b04d1a97f54a4e82edc0cbbb69285", + "GUID:f51ebe6a0ceec4240a699833d6309b23", "GUID:0d8beb7f090555447a6cf5ce9e54dbb4" ], - "optionalUnityReferences": [], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, diff --git a/Assets/EventConnector.asmdef.meta b/Assets/UniFlow.asmdef.meta similarity index 100% rename from Assets/EventConnector.asmdef.meta rename to Assets/UniFlow.asmdef.meta diff --git a/Assets/package.json b/Assets/package.json index 1f6fe05..b9e43aa 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,9 +1,9 @@ { - "name": "dev.monry.upm.eventconnector", - "displayName": "Event Connector", - "version": "0.0.4-preview.5", + "name": "dev.monry.uniflow", + "displayName": "UniFlow", + "version": "0.0.1-preview.1", "unity": "2019.2", - "description": "EventConnector is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", + "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { "name": "Tetsuya Mori", "url": "https://me.monry.dev/", @@ -13,11 +13,13 @@ "keywords": [], "category": "", "dependencies": { + "com.unity.simpleanimation": "1.0.0", "com.stevevermeulen.extenject": "9.1.0", - "jp.cysharp.unirx": "7.1.0" + "jp.cysharp.unirx": "7.1.0", + "jp.cysharp.unitask": "1.0.0" }, "repository": { "type": "git", - "url": "https://github.com/monry/EventConnector" + "url": "https://github.com/monry/UniFlow" } } diff --git a/Packages/manifest.json b/Packages/manifest.json index 015dbc3..64635d8 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -4,9 +4,10 @@ "name": "Unofficial Unity Package Manager Registry", "url": "https://upm-packages.dev", "scopes": [ + "com.unity.simpleanimation", "com.stevevermeulen", "jp.cysharp", - "dev.monry.upm" + "dev.monry" ] } ], @@ -23,6 +24,7 @@ "com.unity.multiplayer-hlapi": "1.0.2", "com.unity.package-manager-ui": "2.2.0", "com.unity.purchasing": "2.0.6", + "com.unity.simpleanimation": "1.0.0", "com.unity.test-framework": "1.0.13", "com.unity.textmeshpro": "2.0.1", "com.unity.timeline": "1.1.0", @@ -59,6 +61,7 @@ "com.unity.modules.video": "1.0.0", "com.unity.modules.vr": "1.0.0", "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" + "com.unity.modules.xr": "1.0.0", + "jp.cysharp.unitask": "1.0.0" } } diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index eff3339..0733b88 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -13,7 +13,7 @@ PlayerSettings: useOnDemandResources: 0 accelerometerFrequency: 60 companyName: DefaultCompany - productName: EventConnector + productName: UniFlow defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} From db3b767c1cfaecfe23fd42f73c5af79ad39d110c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:29:30 +0900 Subject: [PATCH 002/453] :name_badge: Rename menu name --- Assets/Scripts/Connector/AnimationEvent.cs | 2 +- Assets/Scripts/Connector/AnimatorTrigger.cs | 2 +- Assets/Scripts/Connector/AudioController.cs | 2 +- Assets/Scripts/Connector/AudioEvent.cs | 2 +- Assets/Scripts/Connector/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Empty.cs | 2 +- Assets/Scripts/Connector/Interval.cs | 2 +- Assets/Scripts/Connector/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/LoadSceneEvent.cs | 2 +- Assets/Scripts/Connector/MouseEvent.cs | 2 +- Assets/Scripts/Connector/ParticleEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollision2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollisionEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTriggerEvent.cs | 2 +- Assets/Scripts/Connector/PlayableController.cs | 2 +- Assets/Scripts/Connector/RectTransformEvent.cs | 2 +- Assets/Scripts/Connector/SimpleAnimationController.cs | 2 +- Assets/Scripts/Connector/TimelineSignal.cs | 2 +- Assets/Scripts/Connector/Timer.cs | 2 +- Assets/Scripts/Connector/TransformEvent.cs | 2 +- Assets/Scripts/Connector/UIBehaviourEventTrigger.cs | 2 +- Assets/Scripts/Connector/UnloadSceneEvent.cs | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 53bf67e..8a3417b 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { // AnimationEvent cannot fire to Component attaching to another GameObject [RequireComponent(typeof(Animator))] - [AddComponentMenu("Event Connector/AnimationEvent", 302)] + [AddComponentMenu("UniFlow/AnimationEvent", 302)] public class AnimationEvent : EventPublisher { private ISubject Subject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index 4fb2a99..ef9b8c0 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/AnimatorTrigger", 301)] + [AddComponentMenu("UniFlow/AnimatorTrigger", 301)] public class AnimatorTrigger : EventPublisher { [SerializeField] diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 1128e87..f75dc84 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/AudioController", 303)] + [AddComponentMenu("UniFlow/AudioController", 303)] public class AudioController : EventPublisher { [SerializeField] private AudioControlMethod audioControlMethod = default; diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index 5d3e5bf..f5027e5 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/AudioEvent", 304)] + [AddComponentMenu("UniFlow/AudioEvent", 304)] public class AudioEvent : EventPublisher { [SerializeField] private AudioEventType audioEventType = default; diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index cad7cd3..ea6b51b 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/CameraEvent", 104)] + [AddComponentMenu("UniFlow/CameraEvent", 104)] public class CameraEvent : EventPublisher { [SerializeField] private CameraEventType cameraEventType = default; diff --git a/Assets/Scripts/Connector/Empty.cs b/Assets/Scripts/Connector/Empty.cs index 902783a..b82f343 100644 --- a/Assets/Scripts/Connector/Empty.cs +++ b/Assets/Scripts/Connector/Empty.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/Empty", 10000)] + [AddComponentMenu("UniFlow/Empty", 10000)] public class Empty : EventPublisher { public override IObservable OnPublishAsObservable() => diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index 9b3b294..e53d0a0 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/Interval", 9001)] + [AddComponentMenu("UniFlow/Interval", 9001)] public class Interval : EventPublisher { [SerializeField] private float seconds = default; diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index a12d6c2..f4a1416 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/LifecycleEvent", 100)] + [AddComponentMenu("UniFlow/LifecycleEvent", 100)] public class LifecycleEvent : EventPublisher { [SerializeField] private LifecycleEventType lifecycleEventType = default; diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index c1c1053..321638b 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/LoadScene", 400)] + [AddComponentMenu("UniFlow/LoadScene", 400)] public class LoadSceneEvent : EventPublisher { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 5395c1e..5adc08a 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/MouseEvent", 106)] + [AddComponentMenu("UniFlow/MouseEvent", 106)] public class MouseEvent : EventPublisher { [SerializeField] private MouseEventType mouseEventType = default; diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index 829a955..b423a58 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/ParticleEvent", 105)] + [AddComponentMenu("UniFlow/ParticleEvent", 105)] public class ParticleEvent : EventPublisher { [SerializeField] private ParticleEventType particleEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 69e7024..97eec35 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/PhyticsCollision2DEvent", 201)] + [AddComponentMenu("UniFlow/PhyticsCollision2DEvent", 201)] public class PhysicsCollision2DEvent : EventPublisher { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index 513c317..7fae490 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/PhysicsCollisionEvent", 200)] + [AddComponentMenu("UniFlow/PhysicsCollisionEvent", 200)] public class PhysicsCollisionEvent : EventPublisher { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 7b3b528..23506d4 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/PhysicsTrigger2DEvent", 203)] + [AddComponentMenu("UniFlow/PhysicsTrigger2DEvent", 203)] public class PhysicsTrigger2DEvent : EventPublisher { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 957099d..7465f5c 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/PhyticsTriggerEvent", 202)] + [AddComponentMenu("UniFlow/PhyticsTriggerEvent", 202)] public class PhysicsTriggerEvent : EventPublisher { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 9ea2bb4..da3b91d 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/PlayableController", 305)] + [AddComponentMenu("UniFlow/PlayableController", 305)] public class PlayableController : EventPublisher { [SerializeField] private PlayableControlMethod playableControlMethod = default; diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index e73718e..ef80d4e 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/RectTransformEvent", 103)] + [AddComponentMenu("UniFlow/RectTransformEvent", 103)] public class RectTransformEvent : EventPublisher { [SerializeField] private RectTransformEventType rectTransformEventType = default; diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 710e5b8..ff33d30 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/SimpleAnimationController", 300)] + [AddComponentMenu("UniFlow/SimpleAnimationController", 300)] public class SimpleAnimationController : EventPublisher { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/TimelineSignal.cs index 5e58ab2..9c6e228 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/TimelineSignal.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector { // Timeline SignalReceiver cannot serialize [Serializable] class // So I provide overloads to construct TimelineEventData - [AddComponentMenu("Event Connector/TimelineSignal", 306)] + [AddComponentMenu("UniFlow/TimelineSignal", 306)] public class TimelineSignal : EventPublisher { private ISubject Subject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index 5e6a5b9..5cb0867 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/Timer", 9000)] + [AddComponentMenu("UniFlow/Timer", 9000)] public class Timer : EventPublisher { [SerializeField] private float seconds = default; diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index b6ca8a1..57269a1 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/TransformEvent", 102)] + [AddComponentMenu("UniFlow/TransformEvent", 102)] public class TransformEvent : EventPublisher { [SerializeField] private TransformEventType transformEventType = default; diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index 56d9ade..577ac50 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/UIBehaviourEventTrigger", 101)] + [AddComponentMenu("UniFlow/UIBehaviourEventTrigger", 101)] public class UIBehaviourEventTrigger : EventPublisher { [SerializeField] private EventTriggerType eventTriggerType = default; diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index 7749b47..b341f65 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("Event Connector/UnloadScene", 401)] + [AddComponentMenu("UniFlow/UnloadScene", 401)] public class UnloadSceneEvent : EventPublisher { [SerializeField] private List sceneNames = default; From b616085451788f9c96446a876abe685111e44ee2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:37:45 +0900 Subject: [PATCH 003/453] :memo: Update README.md --- Assets/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/README.md b/Assets/README.md index 998f418..5a1fdd5 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -1,8 +1,8 @@ # UniFlow -UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. +UniFlow is a library that can connect various Unity components without writing any C# script. -Processes such as "Tutorial that accepts user interaction" and "Waiting for the end of playback of Animation, Audio, Timeline, etc." can be implemented easily. +You can implement easily processes such as "Tutorial that accepts user interaction" and "Waiting for the end of playback of Animation, Audio, Timeline, etc.". ## Installation From d95b33b3226ab29f233dc19e2e833377c0b36099 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:37:55 +0900 Subject: [PATCH 004/453] :name_badge: Remove `Event` from Receivers --- Assets/Scripts/{EmptyEventReceiver.cs => EmptyReceiver.cs} | 2 +- .../{EmptyEventReceiver.cs.meta => EmptyReceiver.cs.meta} | 0 Assets/Scripts/EventPublisher.cs | 2 +- Assets/Scripts/{IEventReceiver.cs => IReceiver.cs} | 0 Assets/Scripts/{IEventReceiver.cs.meta => IReceiver.cs.meta} | 0 Assets/Scripts/{EventReceiver.cs => Receiver.cs} | 2 +- Assets/Scripts/{EventReceiver.cs.meta => Receiver.cs.meta} | 0 Assets/Tests/Runtime/Scripts/TestReceiver.cs | 2 +- 8 files changed, 4 insertions(+), 4 deletions(-) rename Assets/Scripts/{EmptyEventReceiver.cs => EmptyReceiver.cs} (74%) rename Assets/Scripts/{EmptyEventReceiver.cs.meta => EmptyReceiver.cs.meta} (100%) rename Assets/Scripts/{IEventReceiver.cs => IReceiver.cs} (100%) rename Assets/Scripts/{IEventReceiver.cs.meta => IReceiver.cs.meta} (100%) rename Assets/Scripts/{EventReceiver.cs => Receiver.cs} (57%) rename Assets/Scripts/{EventReceiver.cs.meta => Receiver.cs.meta} (100%) diff --git a/Assets/Scripts/EmptyEventReceiver.cs b/Assets/Scripts/EmptyReceiver.cs similarity index 74% rename from Assets/Scripts/EmptyEventReceiver.cs rename to Assets/Scripts/EmptyReceiver.cs index afd29be..ea50645 100644 --- a/Assets/Scripts/EmptyEventReceiver.cs +++ b/Assets/Scripts/EmptyReceiver.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public class EmptyEventReceiver : EventReceiver + public class EmptyReceiver : Receiver { public override void OnReceive(EventMessages eventMessages) { diff --git a/Assets/Scripts/EmptyEventReceiver.cs.meta b/Assets/Scripts/EmptyReceiver.cs.meta similarity index 100% rename from Assets/Scripts/EmptyEventReceiver.cs.meta rename to Assets/Scripts/EmptyReceiver.cs.meta diff --git a/Assets/Scripts/EventPublisher.cs b/Assets/Scripts/EventPublisher.cs index 78f8149..793877b 100644 --- a/Assets/Scripts/EventPublisher.cs +++ b/Assets/Scripts/EventPublisher.cs @@ -53,7 +53,7 @@ void IEventPublisher.Connect(IObservable source) .ToList() .ForEach(x => x.Connect(observable)); TargetConnectors - .OfType() + .OfType() .ToList() .ForEach(x => observable.Subscribe(x.OnReceive)); diff --git a/Assets/Scripts/IEventReceiver.cs b/Assets/Scripts/IReceiver.cs similarity index 100% rename from Assets/Scripts/IEventReceiver.cs rename to Assets/Scripts/IReceiver.cs diff --git a/Assets/Scripts/IEventReceiver.cs.meta b/Assets/Scripts/IReceiver.cs.meta similarity index 100% rename from Assets/Scripts/IEventReceiver.cs.meta rename to Assets/Scripts/IReceiver.cs.meta diff --git a/Assets/Scripts/EventReceiver.cs b/Assets/Scripts/Receiver.cs similarity index 57% rename from Assets/Scripts/EventReceiver.cs rename to Assets/Scripts/Receiver.cs index 7dcfee1..7413b18 100644 --- a/Assets/Scripts/EventReceiver.cs +++ b/Assets/Scripts/Receiver.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public abstract class EventReceiver : EventConnectable, IEventReceiver + public abstract class Receiver : EventConnectable, IReceiver { public abstract void OnReceive(EventMessages eventMessages); } diff --git a/Assets/Scripts/EventReceiver.cs.meta b/Assets/Scripts/Receiver.cs.meta similarity index 100% rename from Assets/Scripts/EventReceiver.cs.meta rename to Assets/Scripts/Receiver.cs.meta diff --git a/Assets/Tests/Runtime/Scripts/TestReceiver.cs b/Assets/Tests/Runtime/Scripts/TestReceiver.cs index f4a6f95..11516df 100644 --- a/Assets/Tests/Runtime/Scripts/TestReceiver.cs +++ b/Assets/Tests/Runtime/Scripts/TestReceiver.cs @@ -1,6 +1,6 @@ namespace UniFlow.Tests.Runtime { - public class TestReceiver : EventReceiver + public class TestReceiver : Receiver { public EventMessages SentEventMessages { get; private set; } public int ReceiveCount { get; private set; } From 7d9c5388d4202d1d4a60bb2ae2d841b05c0a696e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:41:03 +0900 Subject: [PATCH 005/453] :name_badge: Rename Receivers --- Assets/Scripts/IReceiver.cs | 2 +- Assets/Scripts/Receiver.meta | 3 +++ Assets/Scripts/{ => Receiver}/EmptyReceiver.cs | 4 ++-- Assets/Scripts/{ => Receiver}/EmptyReceiver.cs.meta | 0 Assets/Scripts/{Receiver.cs => ReceiverBase.cs} | 2 +- Assets/Scripts/{Receiver.cs.meta => ReceiverBase.cs.meta} | 0 Assets/Tests/Runtime/Scripts/TestReceiver.cs | 2 +- 7 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 Assets/Scripts/Receiver.meta rename Assets/Scripts/{ => Receiver}/EmptyReceiver.cs (64%) rename Assets/Scripts/{ => Receiver}/EmptyReceiver.cs.meta (100%) rename Assets/Scripts/{Receiver.cs => ReceiverBase.cs} (59%) rename Assets/Scripts/{Receiver.cs.meta => ReceiverBase.cs.meta} (100%) diff --git a/Assets/Scripts/IReceiver.cs b/Assets/Scripts/IReceiver.cs index ba065d0..d4ad1c1 100644 --- a/Assets/Scripts/IReceiver.cs +++ b/Assets/Scripts/IReceiver.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public interface IEventReceiver : IEventConnectable + public interface IReceiver : IEventConnectable { void OnReceive(EventMessages eventMessages); } diff --git a/Assets/Scripts/Receiver.meta b/Assets/Scripts/Receiver.meta new file mode 100644 index 0000000..85f919c --- /dev/null +++ b/Assets/Scripts/Receiver.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 81b04987def84653bd09df060b83bb0b +timeCreated: 1565329110 \ No newline at end of file diff --git a/Assets/Scripts/EmptyReceiver.cs b/Assets/Scripts/Receiver/EmptyReceiver.cs similarity index 64% rename from Assets/Scripts/EmptyReceiver.cs rename to Assets/Scripts/Receiver/EmptyReceiver.cs index ea50645..58edf81 100644 --- a/Assets/Scripts/EmptyReceiver.cs +++ b/Assets/Scripts/Receiver/EmptyReceiver.cs @@ -1,6 +1,6 @@ -namespace UniFlow +namespace UniFlow.Receiver { - public class EmptyReceiver : Receiver + public class EmptyReceiver : ReceiverBase { public override void OnReceive(EventMessages eventMessages) { diff --git a/Assets/Scripts/EmptyReceiver.cs.meta b/Assets/Scripts/Receiver/EmptyReceiver.cs.meta similarity index 100% rename from Assets/Scripts/EmptyReceiver.cs.meta rename to Assets/Scripts/Receiver/EmptyReceiver.cs.meta diff --git a/Assets/Scripts/Receiver.cs b/Assets/Scripts/ReceiverBase.cs similarity index 59% rename from Assets/Scripts/Receiver.cs rename to Assets/Scripts/ReceiverBase.cs index 7413b18..389fb98 100644 --- a/Assets/Scripts/Receiver.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public abstract class Receiver : EventConnectable, IReceiver + public abstract class ReceiverBase : EventConnectable, IReceiver { public abstract void OnReceive(EventMessages eventMessages); } diff --git a/Assets/Scripts/Receiver.cs.meta b/Assets/Scripts/ReceiverBase.cs.meta similarity index 100% rename from Assets/Scripts/Receiver.cs.meta rename to Assets/Scripts/ReceiverBase.cs.meta diff --git a/Assets/Tests/Runtime/Scripts/TestReceiver.cs b/Assets/Tests/Runtime/Scripts/TestReceiver.cs index 11516df..ff78d7d 100644 --- a/Assets/Tests/Runtime/Scripts/TestReceiver.cs +++ b/Assets/Tests/Runtime/Scripts/TestReceiver.cs @@ -1,6 +1,6 @@ namespace UniFlow.Tests.Runtime { - public class TestReceiver : Receiver + public class TestReceiver : ReceiverBase { public EventMessages SentEventMessages { get; private set; } public int ReceiveCount { get; private set; } From 883ec3dd8b004185cd212e2299cdd524ab017563 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:45:57 +0900 Subject: [PATCH 006/453] :name_badge: Rename to Connector from Publisher --- Assets/Scripts/Connector/AnimationEvent.cs | 4 ++-- Assets/Scripts/Connector/AnimatorTrigger.cs | 4 ++-- Assets/Scripts/Connector/AudioController.cs | 4 ++-- Assets/Scripts/Connector/AudioEvent.cs | 4 ++-- Assets/Scripts/Connector/CameraEvent.cs | 4 ++-- Assets/Scripts/Connector/Empty.cs | 4 ++-- Assets/Scripts/Connector/Interval.cs | 4 ++-- Assets/Scripts/Connector/LifecycleEvent.cs | 4 ++-- Assets/Scripts/Connector/LoadSceneEvent.cs | 4 ++-- Assets/Scripts/Connector/MouseEvent.cs | 4 ++-- Assets/Scripts/Connector/ParticleEvent.cs | 4 ++-- .../Scripts/Connector/PhysicsCollision2DEvent.cs | 4 ++-- Assets/Scripts/Connector/PhysicsCollisionEvent.cs | 4 ++-- Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs | 4 ++-- Assets/Scripts/Connector/PhysicsTriggerEvent.cs | 4 ++-- Assets/Scripts/Connector/PlayableController.cs | 4 ++-- Assets/Scripts/Connector/RectTransformEvent.cs | 4 ++-- .../Scripts/Connector/SimpleAnimationController.cs | 4 ++-- Assets/Scripts/Connector/TimelineSignal.cs | 4 ++-- Assets/Scripts/Connector/Timer.cs | 4 ++-- Assets/Scripts/Connector/TransformEvent.cs | 4 ++-- .../Scripts/Connector/UIBehaviourEventTrigger.cs | 4 ++-- Assets/Scripts/Connector/UnloadSceneEvent.cs | 4 ++-- .../{EventPublisher.cs => ConnectorBase.cs} | 10 +++++----- ...ventPublisher.cs.meta => ConnectorBase.cs.meta} | 0 Assets/Scripts/{EventType.cs => ConnectorType.cs} | 2 +- .../{EventType.cs.meta => ConnectorType.cs.meta} | 0 Assets/Scripts/EventMessages.cs | 14 +++++++------- .../Scripts/{IEventPublisher.cs => IConnector.cs} | 2 +- ...{IEventPublisher.cs.meta => IConnector.cs.meta} | 0 .../Receiver/{EmptyReceiver.cs => Empty.cs} | 2 +- .../{EmptyReceiver.cs.meta => Empty.cs.meta} | 0 Assets/Tests/Runtime/Scripts/AllTest.cs | 14 +++++++------- Assets/Tests/Runtime/Scripts/AnimationEventTest.cs | 4 ++-- .../Tests/Runtime/Scripts/AnimatorTriggerTest.cs | 6 +++--- .../Tests/Runtime/Scripts/AudioControllerTest.cs | 6 +++--- Assets/Tests/Runtime/Scripts/AudioEventTest.cs | 14 +++++++------- Assets/Tests/Runtime/Scripts/CameraEventTest.cs | 12 ++++++------ Assets/Tests/Runtime/Scripts/IntervalTest.cs | 6 +++--- Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs | 4 ++-- .../Runtime/Scripts/PlayableControllerTest.cs | 6 +++--- Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs | 4 ++-- Assets/Tests/Runtime/Scripts/TimerTest.cs | 6 +++--- .../Tests/Runtime/Scripts/UIBehaviourEventTest.cs | 2 +- 44 files changed, 103 insertions(+), 103 deletions(-) rename Assets/Scripts/{EventPublisher.cs => ConnectorBase.cs} (83%) rename Assets/Scripts/{EventPublisher.cs.meta => ConnectorBase.cs.meta} (100%) rename Assets/Scripts/{EventType.cs => ConnectorType.cs} (95%) rename Assets/Scripts/{EventType.cs.meta => ConnectorType.cs.meta} (100%) rename Assets/Scripts/{IEventPublisher.cs => IConnector.cs} (74%) rename Assets/Scripts/{IEventPublisher.cs.meta => IConnector.cs.meta} (100%) rename Assets/Scripts/Receiver/{EmptyReceiver.cs => Empty.cs} (77%) rename Assets/Scripts/Receiver/{EmptyReceiver.cs.meta => Empty.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 8a3417b..024412a 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -8,14 +8,14 @@ namespace UniFlow.Connector // AnimationEvent cannot fire to Component attaching to another GameObject [RequireComponent(typeof(Animator))] [AddComponentMenu("UniFlow/AnimationEvent", 302)] - public class AnimationEvent : EventPublisher + public class AnimationEvent : ConnectorBase { private ISubject Subject { get; } = new Subject(); public override IObservable OnPublishAsObservable() => Subject .Take(1) - .Select(x => EventMessage.Create(EventType.AnimationEvent, this, x)); + .Select(x => EventMessage.Create(ConnectorType.AnimationEvent, this, x)); /// /// Invoked from AnimationEvent diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index ef9b8c0..7a9b376 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/AnimatorTrigger", 301)] - public class AnimatorTrigger : EventPublisher + public class AnimatorTrigger : ConnectorBase { [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] @@ -25,7 +25,7 @@ public override IObservable OnPublishAsObservable() => observer => { Animator.SetTrigger(TriggerId); - observer.OnNext(EventMessage.Create(EventType.AnimatorTrigger, Animator, AnimatorTriggerEventData.Create(TriggerName))); + observer.OnNext(EventMessage.Create(ConnectorType.AnimatorTrigger, Animator, AnimatorTriggerEventData.Create(TriggerName))); return Disposable; } ); diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index f75dc84..5273c44 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/AudioController", 303)] - public class AudioController : EventPublisher + public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; [SerializeField] @@ -41,7 +41,7 @@ public override IObservable OnPublishAsObservable() => observer => { InvokeAudioSourceMethod(); - observer.OnNext(EventMessage.Create(EventType.AudioController, AudioSource, AudioControllerEventData.Create(AudioControlMethod))); + observer.OnNext(EventMessage.Create(ConnectorType.AudioController, AudioSource, AudioControllerEventData.Create(AudioControlMethod))); return Disposable; } ); diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index f5027e5..e8a3b3a 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/AudioEvent", 304)] - public class AudioEvent : EventPublisher + public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; [SerializeField] @@ -32,7 +32,7 @@ private AudioSource AudioSource public override IObservable OnPublishAsObservable() => OnAudioEventAsObservable() - .Select(x => EventMessage.Create(EventType.AudioEvent, AudioSource, AudioEventData.Create(x))); + .Select(x => EventMessage.Create(ConnectorType.AudioEvent, AudioSource, AudioEventData.Create(x))); private IObservable OnAudioEventAsObservable() { diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index ea6b51b..74cb908 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/CameraEvent", 104)] - public class CameraEvent : EventPublisher + public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class CameraEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(_ => EventMessage.Create(EventType.CameraEvent, Component, CameraEventData.Create(CameraEventType))); + .Select(_ => EventMessage.Create(ConnectorType.CameraEvent, Component, CameraEventData.Create(CameraEventType))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/Empty.cs b/Assets/Scripts/Connector/Empty.cs index b82f343..b2e55d0 100644 --- a/Assets/Scripts/Connector/Empty.cs +++ b/Assets/Scripts/Connector/Empty.cs @@ -5,9 +5,9 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/Empty", 10000)] - public class Empty : EventPublisher + public class Empty : ConnectorBase { public override IObservable OnPublishAsObservable() => - Observable.Return(EventMessage.Create(EventType.Empty, this)); + Observable.Return(EventMessage.Create(ConnectorType.Empty, this)); } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index e53d0a0..e6729f9 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/Interval", 9001)] - public class Interval : EventPublisher + public class Interval : ConnectorBase { [SerializeField] private float seconds = default; private float Seconds => seconds; @@ -13,6 +13,6 @@ public class Interval : EventPublisher public override IObservable OnPublishAsObservable() => Observable .Interval(TimeSpan.FromSeconds(Seconds)) - .Select(_ => EventMessage.Create(EventType.Interval, this, Seconds)); + .Select(_ => EventMessage.Create(ConnectorType.Interval, this, Seconds)); } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index f4a1416..6d53f35 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/LifecycleEvent", 100)] - public class LifecycleEvent : EventPublisher + public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = default; [SerializeField] @@ -22,7 +22,7 @@ public class LifecycleEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(_ => EventMessage.Create(EventType.LifecycleEvent, Component, LifecycleEventData.Create(LifecycleEventType))); + .Select(_ => EventMessage.Create(ConnectorType.LifecycleEvent, Component, LifecycleEventData.Create(LifecycleEventType))); private void Awake() { diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index 321638b..d395701 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/LoadScene", 400)] - public class LoadSceneEvent : EventPublisher + public class LoadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; private IEnumerable SceneNames => sceneNames; @@ -17,7 +17,7 @@ public override IObservable OnPublishAsObservable() { return LoadScenes() .ToObservable() - .Select(_ => EventMessage.Create(EventType.LoadScene, this, SceneNames)); + .Select(_ => EventMessage.Create(ConnectorType.LoadScene, this, SceneNames)); } private async UniTask LoadScenes() diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 5adc08a..1a0383c 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/MouseEvent", 106)] - public class MouseEvent : EventPublisher + public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class MouseEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(_ => EventMessage.Create(EventType.MouseEvent, Component, MouseEventData.Create(MouseEventType))); + .Select(_ => EventMessage.Create(ConnectorType.MouseEvent, Component, MouseEventData.Create(MouseEventType))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index b423a58..8d97eda 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/ParticleEvent", 105)] - public class ParticleEvent : EventPublisher + public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class ParticleEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(x => EventMessage.Create(EventType.ParticleEvent, Component, ParticleEventData.Create(ParticleEventType, x))); + .Select(x => EventMessage.Create(ConnectorType.ParticleEvent, Component, ParticleEventData.Create(ParticleEventType, x))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 97eec35..4123e4b 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/PhyticsCollision2DEvent", 201)] - public class PhysicsCollision2DEvent : EventPublisher + public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class PhysicsCollision2DEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(x => EventMessage.Create(EventType.PhysicsCollision2DEvent, Component, PhysicsCollision2DEventData.Create(PhysicsCollision2DEventType, x))); + .Select(x => EventMessage.Create(ConnectorType.PhysicsCollision2DEvent, Component, PhysicsCollision2DEventData.Create(PhysicsCollision2DEventType, x))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index 7fae490..e39def4 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/PhysicsCollisionEvent", 200)] - public class PhysicsCollisionEvent : EventPublisher + public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class PhysicsCollisionEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(x => EventMessage.Create(EventType.PhysicsCollisionEvent, Component, PhysicsCollisionEventData.Create(PhysicsCollisionEventType, x))); + .Select(x => EventMessage.Create(ConnectorType.PhysicsCollisionEvent, Component, PhysicsCollisionEventData.Create(PhysicsCollisionEventType, x))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 23506d4..6944650 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/PhysicsTrigger2DEvent", 203)] - public class PhysicsTrigger2DEvent : EventPublisher + public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class PhysicsTrigger2DEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(x => EventMessage.Create(EventType.PhysicsTrigger2DEvent, Component, PhysicsTrigger2DEventData.Create(PhysicsTrigger2DEventType, x))); + .Select(x => EventMessage.Create(ConnectorType.PhysicsTrigger2DEvent, Component, PhysicsTrigger2DEventData.Create(PhysicsTrigger2DEventType, x))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 7465f5c..7139b49 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/PhyticsTriggerEvent", 202)] - public class PhysicsTriggerEvent : EventPublisher + public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class PhysicsTriggerEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(x => EventMessage.Create(EventType.PhysicsTriggerEvent, Component, PhysicsTriggerEventData.Create(PhysicsTriggerEventType, x))); + .Select(x => EventMessage.Create(ConnectorType.PhysicsTriggerEvent, Component, PhysicsTriggerEventData.Create(PhysicsTriggerEventType, x))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index da3b91d..b0d018c 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/PlayableController", 305)] - public class PlayableController : EventPublisher + public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = default; [SerializeField] @@ -45,7 +45,7 @@ public override IObservable OnPublishAsObservable() => observer => { InvokePlayableDirectorMethod(); - observer.OnNext(EventMessage.Create(EventType.PlayableController, PlayableDirector, PlayableControllerEventData.Create(PlayableControlMethod))); + observer.OnNext(EventMessage.Create(ConnectorType.PlayableController, PlayableDirector, PlayableControllerEventData.Create(PlayableControlMethod))); return Disposable; } ); diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index ef80d4e..923d066 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/RectTransformEvent", 103)] - public class RectTransformEvent : EventPublisher + public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class RectTransformEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(_ => EventMessage.Create(EventType.RectTransformEvent, Component, RectTransformEventData.Create(RectTransformEventType))); + .Select(_ => EventMessage.Create(ConnectorType.RectTransformEvent, Component, RectTransformEventData.Create(RectTransformEventType))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index ff33d30..da92f0f 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/SimpleAnimationController", 300)] - public class SimpleAnimationController : EventPublisher + public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; [SerializeField] @@ -42,7 +42,7 @@ public override IObservable OnPublishAsObservable() => observer => { InvokeSimpleAnimationMethod(); - observer.OnNext(EventMessage.Create(EventType.SimpleAnimationController, SimpleAnimation, SimpleAnimationControllerEventData.Create(SimpleAnimationControlMethod))); + observer.OnNext(EventMessage.Create(ConnectorType.SimpleAnimationController, SimpleAnimation, SimpleAnimationControllerEventData.Create(SimpleAnimationControlMethod))); return Disposable; } ); diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/TimelineSignal.cs index 9c6e228..8c3caeb 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/TimelineSignal.cs @@ -10,14 +10,14 @@ namespace UniFlow.Connector // Timeline SignalReceiver cannot serialize [Serializable] class // So I provide overloads to construct TimelineEventData [AddComponentMenu("UniFlow/TimelineSignal", 306)] - public class TimelineSignal : EventPublisher + public class TimelineSignal : ConnectorBase { private ISubject Subject { get; } = new Subject(); public override IObservable OnPublishAsObservable() => Subject .Take(1) - .Select(x => EventMessage.Create(EventType.TimelineSignal, this, x)); + .Select(x => EventMessage.Create(ConnectorType.TimelineSignal, this, x)); [UsedImplicitly] public void Dispatch() diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index 5cb0867..ff310d5 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/Timer", 9000)] - public class Timer : EventPublisher + public class Timer : ConnectorBase { [SerializeField] private float seconds = default; private float Seconds => seconds; @@ -13,6 +13,6 @@ public class Timer : EventPublisher public override IObservable OnPublishAsObservable() => Observable .Timer(TimeSpan.FromSeconds(Seconds)) - .Select(_ => EventMessage.Create(EventType.Timer, this, Seconds)); + .Select(_ => EventMessage.Create(ConnectorType.Timer, this, Seconds)); } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 57269a1..62ae537 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/TransformEvent", 102)] - public class TransformEvent : EventPublisher + public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = default; [SerializeField] @@ -19,7 +19,7 @@ public class TransformEvent : EventPublisher public override IObservable OnPublishAsObservable() => OnEventAsObservable() - .Select(_ => EventMessage.Create(EventType.TransformEvent, Component, TransformEventData.Create(TransformEventType))); + .Select(_ => EventMessage.Create(ConnectorType.TransformEvent, Component, TransformEventData.Create(TransformEventType))); private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index 577ac50..b9c89a7 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/UIBehaviourEventTrigger", 101)] - public class UIBehaviourEventTrigger : EventPublisher + public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = default; private EventTriggerType EventTriggerType => eventTriggerType; @@ -19,7 +19,7 @@ public class UIBehaviourEventTrigger : EventPublisher public override IObservable OnPublishAsObservable() => OnEventTriggerAsObservable() - .Select(x => EventMessage.Create(EventType.UIBehaviourEventTrigger, UIBehaviour, x)); + .Select(x => EventMessage.Create(ConnectorType.UIBehaviourEventTrigger, UIBehaviour, x)); private IObservable OnEventTriggerAsObservable() { diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index b341f65..7b25a1e 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector { [AddComponentMenu("UniFlow/UnloadScene", 401)] - public class UnloadSceneEvent : EventPublisher + public class UnloadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; private IEnumerable SceneNames => sceneNames; @@ -17,7 +17,7 @@ public override IObservable OnPublishAsObservable() { return UnloadScenes() .ToObservable() - .Select(_ => EventMessage.Create(EventType.UnloadScene, this, SceneNames)); + .Select(_ => EventMessage.Create(ConnectorType.UnloadScene, this, SceneNames)); } private async UniTask UnloadScenes() diff --git a/Assets/Scripts/EventPublisher.cs b/Assets/Scripts/ConnectorBase.cs similarity index 83% rename from Assets/Scripts/EventPublisher.cs rename to Assets/Scripts/ConnectorBase.cs index 793877b..dfe0512 100644 --- a/Assets/Scripts/EventPublisher.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -7,7 +7,7 @@ namespace UniFlow { - public abstract class EventPublisher : EventConnectable, IEventPublisher + public abstract class ConnectorBase : EventConnectable, IConnector { [SerializeField] [Tooltip("Specify instances of IEventConnectable directly")] private List targetConnectorInstances = default; @@ -36,20 +36,20 @@ protected virtual void Start() { if (ActAsTrigger) { - ((IEventPublisher) this).Connect(Observable.Return(default)); + ((IConnector) this).Connect(Observable.Return(default)); } } - void IEventPublisher.Connect(IObservable source) + void IConnector.Connect(IObservable source) { var observable = source .SelectMany( - eventMessages => (this as IEventPublisher) + eventMessages => (this as IConnector) .OnPublishAsObservable() .Select(x => (eventMessages ?? EventMessages.Create()).Append(x)) ); TargetConnectors - .OfType() + .OfType() .ToList() .ForEach(x => x.Connect(observable)); TargetConnectors diff --git a/Assets/Scripts/EventPublisher.cs.meta b/Assets/Scripts/ConnectorBase.cs.meta similarity index 100% rename from Assets/Scripts/EventPublisher.cs.meta rename to Assets/Scripts/ConnectorBase.cs.meta diff --git a/Assets/Scripts/EventType.cs b/Assets/Scripts/ConnectorType.cs similarity index 95% rename from Assets/Scripts/EventType.cs rename to Assets/Scripts/ConnectorType.cs index ec0290c..6bb4fdb 100644 --- a/Assets/Scripts/EventType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public enum EventType + public enum ConnectorType { LifecycleEvent = 1, UIBehaviourEventTrigger, diff --git a/Assets/Scripts/EventType.cs.meta b/Assets/Scripts/ConnectorType.cs.meta similarity index 100% rename from Assets/Scripts/EventType.cs.meta rename to Assets/Scripts/ConnectorType.cs.meta diff --git a/Assets/Scripts/EventMessages.cs b/Assets/Scripts/EventMessages.cs index 8e979f9..086f29a 100644 --- a/Assets/Scripts/EventMessages.cs +++ b/Assets/Scripts/EventMessages.cs @@ -31,20 +31,20 @@ public static EventMessages Create() [PublicAPI] public struct EventMessage { - private EventMessage(EventType eventType, object sender, object eventData) + private EventMessage(ConnectorType connectorType, object sender, object data) { - EventType = eventType; + ConnectorType = connectorType; Sender = sender; - EventData = eventData; + Data = data; } - public EventType EventType { get; } + public ConnectorType ConnectorType { get; } public object Sender { get; } - public object EventData { get; } + public object Data { get; } - public static EventMessage Create(EventType eventType, object sender, object eventData = default) + public static EventMessage Create(ConnectorType connectorType, object sender, object data = default) { - return new EventMessage(eventType, sender, eventData); + return new EventMessage(connectorType, sender, data); } } } \ No newline at end of file diff --git a/Assets/Scripts/IEventPublisher.cs b/Assets/Scripts/IConnector.cs similarity index 74% rename from Assets/Scripts/IEventPublisher.cs rename to Assets/Scripts/IConnector.cs index 68967ae..3cc99ea 100644 --- a/Assets/Scripts/IEventPublisher.cs +++ b/Assets/Scripts/IConnector.cs @@ -2,7 +2,7 @@ namespace UniFlow { - public interface IEventPublisher : IEventConnectable + public interface IConnector : IEventConnectable { IObservable OnPublishAsObservable(); void Connect(IObservable source); diff --git a/Assets/Scripts/IEventPublisher.cs.meta b/Assets/Scripts/IConnector.cs.meta similarity index 100% rename from Assets/Scripts/IEventPublisher.cs.meta rename to Assets/Scripts/IConnector.cs.meta diff --git a/Assets/Scripts/Receiver/EmptyReceiver.cs b/Assets/Scripts/Receiver/Empty.cs similarity index 77% rename from Assets/Scripts/Receiver/EmptyReceiver.cs rename to Assets/Scripts/Receiver/Empty.cs index 58edf81..b2e4463 100644 --- a/Assets/Scripts/Receiver/EmptyReceiver.cs +++ b/Assets/Scripts/Receiver/Empty.cs @@ -1,6 +1,6 @@ namespace UniFlow.Receiver { - public class EmptyReceiver : ReceiverBase + public class Empty : ReceiverBase { public override void OnReceive(EventMessages eventMessages) { diff --git a/Assets/Scripts/Receiver/EmptyReceiver.cs.meta b/Assets/Scripts/Receiver/Empty.cs.meta similarity index 100% rename from Assets/Scripts/Receiver/EmptyReceiver.cs.meta rename to Assets/Scripts/Receiver/Empty.cs.meta diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index 004fc62..d23e3c9 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -50,14 +50,14 @@ private void AssertAll(EventMessages eventMessages) Assert.AreEqual(5, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].EventData); + Assert.IsInstanceOf(eventMessages[1].Data); Assert.IsInstanceOf(eventMessages[2].Sender); - Assert.IsInstanceOf(eventMessages[2].EventData); - var animationEvent = eventMessages[2].EventData as UnityEngine.AnimationEvent; + Assert.IsInstanceOf(eventMessages[2].Data); + var animationEvent = eventMessages[2].Data as UnityEngine.AnimationEvent; Assert.NotNull(animationEvent); Assert.AreEqual(222.2f, animationEvent.floatParameter); Assert.AreEqual(333, animationEvent.intParameter); @@ -66,11 +66,11 @@ private void AssertAll(EventMessages eventMessages) Assert.AreEqual("All", animationEvent.objectReferenceParameter.name); Assert.IsInstanceOf(eventMessages[3].Sender); - Assert.IsInstanceOf(eventMessages[3].EventData); + Assert.IsInstanceOf(eventMessages[3].Data); Assert.IsInstanceOf(eventMessages[4].Sender); - Assert.IsInstanceOf(eventMessages[4].EventData); - var timelineEvent = eventMessages[4].EventData as TimelineEventData; + Assert.IsInstanceOf(eventMessages[4].Data); + var timelineEvent = eventMessages[4].Data as TimelineEventData; Assert.NotNull(timelineEvent); Assert.AreEqual(999, timelineEvent.IntParameter); HasAssert = true; diff --git a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs index 47e855f..c95e4d7 100644 --- a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs @@ -25,8 +25,8 @@ private void AssertAnimationEvent(EventMessages eventMessages) Assert.AreEqual(1, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); - var animationEvent = eventMessages[0].EventData as UnityEngine.AnimationEvent; + Assert.IsInstanceOf(eventMessages[0].Data); + var animationEvent = eventMessages[0].Data as UnityEngine.AnimationEvent; Assert.NotNull(animationEvent); Assert.AreEqual(11.1f, animationEvent.floatParameter); Assert.AreEqual(22, animationEvent.intParameter); diff --git a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs index 80023b8..36919a4 100644 --- a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs @@ -26,11 +26,11 @@ private void AssertAnimatorTrigger(EventMessages eventMessages) Assert.AreEqual(2, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].EventData); - var animationEvent = eventMessages[1].EventData as UnityEngine.AnimationEvent; + Assert.IsInstanceOf(eventMessages[1].Data); + var animationEvent = eventMessages[1].Data as UnityEngine.AnimationEvent; Assert.NotNull(animationEvent); Assert.AreEqual(22.2f, animationEvent.floatParameter); Assert.AreEqual(33, animationEvent.intParameter); diff --git a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs index 5a465bf..08d309d 100644 --- a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs @@ -138,11 +138,11 @@ private void AssertAudioEvent(EventMessages eventMessages, AudioControlMethod au Assert.AreEqual(2, eventMessages.Count); Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].EventData); + Assert.IsInstanceOf(eventMessages[1].Data); - Assert.NotNull(eventMessages[1].EventData); + Assert.NotNull(eventMessages[1].Data); - Assert.AreEqual(audioControlMethod, ((AudioControllerEventData) eventMessages[1].EventData).AudioControlMethod); + Assert.AreEqual(audioControlMethod, ((AudioControllerEventData) eventMessages[1].Data).AudioControlMethod); callback(eventMessages[1].Sender as AudioSource); diff --git a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs index 5da6bab..3ccb80f 100644 --- a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs @@ -182,10 +182,10 @@ public IEnumerator ComplexEvent() { Assert.NotNull(em); Assert.AreEqual(4, em.Count); - Assert.AreEqual(AudioEventType.Play, ((AudioEventData) em[0].EventData).EventType); - Assert.AreEqual(AudioEventType.Pause, ((AudioEventData) em[1].EventData).EventType); - Assert.AreEqual(AudioEventType.UnPause, ((AudioEventData) em[2].EventData).EventType); - Assert.AreEqual(AudioEventType.Stop, ((AudioEventData) em[3].EventData).EventType); + Assert.AreEqual(AudioEventType.Play, ((AudioEventData) em[0].Data).EventType); + Assert.AreEqual(AudioEventType.Pause, ((AudioEventData) em[1].Data).EventType); + Assert.AreEqual(AudioEventType.UnPause, ((AudioEventData) em[2].Data).EventType); + Assert.AreEqual(AudioEventType.Stop, ((AudioEventData) em[3].Data).EventType); HasAssert = true; }, () => @@ -212,11 +212,11 @@ private void AssertAudioEvent(EventMessages eventMessages, AudioEventType audioE Assert.AreEqual(receiveCount, Object.FindObjectOfType().ReceiveCount); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); - Assert.NotNull(eventMessages[0].EventData); + Assert.NotNull(eventMessages[0].Data); - Assert.AreEqual(audioEventType, ((AudioEventData) eventMessages[0].EventData).EventType); + Assert.AreEqual(audioEventType, ((AudioEventData) eventMessages[0].Data).EventType); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs index ee105a1..ccdf6ff 100644 --- a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs @@ -61,11 +61,11 @@ private void AssertCameraBecomeVisibleEvent(EventMessages eventMessages) Assert.AreEqual(1, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); - Assert.NotNull(eventMessages[0].EventData); + Assert.NotNull(eventMessages[0].Data); - Assert.AreEqual(CameraEventType.BecomeVisible, ((CameraEventData) eventMessages[0].EventData).EventType); + Assert.AreEqual(CameraEventType.BecomeVisible, ((CameraEventData) eventMessages[0].Data).EventType); HasAssert = true; } @@ -76,11 +76,11 @@ private void AssertCameraBecomeInvisibleEvent(EventMessages eventMessages) Assert.AreEqual(1, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); - Assert.NotNull(eventMessages[0].EventData); + Assert.NotNull(eventMessages[0].Data); - Assert.AreEqual(CameraEventType.BecomeInvisible, ((CameraEventData) eventMessages[0].EventData).EventType); + Assert.AreEqual(CameraEventType.BecomeInvisible, ((CameraEventData) eventMessages[0].Data).EventType); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/IntervalTest.cs b/Assets/Tests/Runtime/Scripts/IntervalTest.cs index 491823c..1d19378 100644 --- a/Assets/Tests/Runtime/Scripts/IntervalTest.cs +++ b/Assets/Tests/Runtime/Scripts/IntervalTest.cs @@ -24,10 +24,10 @@ private void AssertInterval(EventMessages eventMessages) Assert.AreEqual(2, UnityEngine.Object.FindObjectOfType().ReceiveCount); Assert.AreEqual(1, eventMessages.Count); - Assert.AreEqual(EventType.Interval, eventMessages[0].EventType); + Assert.AreEqual(ConnectorType.Interval, eventMessages[0].ConnectorType); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); - Assert.AreEqual(1.0f, eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); + Assert.AreEqual(1.0f, eventMessages[0].Data); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs index abf097e..1cabda8 100644 --- a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs @@ -102,9 +102,9 @@ private void AssertLifecycleEvent(EventMessages eventMessages) Assert.GreaterOrEqual(eventMessages.Count, 1); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); - Assert.AreEqual(CurrentLifecycleEventType, ((LifecycleEventData) eventMessages[0].EventData).EventType); + Assert.AreEqual(CurrentLifecycleEventType, ((LifecycleEventData) eventMessages[0].Data).EventType); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index 31a81a0..2639aa8 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -27,11 +27,11 @@ private void AssertPlayableController(EventMessages eventMessages) Assert.AreEqual(2, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].EventData); - var timelineEvent = eventMessages[1].EventData as TimelineEventData; + Assert.IsInstanceOf(eventMessages[1].Data); + var timelineEvent = eventMessages[1].Data as TimelineEventData; Assert.NotNull(timelineEvent); Assert.AreEqual("PlayableControllerTest", timelineEvent.StringParameter); HasAssert = true; diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 361a088..717434c 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -25,8 +25,8 @@ private void AssertTimelineSignal(EventMessages eventMessages) Assert.AreEqual(1, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); - var timelineEvent = eventMessages[0].EventData as TimelineEventData; + Assert.IsInstanceOf(eventMessages[0].Data); + var timelineEvent = eventMessages[0].Data as TimelineEventData; Assert.NotNull(timelineEvent); Assert.AreEqual("TimelineSignalTest", timelineEvent.StringParameter); HasAssert = true; diff --git a/Assets/Tests/Runtime/Scripts/TimerTest.cs b/Assets/Tests/Runtime/Scripts/TimerTest.cs index 3bf3824..6fc0d87 100644 --- a/Assets/Tests/Runtime/Scripts/TimerTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimerTest.cs @@ -23,10 +23,10 @@ private void AssertTimer(EventMessages eventMessages) { Assert.AreEqual(1, eventMessages.Count); - Assert.AreEqual(EventType.Timer, eventMessages[0].EventType); + Assert.AreEqual(ConnectorType.Timer, eventMessages[0].ConnectorType); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); - Assert.AreEqual(1.0f, eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); + Assert.AreEqual(1.0f, eventMessages[0].Data); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs index 16f7096..2599810 100644 --- a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs @@ -29,7 +29,7 @@ private void AssertUIBehaviourEventTrigger(EventMessages eventMessages) Assert.AreEqual(1, eventMessages.Count); Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].EventData); + Assert.IsInstanceOf(eventMessages[0].Data); HasAssert = true; } } From 4ccf0cf8297aa9dc68c741427588986575d14b32 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:48:39 +0900 Subject: [PATCH 007/453] :recycle: Split structs --- Assets/Scripts/EventMessage.cs | 24 ++++++++++++++++++++++++ Assets/Scripts/EventMessage.cs.meta | 3 +++ Assets/Scripts/EventMessages.cs | 20 -------------------- 3 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 Assets/Scripts/EventMessage.cs create mode 100644 Assets/Scripts/EventMessage.cs.meta diff --git a/Assets/Scripts/EventMessage.cs b/Assets/Scripts/EventMessage.cs new file mode 100644 index 0000000..c8ccd39 --- /dev/null +++ b/Assets/Scripts/EventMessage.cs @@ -0,0 +1,24 @@ +using JetBrains.Annotations; + +namespace UniFlow +{ + [PublicAPI] + public struct EventMessage + { + private EventMessage(ConnectorType connectorType, object sender, object data) + { + ConnectorType = connectorType; + Sender = sender; + Data = data; + } + + public ConnectorType ConnectorType { get; } + public object Sender { get; } + public object Data { get; } + + public static EventMessage Create(ConnectorType connectorType, object sender, object data = default) + { + return new EventMessage(connectorType, sender, data); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/EventMessage.cs.meta b/Assets/Scripts/EventMessage.cs.meta new file mode 100644 index 0000000..5104b80 --- /dev/null +++ b/Assets/Scripts/EventMessage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1c21c6b5d290484eaada1c1fa2f9ed93 +timeCreated: 1565329674 \ No newline at end of file diff --git a/Assets/Scripts/EventMessages.cs b/Assets/Scripts/EventMessages.cs index 086f29a..8ee7ab1 100644 --- a/Assets/Scripts/EventMessages.cs +++ b/Assets/Scripts/EventMessages.cs @@ -27,24 +27,4 @@ public static EventMessages Create() return new EventMessages(); } } - - [PublicAPI] - public struct EventMessage - { - private EventMessage(ConnectorType connectorType, object sender, object data) - { - ConnectorType = connectorType; - Sender = sender; - Data = data; - } - - public ConnectorType ConnectorType { get; } - public object Sender { get; } - public object Data { get; } - - public static EventMessage Create(ConnectorType connectorType, object sender, object data = default) - { - return new EventMessage(connectorType, sender, data); - } - } } \ No newline at end of file From b4dfe629625bb21628c4a1736861b2550e5e837d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:48:52 +0900 Subject: [PATCH 008/453] :name_badge: Rename base classes --- Assets/Scripts/ConnectableBase.cs | 8 ++++++++ ...ntConnectable.cs.meta => ConnectableBase.cs.meta} | 0 Assets/Scripts/ConnectorBase.cs | 12 ++++++------ Assets/Scripts/EventConnectable.cs | 8 -------- Assets/Scripts/IConnectable.cs | 6 ++++++ ...EventConnectable.cs.meta => IConnectable.cs.meta} | 0 Assets/Scripts/IConnector.cs | 2 +- Assets/Scripts/IEventConnectable.cs | 6 ------ Assets/Scripts/IReceiver.cs | 2 +- Assets/Scripts/ReceiverBase.cs | 2 +- 10 files changed, 23 insertions(+), 23 deletions(-) create mode 100644 Assets/Scripts/ConnectableBase.cs rename Assets/Scripts/{EventConnectable.cs.meta => ConnectableBase.cs.meta} (100%) delete mode 100644 Assets/Scripts/EventConnectable.cs create mode 100644 Assets/Scripts/IConnectable.cs rename Assets/Scripts/{IEventConnectable.cs.meta => IConnectable.cs.meta} (100%) delete mode 100644 Assets/Scripts/IEventConnectable.cs diff --git a/Assets/Scripts/ConnectableBase.cs b/Assets/Scripts/ConnectableBase.cs new file mode 100644 index 0000000..0047419 --- /dev/null +++ b/Assets/Scripts/ConnectableBase.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace UniFlow +{ + public abstract class ConnectableBase : MonoBehaviour, IConnectable + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/EventConnectable.cs.meta b/Assets/Scripts/ConnectableBase.cs.meta similarity index 100% rename from Assets/Scripts/EventConnectable.cs.meta rename to Assets/Scripts/ConnectableBase.cs.meta diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index dfe0512..c7b05d3 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -7,10 +7,10 @@ namespace UniFlow { - public abstract class ConnectorBase : EventConnectable, IConnector + public abstract class ConnectorBase : ConnectableBase, IConnector { [SerializeField] [Tooltip("Specify instances of IEventConnectable directly")] - private List targetConnectorInstances = default; + private List targetConnectorInstances = default; [SerializeField] [Tooltip("Specify identifiers of IEventConnectable that resolve from Zenject.DiContainer")] private List targetConnectorIds = default; @@ -21,10 +21,10 @@ [SerializeField] [Tooltip("Set true to allow to act as the entry point of events [SerializeField] [Tooltip("Set true to allow to act as the receiver")] private bool actAsReceiver = false; - private IEnumerable TargetConnectors => - new List() - .Concat(targetConnectorInstances ?? new List()) - .Concat((targetConnectorIds ?? new List()).SelectMany(Container.ResolveIdAll)) + private IEnumerable TargetConnectors => + new List() + .Concat(targetConnectorInstances ?? new List()) + .Concat((targetConnectorIds ?? new List()).SelectMany(Container.ResolveIdAll)) .Where(x => !ReferenceEquals(x, this)) .ToArray(); diff --git a/Assets/Scripts/EventConnectable.cs b/Assets/Scripts/EventConnectable.cs deleted file mode 100644 index ed3ef49..0000000 --- a/Assets/Scripts/EventConnectable.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -namespace UniFlow -{ - public abstract class EventConnectable : MonoBehaviour, IEventConnectable - { - } -} \ No newline at end of file diff --git a/Assets/Scripts/IConnectable.cs b/Assets/Scripts/IConnectable.cs new file mode 100644 index 0000000..7bc9021 --- /dev/null +++ b/Assets/Scripts/IConnectable.cs @@ -0,0 +1,6 @@ +namespace UniFlow +{ + public interface IConnectable + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/IEventConnectable.cs.meta b/Assets/Scripts/IConnectable.cs.meta similarity index 100% rename from Assets/Scripts/IEventConnectable.cs.meta rename to Assets/Scripts/IConnectable.cs.meta diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index 3cc99ea..96f47c1 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -2,7 +2,7 @@ namespace UniFlow { - public interface IConnector : IEventConnectable + public interface IConnector : IConnectable { IObservable OnPublishAsObservable(); void Connect(IObservable source); diff --git a/Assets/Scripts/IEventConnectable.cs b/Assets/Scripts/IEventConnectable.cs deleted file mode 100644 index e9151af..0000000 --- a/Assets/Scripts/IEventConnectable.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace UniFlow -{ - public interface IEventConnectable - { - } -} \ No newline at end of file diff --git a/Assets/Scripts/IReceiver.cs b/Assets/Scripts/IReceiver.cs index d4ad1c1..101d511 100644 --- a/Assets/Scripts/IReceiver.cs +++ b/Assets/Scripts/IReceiver.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public interface IReceiver : IEventConnectable + public interface IReceiver : IConnectable { void OnReceive(EventMessages eventMessages); } diff --git a/Assets/Scripts/ReceiverBase.cs b/Assets/Scripts/ReceiverBase.cs index 389fb98..0715041 100644 --- a/Assets/Scripts/ReceiverBase.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public abstract class ReceiverBase : EventConnectable, IReceiver + public abstract class ReceiverBase : ConnectableBase, IReceiver { public abstract void OnReceive(EventMessages eventMessages); } From 011c593d542af1b31f9683eeacff5a1a4769cd8c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 14:52:36 +0900 Subject: [PATCH 009/453] :name_badge: Rename fields --- Assets/Scripts/ConnectorBase.cs | 8 ++-- Assets/Tests/Runtime/Scenes/Basic/All.unity | 12 +++--- .../Runtime/Scenes/Basic/AnimationEvent.unity | 4 +- .../Scenes/Basic/AnimatorTrigger.unity | 6 +-- .../Scenes/Basic/AudioController.unity | 24 ++++++------ .../Runtime/Scenes/Basic/AudioEvent.unity | 38 +++++++++---------- .../Runtime/Scenes/Basic/CameraEvent.unity | 8 ++-- .../Tests/Runtime/Scenes/Basic/Interval.unity | 2 +- .../Runtime/Scenes/Basic/LifecycleEvent.unity | 16 ++++---- .../Scenes/Basic/PlayableController.unity | 6 +-- .../Runtime/Scenes/Basic/TimelineSignal.unity | 4 +- Assets/Tests/Runtime/Scenes/Basic/Timer.unity | 2 +- .../Basic/UIBehaviourEventTrigger.unity | 4 +- 13 files changed, 67 insertions(+), 67 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index c7b05d3..635f487 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -10,10 +10,10 @@ namespace UniFlow public abstract class ConnectorBase : ConnectableBase, IConnector { [SerializeField] [Tooltip("Specify instances of IEventConnectable directly")] - private List targetConnectorInstances = default; + private List targetComponents = default; [SerializeField] [Tooltip("Specify identifiers of IEventConnectable that resolve from Zenject.DiContainer")] - private List targetConnectorIds = default; + private List targetIds = default; [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] private bool actAsTrigger = false; @@ -23,8 +23,8 @@ [SerializeField] [Tooltip("Set true to allow to act as the receiver")] private IEnumerable TargetConnectors => new List() - .Concat(targetConnectorInstances ?? new List()) - .Concat((targetConnectorIds ?? new List()).SelectMany(Container.ResolveIdAll)) + .Concat(targetComponents ?? new List()) + .Concat((targetIds ?? new List()).SelectMany(Container.ResolveIdAll)) .Where(x => !ReferenceEquals(x, this)) .ToArray(); diff --git a/Assets/Tests/Runtime/Scenes/Basic/All.unity b/Assets/Tests/Runtime/Scenes/Basic/All.unity index 9d34da5..5f8cb68 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/All.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/All.unity @@ -310,7 +310,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4c15fc42dc5482199932c4a3305f962, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2024507135} targetConnectorIds: [] actAsTrigger: 0 @@ -459,7 +459,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 986c65454dfa4cf6a69ff9328f793990, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1565437862} targetConnectorIds: [] actAsTrigger: 1 @@ -631,7 +631,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 13ea2beab68d4b9695c5913d711525ca, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1729537389} targetConnectorIds: [] actAsTrigger: 0 @@ -681,7 +681,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 79d730e2e15e4d688fab6e1a6d9f5e56, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 578503981} targetConnectorIds: [] actAsTrigger: 0 @@ -750,7 +750,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7897bf78af8d443e83a6786b2e4fdfda, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2070612652} targetConnectorIds: [] actAsTrigger: 0 @@ -852,7 +852,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!4 &2070612653 diff --git a/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity index 34b686d..011ebfe 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity @@ -312,7 +312,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 79d730e2e15e4d688fab6e1a6d9f5e56, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1565437861} targetConnectorIds: [] actAsTrigger: 1 @@ -361,7 +361,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!1 &2126485662 diff --git a/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity b/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity index 15caac7..3e37c10 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity @@ -313,7 +313,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 79d730e2e15e4d688fab6e1a6d9f5e56, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1565437861} targetConnectorIds: [] actAsTrigger: 0 @@ -362,7 +362,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1565437862 @@ -377,7 +377,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 13ea2beab68d4b9695c5913d711525ca, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1565437858} targetConnectorIds: [] actAsTrigger: 1 diff --git a/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity b/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity index 4bf70b7..27c8be5 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity @@ -222,7 +222,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &237918682 @@ -237,7 +237,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 306f3948478b4806bd3270ce91a0c068, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 237918681} targetConnectorIds: [] actAsTrigger: 0 @@ -365,7 +365,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5c68da8d20a7460881ef721586f08251, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 237918682} targetConnectorIds: [] actAsTrigger: 1 @@ -493,7 +493,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &709479484 @@ -508,7 +508,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 306f3948478b4806bd3270ce91a0c068, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 709479483} targetConnectorIds: [] actAsTrigger: 0 @@ -636,7 +636,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5c68da8d20a7460881ef721586f08251, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 709479484} targetConnectorIds: [] actAsTrigger: 1 @@ -673,7 +673,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1379110444 @@ -688,7 +688,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 306f3948478b4806bd3270ce91a0c068, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1379110443} targetConnectorIds: [] actAsTrigger: 0 @@ -816,7 +816,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5c68da8d20a7460881ef721586f08251, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1379110444} targetConnectorIds: [] actAsTrigger: 1 @@ -853,7 +853,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1766242782 @@ -868,7 +868,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 306f3948478b4806bd3270ce91a0c068, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1766242781} targetConnectorIds: [] actAsTrigger: 0 @@ -996,7 +996,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5c68da8d20a7460881ef721586f08251, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1766242782} targetConnectorIds: [] actAsTrigger: 1 diff --git a/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity index efafaa4..c3ebec1 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity @@ -221,7 +221,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &169312998 @@ -236,7 +236,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 169312997} targetConnectorIds: [] actAsTrigger: 1 @@ -383,7 +383,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &237918682 @@ -398,7 +398,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 237918681} targetConnectorIds: [] actAsTrigger: 1 @@ -545,7 +545,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &424226963 @@ -560,7 +560,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 424226962} targetConnectorIds: [] actAsTrigger: 1 @@ -710,7 +710,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &444551915 @@ -725,7 +725,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 444551914} targetConnectorIds: [] actAsTrigger: 0 @@ -743,7 +743,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 444551915} targetConnectorIds: [] actAsTrigger: 0 @@ -761,7 +761,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 444551916} targetConnectorIds: [] actAsTrigger: 0 @@ -779,7 +779,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 444551917} targetConnectorIds: [] actAsTrigger: 1 @@ -1017,7 +1017,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &709479484 @@ -1032,7 +1032,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 709479483} targetConnectorIds: [] actAsTrigger: 1 @@ -1179,7 +1179,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1130731398 @@ -1194,7 +1194,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1130731397} targetConnectorIds: [] actAsTrigger: 1 @@ -1341,7 +1341,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1379110444 @@ -1356,7 +1356,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1379110443} targetConnectorIds: [] actAsTrigger: 1 @@ -1503,7 +1503,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1766242782 @@ -1518,7 +1518,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5123bd7d9f1949adbf43f3b8391a5ebd, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1766242781} targetConnectorIds: [] actAsTrigger: 1 diff --git a/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity index 0bafa94..a2991d4 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity @@ -387,7 +387,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &923815578 @@ -402,7 +402,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2a133b3a9e6a4868ae2e11afff21cc6e, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 923815577} targetConnectorIds: [] actAsTrigger: 1 @@ -441,7 +441,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!114 &1761951866 @@ -456,7 +456,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2a133b3a9e6a4868ae2e11afff21cc6e, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1761951865} targetConnectorIds: [] actAsTrigger: 1 diff --git a/Assets/Tests/Runtime/Scenes/Basic/Interval.unity b/Assets/Tests/Runtime/Scenes/Basic/Interval.unity index e1e013d..7eb546b 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/Interval.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/Interval.unity @@ -323,7 +323,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c75b5631c1dd457ca629666003c656b9, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1929524893} targetConnectorIds: [] actAsTrigger: 1 diff --git a/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity index d78d292..c7b10d9 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity @@ -149,7 +149,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -268,7 +268,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -317,7 +317,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -366,7 +366,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -506,7 +506,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -555,7 +555,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -604,7 +604,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 85a0f26910644eac9392a5b944f82349, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 2041475155} targetConnectorIds: [] actAsTrigger: 1 @@ -653,7 +653,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!4 &2041475156 diff --git a/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity b/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity index ba5a8a9..045ca57 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity @@ -315,7 +315,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7897bf78af8d443e83a6786b2e4fdfda, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 951080161} targetConnectorIds: [] actAsTrigger: 0 @@ -418,7 +418,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4c15fc42dc5482199932c4a3305f962, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 951080155} targetConnectorIds: [] actAsTrigger: 1 @@ -435,7 +435,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!1 &2126485662 diff --git a/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity b/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity index 9c9aa20..dbb5558 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity @@ -314,7 +314,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7897bf78af8d443e83a6786b2e4fdfda, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 951080160} targetConnectorIds: [] actAsTrigger: 1 @@ -415,7 +415,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!1 &2126485662 diff --git a/Assets/Tests/Runtime/Scenes/Basic/Timer.unity b/Assets/Tests/Runtime/Scenes/Basic/Timer.unity index 214fb7a..710a713 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/Timer.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/Timer.unity @@ -323,7 +323,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5c68da8d20a7460881ef721586f08251, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 1929524893} targetConnectorIds: [] actAsTrigger: 1 diff --git a/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity b/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity index f6f97bf..20dc1b0 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity @@ -431,7 +431,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 986c65454dfa4cf6a69ff9328f793990, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: + targetComponents: - {fileID: 751339852} targetConnectorIds: [] actAsTrigger: 1 @@ -487,7 +487,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetConnectorInstances: [] + targetComponents: [] targetConnectorIds: [] actAsTrigger: 0 --- !u!1 &1538909814 From 8e4957fa688167e578e1b6545521f65e8eaf388c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 15:00:06 +0900 Subject: [PATCH 010/453] :name_badge: Apply field name changes --- Assets/Tests/Runtime/Scenes/Basic/All.unity | 12 +++--- .../Runtime/Scenes/Basic/AnimationEvent.unity | 4 +- .../Scenes/Basic/AnimatorTrigger.unity | 6 +-- .../Scenes/Basic/AudioController.unity | 24 ++++++------ .../Runtime/Scenes/Basic/AudioEvent.unity | 38 +++++++++---------- .../Runtime/Scenes/Basic/CameraEvent.unity | 8 ++-- .../Tests/Runtime/Scenes/Basic/Interval.unity | 2 +- .../Runtime/Scenes/Basic/LifecycleEvent.unity | 16 ++++---- .../Scenes/Basic/PlayableController.unity | 6 +-- .../Runtime/Scenes/Basic/TimelineSignal.unity | 4 +- Assets/Tests/Runtime/Scenes/Basic/Timer.unity | 2 +- .../Basic/UIBehaviourEventTrigger.unity | 4 +- 12 files changed, 63 insertions(+), 63 deletions(-) diff --git a/Assets/Tests/Runtime/Scenes/Basic/All.unity b/Assets/Tests/Runtime/Scenes/Basic/All.unity index 5f8cb68..12a79af 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/All.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/All.unity @@ -312,7 +312,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2024507135} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 playableDirector: {fileID: 2024507138} --- !u!4 &578503983 @@ -461,7 +461,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1565437862} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 eventTriggerType: 2 uiBehaviour: {fileID: 0} @@ -633,7 +633,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1729537389} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 animator: {fileID: 1729537390} triggerName: TestTrigger @@ -683,7 +683,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 578503981} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!95 &1729537390 Animator: @@ -752,7 +752,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2070612652} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &2024507136 MonoBehaviour: @@ -853,7 +853,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!4 &2070612653 Transform: diff --git a/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity index 011ebfe..a9afa0f 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AnimationEvent.unity @@ -314,7 +314,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1565437861} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 --- !u!95 &1565437859 Animator: @@ -362,7 +362,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!1 &2126485662 GameObject: diff --git a/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity b/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity index 3e37c10..78aa4cf 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AnimatorTrigger.unity @@ -315,7 +315,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1565437861} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!95 &1565437859 Animator: @@ -363,7 +363,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1565437862 MonoBehaviour: @@ -379,7 +379,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1565437858} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 animator: {fileID: 0} triggerName: TestTrigger diff --git a/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity b/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity index 27c8be5..2b545da 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AudioController.unity @@ -223,7 +223,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &237918682 MonoBehaviour: @@ -239,7 +239,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 237918681} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioControlMethod: 0 audioSource: {fileID: 0} @@ -367,7 +367,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 237918682} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 seconds: 1 --- !u!1 &451877066 @@ -494,7 +494,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &709479484 MonoBehaviour: @@ -510,7 +510,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 709479483} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioControlMethod: 3 audioSource: {fileID: 0} @@ -638,7 +638,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 709479484} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 seconds: 1 --- !u!1 &1379110442 @@ -674,7 +674,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1379110444 MonoBehaviour: @@ -690,7 +690,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1379110443} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioControlMethod: 1 audioSource: {fileID: 0} @@ -818,7 +818,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1379110444} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 seconds: 1 --- !u!1 &1766242780 @@ -854,7 +854,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1766242782 MonoBehaviour: @@ -870,7 +870,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1766242781} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioControlMethod: 2 audioSource: {fileID: 0} @@ -998,7 +998,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1766242782} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 seconds: 1 --- !u!1 &2126485662 diff --git a/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity index c3ebec1..09ae4bf 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity @@ -222,7 +222,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &169312998 MonoBehaviour: @@ -238,7 +238,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 169312997} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 4 audioSource: {fileID: 0} @@ -384,7 +384,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &237918682 MonoBehaviour: @@ -400,7 +400,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 237918681} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 0 audioSource: {fileID: 0} @@ -546,7 +546,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &424226963 MonoBehaviour: @@ -562,7 +562,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 424226962} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 1 audioSource: {fileID: 0} @@ -711,7 +711,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &444551915 MonoBehaviour: @@ -727,7 +727,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 444551914} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioEventType: 1 audioSource: {fileID: 0} @@ -745,7 +745,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 444551915} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioEventType: 3 audioSource: {fileID: 0} @@ -763,7 +763,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 444551916} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 audioEventType: 2 audioSource: {fileID: 0} @@ -781,7 +781,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 444551917} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 0 audioSource: {fileID: 0} @@ -1018,7 +1018,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &709479484 MonoBehaviour: @@ -1034,7 +1034,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 709479483} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 3 audioSource: {fileID: 0} @@ -1180,7 +1180,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1130731398 MonoBehaviour: @@ -1196,7 +1196,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1130731397} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 0 audioSource: {fileID: 0} @@ -1342,7 +1342,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1379110444 MonoBehaviour: @@ -1358,7 +1358,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1379110443} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 1 audioSource: {fileID: 0} @@ -1504,7 +1504,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1766242782 MonoBehaviour: @@ -1520,7 +1520,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1766242781} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 audioEventType: 2 audioSource: {fileID: 0} diff --git a/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity index a2991d4..ac45ed3 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity @@ -388,7 +388,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &923815578 MonoBehaviour: @@ -404,7 +404,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 923815577} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 cameraEventType: 0 component: {fileID: 0} @@ -442,7 +442,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &1761951866 MonoBehaviour: @@ -458,7 +458,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1761951865} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 cameraEventType: 1 component: {fileID: 0} diff --git a/Assets/Tests/Runtime/Scenes/Basic/Interval.unity b/Assets/Tests/Runtime/Scenes/Basic/Interval.unity index 7eb546b..cb78775 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/Interval.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/Interval.unity @@ -325,7 +325,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1929524893} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 seconds: 1 --- !u!4 &1929524895 diff --git a/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity index c7b10d9..1f8c62b 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/LifecycleEvent.unity @@ -151,7 +151,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 3 component: {fileID: 0} @@ -270,7 +270,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 2 component: {fileID: 0} @@ -319,7 +319,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 5 component: {fileID: 0} @@ -368,7 +368,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 4 component: {fileID: 0} @@ -508,7 +508,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 6 component: {fileID: 0} @@ -557,7 +557,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 0 component: {fileID: 0} @@ -606,7 +606,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 2041475155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 lifecycleEventType: 1 component: {fileID: 0} @@ -654,7 +654,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!4 &2041475156 Transform: diff --git a/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity b/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity index 045ca57..5a6ea46 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity @@ -317,7 +317,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 951080161} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!114 &951080156 MonoBehaviour: @@ -420,7 +420,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 951080155} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 playableDirector: {fileID: 0} --- !u!114 &951080161 @@ -436,7 +436,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!1 &2126485662 GameObject: diff --git a/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity b/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity index dbb5558..48f5ed8 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/TimelineSignal.unity @@ -316,7 +316,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 951080160} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 --- !u!114 &951080156 MonoBehaviour: @@ -416,7 +416,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!1 &2126485662 GameObject: diff --git a/Assets/Tests/Runtime/Scenes/Basic/Timer.unity b/Assets/Tests/Runtime/Scenes/Basic/Timer.unity index 710a713..efe7eb7 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/Timer.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/Timer.unity @@ -325,7 +325,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 1929524893} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 seconds: 1 --- !u!4 &1929524895 diff --git a/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity b/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity index 20dc1b0..74b3347 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/UIBehaviourEventTrigger.unity @@ -433,7 +433,7 @@ MonoBehaviour: m_EditorClassIdentifier: targetComponents: - {fileID: 751339852} - targetConnectorIds: [] + targetIds: [] actAsTrigger: 1 eventTriggerType: 4 uiBehaviour: {fileID: 0} @@ -488,7 +488,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetComponents: [] - targetConnectorIds: [] + targetIds: [] actAsTrigger: 0 --- !u!1 &1538909814 GameObject: From ff978ea3b642730de15d50bc8cf7fa4403057832 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 15:04:05 +0900 Subject: [PATCH 011/453] :clipboard: Re-numbering version --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index b9e43aa..42ab12f 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.0.1-preview.1", + "version": "0.0.5-preview.6", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 186f7d9db2252de743f44bbee186c66795c91943 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 18:21:10 +0900 Subject: [PATCH 012/453] :memo: Fix installation section --- Assets/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/README.md b/Assets/README.md index 5a1fdd5..2e27497 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -7,7 +7,7 @@ You can implement easily processes such as "Tutorial that accepts user interacti ## Installation ```bash -upm add package dev.monry.eventconnector +upm add package dev.monry.uniflow ``` Please refer to [this repository](https://github.com/upm-packages/upm-cli) about the `upm` command. From 65db2b43418c35f35ee9802741afb2b4cff76acc Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 9 Aug 2019 18:30:44 +0900 Subject: [PATCH 013/453] :memo: Update README.md --- Assets/README.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Assets/README.md b/Assets/README.md index 2e27497..501e783 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -16,37 +16,38 @@ Please refer to [this repository](https://github.com/upm-packages/upm-cli) about ### Basics -#### 1. Attach EventPublishers +#### 1. Attach Connectors -Attach one or more Components what implements `IEventConnectable` listed below into GameObject. +Attach one or more Components what implements `ConnectorBase` listed below into GameObject. -#### 2. Implement EventReceiver +#### 2. Connect Connectors -Implement Component what inherits `EventReceiver`. +Set *Next `ConnectorBase`* into **Target Instances** field for each Connectors. -Implement the process you want to execute when the event is received in the `OnReceive()` method that needs to override by `EventReceiver`. +It is also possible to solve with `Zenject.ResolveIdAll()` by setting ID in **Target Ids** field -This method will be passed `EventMessages` what contains all propagated event informations. +#### 3. Implement Receiver -#### 3. Connect EventConnectors and EventReceiver +Implement Component what inherits `ReceiverBase`. -Set **Next IEventConnectable** into *Target Connector Instances* field for each EventPublisher. +Implement the process you want to execute when the event is received in the `OnReceive()` method that needs to override by `ReceiverBase`. -It is also possible to solve with `Zenject.ResolveIdAll()` by setting ID in *Target Connector Ids* field +This method will be passed `EventMessages` what contains all propagated event informations. ### Inspector inspector -#### Target Connector Instances +#### Target Instances -Specify instances what inherits `EventPublisher` or `EventReceiver` into this field. +Specify instances what inherits `ConnectableBase` into this field.
+\* `ConnectorBase` and `ReceiverBase` are inherits `ConnectableBase` Fire messages at the correct time for each component. -#### Target Connector Instances +#### Target Ids -Specify IDs what provides instances of `EventPublisher` or `EventReceiver` resolved by `Zenject.ResolveIdAll()` into this field. +Specify IDs what provides instances of `IConnectable` resolved by `Zenject.ResolveIdAll()` into this field. Fire messages at the correct time for each component. @@ -58,11 +59,11 @@ Set true to allow to act as the entry point of events. Set true to allow to act as the receiver of events. -#### Other parameters for each Publisher +#### Other parameters for each Connector Individual parameters can be specified for each component. -## Components what inherits `EventPublisher` +## Components what inherits `ConnectorBase` ### Messaging from traditional callback From f3285df635c600c0d1932d8f4ba519bb3798219b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 10 Aug 2019 14:46:14 +0900 Subject: [PATCH 014/453] :name_badge: Rename method --- Assets/Scripts/Connector/AnimationEvent.cs | 2 +- Assets/Scripts/Connector/AnimatorTrigger.cs | 2 +- Assets/Scripts/Connector/AudioController.cs | 2 +- Assets/Scripts/Connector/AudioEvent.cs | 2 +- Assets/Scripts/Connector/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Empty.cs | 2 +- Assets/Scripts/Connector/Interval.cs | 2 +- Assets/Scripts/Connector/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/LoadSceneEvent.cs | 2 +- Assets/Scripts/Connector/MouseEvent.cs | 2 +- Assets/Scripts/Connector/ParticleEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollision2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollisionEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTriggerEvent.cs | 2 +- Assets/Scripts/Connector/PlayableController.cs | 2 +- Assets/Scripts/Connector/RectTransformEvent.cs | 2 +- Assets/Scripts/Connector/SimpleAnimationController.cs | 2 +- Assets/Scripts/Connector/TimelineSignal.cs | 2 +- Assets/Scripts/Connector/Timer.cs | 2 +- Assets/Scripts/Connector/TransformEvent.cs | 2 +- Assets/Scripts/Connector/UIBehaviourEventTrigger.cs | 2 +- Assets/Scripts/Connector/UnloadSceneEvent.cs | 2 +- Assets/Scripts/ConnectorBase.cs | 4 ++-- Assets/Scripts/IConnector.cs | 2 +- 25 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 024412a..4f0a525 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -12,7 +12,7 @@ public class AnimationEvent : ConnectorBase { private ISubject Subject { get; } = new Subject(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Subject .Take(1) .Select(x => EventMessage.Create(ConnectorType.AnimationEvent, this, x)); diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index 7a9b376..1cd35b0 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -19,7 +19,7 @@ public class AnimatorTrigger : ConnectorBase private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable .Create( observer => diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 5273c44..52d7097 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -35,7 +35,7 @@ private AudioSource AudioSource private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable .Create( observer => diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index e8a3b3a..16be11d 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -30,7 +30,7 @@ private AudioSource AudioSource private IReadOnlyReactiveProperty> TimePair { get; set; } - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnAudioEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.AudioEvent, AudioSource, AudioEventData.Create(x))); diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index 74cb908..088729e 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -17,7 +17,7 @@ public class CameraEvent : ConnectorBase private CameraEventType CameraEventType => cameraEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.CameraEvent, Component, CameraEventData.Create(CameraEventType))); diff --git a/Assets/Scripts/Connector/Empty.cs b/Assets/Scripts/Connector/Empty.cs index b2e55d0..0b06f4c 100644 --- a/Assets/Scripts/Connector/Empty.cs +++ b/Assets/Scripts/Connector/Empty.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/Empty", 10000)] public class Empty : ConnectorBase { - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable.Return(EventMessage.Create(ConnectorType.Empty, this)); } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index e6729f9..e328a77 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -10,7 +10,7 @@ public class Interval : ConnectorBase [SerializeField] private float seconds = default; private float Seconds => seconds; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable .Interval(TimeSpan.FromSeconds(Seconds)) .Select(_ => EventMessage.Create(ConnectorType.Interval, this, Seconds)); diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index 6d53f35..c7af0cc 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -20,7 +20,7 @@ public class LifecycleEvent : ConnectorBase private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.LifecycleEvent, Component, LifecycleEventData.Create(LifecycleEventType))); diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index d395701..76a7800 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -13,7 +13,7 @@ public class LoadSceneEvent : ConnectorBase [SerializeField] private List sceneNames = default; private IEnumerable SceneNames => sceneNames; - public override IObservable OnPublishAsObservable() + public override IObservable OnConnectAsObservable() { return LoadScenes() .ToObservable() diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 1a0383c..71eb637 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -17,7 +17,7 @@ public class MouseEvent : ConnectorBase private MouseEventType MouseEventType => mouseEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.MouseEvent, Component, MouseEventData.Create(MouseEventType))); diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index 8d97eda..bf9e03b 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -17,7 +17,7 @@ public class ParticleEvent : ConnectorBase private ParticleEventType ParticleEventType => particleEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.ParticleEvent, Component, ParticleEventData.Create(ParticleEventType, x))); diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 4123e4b..55503c6 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -17,7 +17,7 @@ public class PhysicsCollision2DEvent : ConnectorBase private PhysicsCollision2DEventType PhysicsCollision2DEventType => physicsCollision2DEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.PhysicsCollision2DEvent, Component, PhysicsCollision2DEventData.Create(PhysicsCollision2DEventType, x))); diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index e39def4..1bd2f7f 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -17,7 +17,7 @@ public class PhysicsCollisionEvent : ConnectorBase private PhysicsCollisionEventType PhysicsCollisionEventType => physicsCollisionEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.PhysicsCollisionEvent, Component, PhysicsCollisionEventData.Create(PhysicsCollisionEventType, x))); diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 6944650..75be21f 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -17,7 +17,7 @@ public class PhysicsTrigger2DEvent : ConnectorBase private PhysicsTrigger2DEventType PhysicsTrigger2DEventType => physicsTrigger2DEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.PhysicsTrigger2DEvent, Component, PhysicsTrigger2DEventData.Create(PhysicsTrigger2DEventType, x))); diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 7139b49..6187066 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -17,7 +17,7 @@ public class PhysicsTriggerEvent : ConnectorBase private PhysicsTriggerEventType PhysicsTriggerEventType => physicsTriggerEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.PhysicsTriggerEvent, Component, PhysicsTriggerEventData.Create(PhysicsTriggerEventType, x))); diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index b0d018c..37b7699 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -39,7 +39,7 @@ private TimelineAsset TimelineAsset private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable .Create( observer => diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index 923d066..7934ee3 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -17,7 +17,7 @@ public class RectTransformEvent : ConnectorBase private RectTransformEventType RectTransformEventType => rectTransformEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.RectTransformEvent, Component, RectTransformEventData.Create(RectTransformEventType))); diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index da92f0f..1408333 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -36,7 +36,7 @@ private SimpleAnimation SimpleAnimation private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable .Create( observer => diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/TimelineSignal.cs index 8c3caeb..83e65cd 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/TimelineSignal.cs @@ -14,7 +14,7 @@ public class TimelineSignal : ConnectorBase { private ISubject Subject { get; } = new Subject(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Subject .Take(1) .Select(x => EventMessage.Create(ConnectorType.TimelineSignal, this, x)); diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index ff310d5..91be4ad 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -10,7 +10,7 @@ public class Timer : ConnectorBase [SerializeField] private float seconds = default; private float Seconds => seconds; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => Observable .Timer(TimeSpan.FromSeconds(Seconds)) .Select(_ => EventMessage.Create(ConnectorType.Timer, this, Seconds)); diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 62ae537..4f7871c 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -17,7 +17,7 @@ public class TransformEvent : ConnectorBase private TransformEventType TransformEventType => transformEventType; private Component Component => component ? component : component = this; - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.TransformEvent, Component, TransformEventData.Create(TransformEventType))); diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index b9c89a7..6de7883 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -17,7 +17,7 @@ public class UIBehaviourEventTrigger : ConnectorBase private UIBehaviour uiBehaviour = default; private UIBehaviour UIBehaviour => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); - public override IObservable OnPublishAsObservable() => + public override IObservable OnConnectAsObservable() => OnEventTriggerAsObservable() .Select(x => EventMessage.Create(ConnectorType.UIBehaviourEventTrigger, UIBehaviour, x)); diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index 7b25a1e..6407160 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -13,7 +13,7 @@ public class UnloadSceneEvent : ConnectorBase [SerializeField] private List sceneNames = default; private IEnumerable SceneNames => sceneNames; - public override IObservable OnPublishAsObservable() + public override IObservable OnConnectAsObservable() { return UnloadScenes() .ToObservable() diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 635f487..856fc98 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -45,7 +45,7 @@ void IConnector.Connect(IObservable source) var observable = source .SelectMany( eventMessages => (this as IConnector) - .OnPublishAsObservable() + .OnConnectAsObservable() .Select(x => (eventMessages ?? EventMessages.Create()).Append(x)) ); TargetConnectors @@ -63,6 +63,6 @@ void IConnector.Connect(IObservable source) } } - public abstract IObservable OnPublishAsObservable(); + public abstract IObservable OnConnectAsObservable(); } } \ No newline at end of file diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index 96f47c1..f726959 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -4,7 +4,7 @@ namespace UniFlow { public interface IConnector : IConnectable { - IObservable OnPublishAsObservable(); + IObservable OnConnectAsObservable(); void Connect(IObservable source); } } \ No newline at end of file From 9d53d0123fb8aee275254c2d7ddc7efbdc34344d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 10 Aug 2019 16:32:55 +0900 Subject: [PATCH 015/453] :sparkles: Automatic add SimpleAnimation and Animator --- Assets/Scripts/Connector/AnimationEvent.cs | 66 +++++++++++++++++-- .../Connector/SimpleAnimationController.cs | 41 +++++++++--- 2 files changed, 94 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 4f0a525..3d6cd78 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -1,21 +1,67 @@ using System; +using System.Linq; using JetBrains.Annotations; using UniRx; using UnityEngine; namespace UniFlow.Connector { - // AnimationEvent cannot fire to Component attaching to another GameObject - [RequireComponent(typeof(Animator))] [AddComponentMenu("UniFlow/AnimationEvent", 302)] public class AnimationEvent : ConnectorBase { + [SerializeField] + [Tooltip("If you do not specify it will be used SimpleAnimation setting")] + private AnimationClip animationClip = default; + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; + + private AnimationClip AnimationClip => animationClip; + private AnimatorCullingMode CullingMode => cullingMode; + private AnimatorUpdateMode UpdateMode => updateMode; + + private Animator animator = default; + private Animator Animator + { + get => + animator != default + ? animator + : animator = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + [UsedImplicitly] + set => animator = value; + } + + private SimpleAnimation simpleAnimation = default; + private SimpleAnimation SimpleAnimation + { + get => + simpleAnimation != default + ? simpleAnimation + : simpleAnimation = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent() + ; + [UsedImplicitly] + set => simpleAnimation = value; + } + private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() => - Subject + public override IObservable OnConnectAsObservable() + { + if (AnimationClip != default && GetComponent() == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) + { + SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); + } + + return Subject + // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) .Select(x => EventMessage.Create(ConnectorType.AnimationEvent, this, x)); + } /// /// Invoked from AnimationEvent @@ -26,5 +72,17 @@ public void Dispatch(UnityEngine.AnimationEvent animationEvent) { Subject.OnNext(animationEvent); } + + private void Awake() + { + // ReSharper disable once InvertIf + // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. + if (AnimationClip != default && Animator == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) + { + SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); + SimpleAnimation.cullingMode = CullingMode; + Animator.updateMode = UpdateMode; + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 1408333..913ed5f 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -12,14 +12,31 @@ public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; [SerializeField] - [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] - private SimpleAnimation simpleAnimation = default; - [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; private AnimationClip AnimationClip => animationClip; + private AnimatorCullingMode CullingMode => cullingMode; + private AnimatorUpdateMode UpdateMode => updateMode; + + private Animator animator = default; + private Animator Animator + { + get => + animator != default + ? animator + : animator = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + [UsedImplicitly] + set => animator = value; + } + + private SimpleAnimation simpleAnimation = default; private SimpleAnimation SimpleAnimation { get => @@ -36,8 +53,9 @@ private SimpleAnimation SimpleAnimation private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() => - Observable + public override IObservable OnConnectAsObservable() + { + return Observable .Create( observer => { @@ -46,14 +64,17 @@ public override IObservable OnConnectAsObservable() => return Disposable; } ); + } - protected override void Start() + private void Awake() { - base.Start(); - - if (AnimationClip != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) + // ReSharper disable once InvertIf + // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. + if (AnimationClip != default && Animator == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) { SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); + SimpleAnimation.cullingMode = CullingMode; + Animator.updateMode = UpdateMode; } } @@ -64,10 +85,12 @@ private void InvokeSimpleAnimationMethod() case SimpleAnimationControlMethod.Play: if (AnimationClip == default) { + SimpleAnimation.Rewind(); SimpleAnimation.Play(); } else { + SimpleAnimation.Rewind(AnimationClip.GetInstanceID().ToString()); SimpleAnimation.Play(AnimationClip.GetInstanceID().ToString()); } break; From 6ff52ab1277b13c50a6b5ba601ac700024b04996 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 10 Aug 2019 16:38:30 +0900 Subject: [PATCH 016/453] :sparkles: Automatic add AudioSource --- Assets/Scripts/Connector/AudioController.cs | 15 ++++++++------- Assets/Scripts/Connector/AudioEvent.cs | 21 ++++++++++++++++----- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 52d7097..46ac244 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -11,13 +11,13 @@ public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; [SerializeField] - [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] - private AudioSource audioSource = default; - [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; private AudioControlMethod AudioControlMethod => audioControlMethod; + private AudioClip AudioClip => audioClip; + + private AudioSource audioSource = default; private AudioSource AudioSource { get => @@ -28,11 +28,9 @@ private AudioSource AudioSource ? GetComponent() : gameObject.AddComponent(); [UsedImplicitly] - set => throw new NotImplementedException(); + set => audioSource = value; } - private AudioClip AudioClip => audioClip; - private IDisposable Disposable { get; } = new CompositeDisposable(); public override IObservable OnConnectAsObservable() => @@ -46,13 +44,16 @@ public override IObservable OnConnectAsObservable() => } ); - private void InvokeAudioSourceMethod() + private void Awake() { if (AudioClip != default) { AudioSource.clip = AudioClip; } + } + private void InvokeAudioSourceMethod() + { switch (AudioControlMethod) { case AudioControlMethod.Play: diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index 16be11d..345647c 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -11,10 +11,13 @@ public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; [SerializeField] - [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] - private AudioSource audioSource = default; + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; private AudioEventType AudioEventType => audioEventType; + private AudioClip AudioClip => audioClip; + + private AudioSource audioSource = default; private AudioSource AudioSource { get => @@ -34,6 +37,14 @@ public override IObservable OnConnectAsObservable() => OnAudioEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.AudioEvent, AudioSource, AudioEventData.Create(x))); + private void Awake() + { + if (AudioClip != default) + { + AudioSource.clip = AudioClip; + } + } + private IObservable OnAudioEventAsObservable() { TimePair = AudioSource @@ -59,9 +70,9 @@ private IObservable OnAudioEventAsObservable() } } - private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip audioClip) + private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) { - if (audioClip == default) + if (clip == default) { throw new ArgumentOutOfRangeException(); } @@ -71,7 +82,7 @@ private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip audioClip) return AudioEventType.Play; } - if (!isPlaying && (Mathf.Approximately(audioClip.length, TimePair.Value.Current) || Mathf.Approximately(0.0f, TimePair.Value.Current) && TimePair.Value.Previous > 0.0f)) + if (!isPlaying && (Mathf.Approximately(clip.length, TimePair.Value.Current) || Mathf.Approximately(0.0f, TimePair.Value.Current) && TimePair.Value.Previous > 0.0f)) { return AudioEventType.Stop; } From f56b0f561be8bafb2bd35ce8222ad453f40adeac Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 10 Aug 2019 16:51:06 +0900 Subject: [PATCH 017/453] :sparkles: Add setter for SerializeField --- Assets/Scripts/Connector/AnimationEvent.cs | 7 +++--- Assets/Scripts/Connector/AnimatorTrigger.cs | 11 +++++--- Assets/Scripts/Connector/AudioController.cs | 10 +++++--- Assets/Scripts/Connector/AudioEvent.cs | 10 +++++--- Assets/Scripts/Connector/CameraEvent.cs | 20 +++++++++------ Assets/Scripts/Connector/Interval.cs | 14 ++++++++--- Assets/Scripts/Connector/LifecycleEvent.cs | 20 +++++++++------ Assets/Scripts/Connector/MouseEvent.cs | 14 +++++++---- Assets/Scripts/Connector/ParticleEvent.cs | 14 +++++++---- .../Connector/PhysicsCollision2DEvent.cs | 14 +++++++---- .../Connector/PhysicsCollisionEvent.cs | 14 +++++++---- .../Connector/PhysicsTrigger2DEvent.cs | 20 +++++++++------ .../Scripts/Connector/PhysicsTriggerEvent.cs | 20 +++++++++------ .../Scripts/Connector/PlayableController.cs | 25 ++++++++++--------- .../Scripts/Connector/RectTransformEvent.cs | 20 +++++++++------ .../Connector/SimpleAnimationController.cs | 10 +++++--- Assets/Scripts/Connector/TimelineSignal.cs | 7 ++++-- Assets/Scripts/Connector/Timer.cs | 14 ++++++++--- Assets/Scripts/Connector/TransformEvent.cs | 20 +++++++++------ .../Connector/UIBehaviourEventTrigger.cs | 16 ++++++++---- 20 files changed, 194 insertions(+), 106 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 3d6cd78..22f9d54 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -12,11 +12,12 @@ public class AnimationEvent : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; - [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - private AnimationClip AnimationClip => animationClip; + + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; private AnimatorCullingMode CullingMode => cullingMode; + + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; private AnimatorUpdateMode UpdateMode => updateMode; private Animator animator = default; diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index 1cd35b0..2f67103 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -11,16 +11,18 @@ public class AnimatorTrigger : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private Animator animator = default; - [SerializeField] private string triggerName = default; - private Animator Animator => animator ? animator : animator = GetComponent(); + + [SerializeField] private string triggerName = default; private string TriggerName => triggerName; + private int TriggerId => Animator.StringToHash(TriggerName); private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() => - Observable + public override IObservable OnConnectAsObservable() + { + return Observable .Create( observer => { @@ -29,6 +31,7 @@ public override IObservable OnConnectAsObservable() => return Disposable; } ); + } private void OnDestroy() { diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 46ac244..fae9e4d 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -10,11 +10,11 @@ namespace UniFlow.Connector public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; + private AudioControlMethod AudioControlMethod => audioControlMethod; + [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - - private AudioControlMethod AudioControlMethod => audioControlMethod; private AudioClip AudioClip => audioClip; private AudioSource audioSource = default; @@ -33,8 +33,9 @@ private AudioSource AudioSource private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() => - Observable + public override IObservable OnConnectAsObservable() + { + return Observable .Create( observer => { @@ -43,6 +44,7 @@ public override IObservable OnConnectAsObservable() => return Disposable; } ); + } private void Awake() { diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index 345647c..a1874ed 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -10,11 +10,11 @@ namespace UniFlow.Connector public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; + private AudioEventType AudioEventType => audioEventType; + [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - - private AudioEventType AudioEventType => audioEventType; private AudioClip AudioClip => audioClip; private AudioSource audioSource = default; @@ -33,9 +33,11 @@ private AudioSource AudioSource private IReadOnlyReactiveProperty> TimePair { get; set; } - public override IObservable OnConnectAsObservable() => - OnAudioEventAsObservable() + public override IObservable OnConnectAsObservable() + { + return OnAudioEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.AudioEvent, AudioSource, AudioEventData.Create(x))); + } private void Awake() { diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index 088729e..432ecb6 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,16 +11,21 @@ namespace UniFlow.Connector public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private CameraEventType CameraEventType => cameraEventType; - private Component Component => component ? component : component = this; - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.CameraEvent, Component, CameraEventData.Create(CameraEventType))); + } private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index e328a77..0201228 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -8,11 +9,18 @@ namespace UniFlow.Connector public class Interval : ConnectorBase { [SerializeField] private float seconds = default; - private float Seconds => seconds; + private float Seconds + { + get => seconds; + [UsedImplicitly] + set => seconds = value; + } - public override IObservable OnConnectAsObservable() => - Observable + public override IObservable OnConnectAsObservable() + { + return Observable .Interval(TimeSpan.FromSeconds(Seconds)) .Select(_ => EventMessage.Create(ConnectorType.Interval, this, Seconds)); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index c7af0cc..3138ade 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,19 +11,24 @@ namespace UniFlow.Connector public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private LifecycleEventType LifecycleEventType => lifecycleEventType; - private Component Component => component ? component : component = this; + + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.LifecycleEvent, Component, LifecycleEventData.Create(LifecycleEventType))); + } private void Awake() { diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 71eb637..66f9908 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,12 +11,15 @@ namespace UniFlow.Connector public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private MouseEventType MouseEventType => mouseEventType; - private Component Component => component ? component : component = this; + + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } public override IObservable OnConnectAsObservable() => OnEventAsObservable() diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index bf9e03b..8dc82e7 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,12 +11,15 @@ namespace UniFlow.Connector public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private ParticleEventType ParticleEventType => particleEventType; - private Component Component => component ? component : component = this; + + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } public override IObservable OnConnectAsObservable() => OnEventAsObservable() diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 55503c6..c6985b5 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,12 +11,15 @@ namespace UniFlow.Connector public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private PhysicsCollision2DEventType PhysicsCollision2DEventType => physicsCollision2DEventType; - private Component Component => component ? component : component = this; + + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } public override IObservable OnConnectAsObservable() => OnEventAsObservable() diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index 1bd2f7f..dfdb24d 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,12 +11,15 @@ namespace UniFlow.Connector public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private PhysicsCollisionEventType PhysicsCollisionEventType => physicsCollisionEventType; - private Component Component => component ? component : component = this; + + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } public override IObservable OnConnectAsObservable() => OnEventAsObservable() diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 75be21f..8b1150f 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,16 +11,21 @@ namespace UniFlow.Connector public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private PhysicsTrigger2DEventType PhysicsTrigger2DEventType => physicsTrigger2DEventType; - private Component Component => component ? component : component = this; - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.PhysicsTrigger2DEvent, Component, PhysicsTrigger2DEventData.Create(PhysicsTrigger2DEventType, x))); + } private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 6187066..6f1e67e 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,16 +11,21 @@ namespace UniFlow.Connector public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private PhysicsTriggerEventType PhysicsTriggerEventType => physicsTriggerEventType; - private Component Component => component ? component : component = this; - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() .Select(x => EventMessage.Create(ConnectorType.PhysicsTriggerEvent, Component, PhysicsTriggerEventData.Create(PhysicsTriggerEventType, x))); + } private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 37b7699..277cfa2 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -12,12 +12,17 @@ namespace UniFlow.Connector public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = default; - [SerializeField] - [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] - private PlayableDirector playableDirector = default; + private PlayableControlMethod PlayableControlMethod => playableControlMethod; + [SerializeField] private TimelineAsset timelineAsset = default; + private TimelineAsset TimelineAsset + { + get => timelineAsset; + [UsedImplicitly] + set => timelineAsset = value; + } - private PlayableControlMethod PlayableControlMethod => playableControlMethod; + private PlayableDirector playableDirector = default; private PlayableDirector PlayableDirector { get => @@ -30,17 +35,12 @@ private PlayableDirector PlayableDirector [UsedImplicitly] set => playableDirector = value; } - private TimelineAsset TimelineAsset - { - get => timelineAsset; - [UsedImplicitly] - set => timelineAsset = value; - } private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() => - Observable + public override IObservable OnConnectAsObservable() + { + return Observable .Create( observer => { @@ -49,6 +49,7 @@ public override IObservable OnConnectAsObservable() => return Disposable; } ); + } private void InvokePlayableDirectorMethod() { diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index 7934ee3..5ae6eb5 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,16 +11,21 @@ namespace UniFlow.Connector public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private RectTransformEventType RectTransformEventType => rectTransformEventType; - private Component Component => component ? component : component = this; - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.RectTransformEvent, Component, RectTransformEventData.Create(RectTransformEventType))); + } private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 913ed5f..0ff8901 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -11,15 +11,17 @@ namespace UniFlow.Connector public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; + private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; + [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; - [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - - private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; private AnimationClip AnimationClip => animationClip; + + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; private AnimatorCullingMode CullingMode => cullingMode; + + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; private AnimatorUpdateMode UpdateMode => updateMode; private Animator animator = default; diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/TimelineSignal.cs index 83e65cd..64687a5 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/TimelineSignal.cs @@ -14,10 +14,13 @@ public class TimelineSignal : ConnectorBase { private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() => - Subject + public override IObservable OnConnectAsObservable() + { + return Subject + // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) .Select(x => EventMessage.Create(ConnectorType.TimelineSignal, this, x)); + } [UsedImplicitly] public void Dispatch() diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index 91be4ad..cba42cb 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -8,11 +9,18 @@ namespace UniFlow.Connector public class Timer : ConnectorBase { [SerializeField] private float seconds = default; - private float Seconds => seconds; + private float Seconds + { + get => seconds; + [UsedImplicitly] + set => seconds = value; + } - public override IObservable OnConnectAsObservable() => - Observable + public override IObservable OnConnectAsObservable() + { + return Observable .Timer(TimeSpan.FromSeconds(Seconds)) .Select(_ => EventMessage.Create(ConnectorType.Timer, this, Seconds)); + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 4f7871c..bd76269 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UniRx.Triggers; @@ -10,16 +11,21 @@ namespace UniFlow.Connector public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = default; - [SerializeField] - [Tooltip("If you do not specify it will be used self instance")] - private Component component = default; - private TransformEventType TransformEventType => transformEventType; - private Component Component => component ? component : component = this; - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() + private Component component = default; + private Component Component + { + get => component ? component : component = this; + [UsedImplicitly] + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() .Select(_ => EventMessage.Create(ConnectorType.TransformEvent, Component, TransformEventData.Create(TransformEventType))); + } private IObservable OnEventAsObservable() { diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index 6de7883..c428636 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -12,14 +13,19 @@ public class UIBehaviourEventTrigger : ConnectorBase [SerializeField] private EventTriggerType eventTriggerType = default; private EventTriggerType EventTriggerType => eventTriggerType; - [SerializeField] - [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private UIBehaviour uiBehaviour = default; - private UIBehaviour UIBehaviour => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); + private UIBehaviour UIBehaviour + { + get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); + [UsedImplicitly] + set => uiBehaviour = value; + } - public override IObservable OnConnectAsObservable() => - OnEventTriggerAsObservable() + public override IObservable OnConnectAsObservable() + { + return OnEventTriggerAsObservable() .Select(x => EventMessage.Create(ConnectorType.UIBehaviourEventTrigger, UIBehaviour, x)); + } private IObservable OnEventTriggerAsObservable() { From 878078b5998a1919e408190c069067722cd106d6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:03:40 +0900 Subject: [PATCH 018/453] :sparkles: Add setter for Connector properties --- Assets/Scripts/Connector/AnimationEvent.cs | 21 ++++++++++++-- Assets/Scripts/Connector/AnimatorTrigger.cs | 8 +++++- Assets/Scripts/Connector/AudioController.cs | 14 ++++++++-- Assets/Scripts/Connector/AudioEvent.cs | 14 ++++++++-- Assets/Scripts/Connector/CameraEvent.cs | 7 ++++- Assets/Scripts/Connector/LifecycleEvent.cs | 7 ++++- Assets/Scripts/Connector/LoadSceneEvent.cs | 9 +++++- Assets/Scripts/Connector/MouseEvent.cs | 7 ++++- Assets/Scripts/Connector/ParticleEvent.cs | 7 ++++- .../Connector/PhysicsCollision2DEvent.cs | 7 ++++- .../Connector/PhysicsCollisionEvent.cs | 7 ++++- .../Connector/PhysicsTrigger2DEvent.cs | 7 ++++- .../Scripts/Connector/PhysicsTriggerEvent.cs | 7 ++++- .../Scripts/Connector/PlayableController.cs | 7 ++++- .../Scripts/Connector/RectTransformEvent.cs | 7 ++++- .../Connector/SimpleAnimationController.cs | 28 ++++++++++++++++--- Assets/Scripts/Connector/TransformEvent.cs | 7 ++++- .../Connector/UIBehaviourEventTrigger.cs | 7 ++++- Assets/Scripts/Connector/UnloadSceneEvent.cs | 9 +++++- 19 files changed, 161 insertions(+), 26 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 22f9d54..06444b8 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -12,13 +12,28 @@ public class AnimationEvent : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; - private AnimationClip AnimationClip => animationClip; + private AnimationClip AnimationClip + { + get => animationClip; + [UsedImplicitly] + set => animationClip = value; + } [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - private AnimatorCullingMode CullingMode => cullingMode; + private AnimatorCullingMode CullingMode + { + get => cullingMode; + [UsedImplicitly] + set => cullingMode = value; + } [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - private AnimatorUpdateMode UpdateMode => updateMode; + private AnimatorUpdateMode UpdateMode + { + get => updateMode; + [UsedImplicitly] + set => updateMode = value; + } private Animator animator = default; private Animator Animator diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index 2f67103..521fc12 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniFlow.Message; using UniRx; using UnityEngine; @@ -14,7 +15,12 @@ public class AnimatorTrigger : ConnectorBase private Animator Animator => animator ? animator : animator = GetComponent(); [SerializeField] private string triggerName = default; - private string TriggerName => triggerName; + private string TriggerName + { + get => triggerName; + [UsedImplicitly] + set => triggerName = value; + } private int TriggerId => Animator.StringToHash(TriggerName); diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index fae9e4d..0c60d57 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -10,12 +10,22 @@ namespace UniFlow.Connector public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; - private AudioControlMethod AudioControlMethod => audioControlMethod; + private AudioControlMethod AudioControlMethod + { + get => audioControlMethod; + [UsedImplicitly] + set => audioControlMethod = value; + } [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - private AudioClip AudioClip => audioClip; + private AudioClip AudioClip + { + get => audioClip; + [UsedImplicitly] + set => audioClip = value; + } private AudioSource audioSource = default; private AudioSource AudioSource diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index a1874ed..e3c8528 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -10,12 +10,22 @@ namespace UniFlow.Connector public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; - private AudioEventType AudioEventType => audioEventType; + private AudioEventType AudioEventType + { + get => audioEventType; + [UsedImplicitly] + set => audioEventType = value; + } [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - private AudioClip AudioClip => audioClip; + private AudioClip AudioClip + { + get => audioClip; + [UsedImplicitly] + set => audioClip = value; + } private AudioSource audioSource = default; private AudioSource AudioSource diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index 432ecb6..15afd5e 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = default; - private CameraEventType CameraEventType => cameraEventType; + private CameraEventType CameraEventType + { + get => cameraEventType; + [UsedImplicitly] + set => cameraEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index 3138ade..196b8b6 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = default; - private LifecycleEventType LifecycleEventType => lifecycleEventType; + private LifecycleEventType LifecycleEventType + { + get => lifecycleEventType; + [UsedImplicitly] + set => lifecycleEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index 76a7800..280af64 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; using UniRx; using UniRx.Async; using UnityEngine; @@ -11,7 +13,12 @@ namespace UniFlow.Connector public class LoadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; - private IEnumerable SceneNames => sceneNames; + private IEnumerable SceneNames + { + get => sceneNames; + [UsedImplicitly] + set => sceneNames = value.ToList(); + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 66f9908..9a14e7c 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = default; - private MouseEventType MouseEventType => mouseEventType; + private MouseEventType MouseEventType + { + get => mouseEventType; + [UsedImplicitly] + set => mouseEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index 8dc82e7..1f0f4f6 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = default; - private ParticleEventType ParticleEventType => particleEventType; + private ParticleEventType ParticleEventType + { + get => particleEventType; + [UsedImplicitly] + set => particleEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index c6985b5..97189fe 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; - private PhysicsCollision2DEventType PhysicsCollision2DEventType => physicsCollision2DEventType; + private PhysicsCollision2DEventType PhysicsCollision2DEventType + { + get => physicsCollision2DEventType; + [UsedImplicitly] + set => physicsCollision2DEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index dfdb24d..b53a1cf 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; - private PhysicsCollisionEventType PhysicsCollisionEventType => physicsCollisionEventType; + private PhysicsCollisionEventType PhysicsCollisionEventType + { + get => physicsCollisionEventType; + [UsedImplicitly] + set => physicsCollisionEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 8b1150f..c27166e 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; - private PhysicsTrigger2DEventType PhysicsTrigger2DEventType => physicsTrigger2DEventType; + private PhysicsTrigger2DEventType PhysicsTrigger2DEventType + { + get => physicsTrigger2DEventType; + [UsedImplicitly] + set => physicsTrigger2DEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 6f1e67e..d3dbc27 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; - private PhysicsTriggerEventType PhysicsTriggerEventType => physicsTriggerEventType; + private PhysicsTriggerEventType PhysicsTriggerEventType + { + get => physicsTriggerEventType; + [UsedImplicitly] + set => physicsTriggerEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 277cfa2..667f6f1 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -12,7 +12,12 @@ namespace UniFlow.Connector public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = default; - private PlayableControlMethod PlayableControlMethod => playableControlMethod; + private PlayableControlMethod PlayableControlMethod + { + get => playableControlMethod; + [UsedImplicitly] + set => playableControlMethod = value; + } [SerializeField] private TimelineAsset timelineAsset = default; private TimelineAsset TimelineAsset diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index 5ae6eb5..ec1c3fa 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = default; - private RectTransformEventType RectTransformEventType => rectTransformEventType; + private RectTransformEventType RectTransformEventType + { + get => rectTransformEventType; + [UsedImplicitly] + set => rectTransformEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 0ff8901..7f0cd23 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -11,18 +11,38 @@ namespace UniFlow.Connector public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; - private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; + private SimpleAnimationControlMethod SimpleAnimationControlMethod + { + get => simpleAnimationControlMethod; + [UsedImplicitly] + set => simpleAnimationControlMethod = value; + } [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; - private AnimationClip AnimationClip => animationClip; + private AnimationClip AnimationClip + { + get => animationClip; + [UsedImplicitly] + set => animationClip = value; + } [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - private AnimatorCullingMode CullingMode => cullingMode; + private AnimatorCullingMode CullingMode + { + get => cullingMode; + [UsedImplicitly] + set => cullingMode = value; + } [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - private AnimatorUpdateMode UpdateMode => updateMode; + private AnimatorUpdateMode UpdateMode + { + get => updateMode; + [UsedImplicitly] + set => updateMode = value; + } private Animator animator = default; private Animator Animator diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index bd76269..cbbb459 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = default; - private TransformEventType TransformEventType => transformEventType; + private TransformEventType TransformEventType + { + get => transformEventType; + [UsedImplicitly] + set => transformEventType = value; + } private Component component = default; private Component Component diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index c428636..d13e0ac 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -11,7 +11,12 @@ namespace UniFlow.Connector public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = default; - private EventTriggerType EventTriggerType => eventTriggerType; + private EventTriggerType EventTriggerType + { + get => eventTriggerType; + [UsedImplicitly] + set => eventTriggerType = value; + } private UIBehaviour uiBehaviour = default; private UIBehaviour UIBehaviour diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index 6407160..fc433e6 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; using UniRx; using UniRx.Async; using UnityEngine; @@ -11,7 +13,12 @@ namespace UniFlow.Connector public class UnloadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; - private IEnumerable SceneNames => sceneNames; + private IEnumerable SceneNames + { + get => sceneNames; + [UsedImplicitly] + set => sceneNames = value.ToList(); + } public override IObservable OnConnectAsObservable() { From 8fa008e73385cd629b574e73b2ba3fa47eaf896d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:05:34 +0900 Subject: [PATCH 019/453] :sparkles: Avoid ArgumentException * Avoid `ArgumentException: Value does not fall within the expected range.` --- Assets/Scripts/ConnectorBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 856fc98..717e9cd 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -24,7 +24,7 @@ [SerializeField] [Tooltip("Set true to allow to act as the receiver")] private IEnumerable TargetConnectors => new List() .Concat(targetComponents ?? new List()) - .Concat((targetIds ?? new List()).SelectMany(Container.ResolveIdAll)) + .Concat((targetIds ?? new List()).SelectMany(x => Container?.ResolveIdAll(x))) .Where(x => !ReferenceEquals(x, this)) .ToArray(); From 48aac41d7cd9c98a809c112426a829ecfeec17df Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:24:38 +0900 Subject: [PATCH 020/453] :sparkles: Add ConnectorType.Custom --- Assets/Scripts/ConnectorType.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 6bb4fdb..11bbe90 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -29,5 +29,7 @@ public enum ConnectorType Timer, Interval, Empty, + + Custom, } } \ No newline at end of file From 9466f3d64ed8ccb90f08d4f309c7b323fc19155e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:37:47 +0900 Subject: [PATCH 021/453] :clipboard: Bump up version to v0.1.0-preview.6 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 42ab12f..36ffbdb 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.0.5-preview.6", + "version": "0.1.0-preview.6", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From ac39d300b2f1cf905a595bc83a3305395e4b6449 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:40:20 +0900 Subject: [PATCH 022/453] :sparkles: Add Receiver.Log --- Assets/Scripts/Receiver/Log.cs | 26 ++++++++++++++++++++++++++ Assets/Scripts/Receiver/Log.cs.meta | 3 +++ 2 files changed, 29 insertions(+) create mode 100644 Assets/Scripts/Receiver/Log.cs create mode 100644 Assets/Scripts/Receiver/Log.cs.meta diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs new file mode 100644 index 0000000..db0c4e1 --- /dev/null +++ b/Assets/Scripts/Receiver/Log.cs @@ -0,0 +1,26 @@ +using System.Text; +using UnityEngine; + +namespace UniFlow.Receiver +{ + [AddComponentMenu("UniFlow/Receiver/Log", 20001)] + public class Log : ReceiverBase + { + public override void OnReceive(EventMessages eventMessages) + { + var sb = new StringBuilder(); + sb.AppendLine($"EventCount: {eventMessages.Count}"); + sb.AppendLine("EventMessages:"); + var index = 0; + foreach (var eventMessage in eventMessages) + { + sb.AppendLine($" {index}"); + sb.AppendLine($" Type:\n {eventMessage.ConnectorType}"); + sb.AppendLine($" Sender:\n {eventMessage.Sender.ToString().Replace("\n", "\n ")}"); + sb.AppendLine($" Data:\n {eventMessage.Data.ToString().Replace("\n", "\n ")}"); + index++; + } + Debug.Log(sb.ToString()); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Receiver/Log.cs.meta b/Assets/Scripts/Receiver/Log.cs.meta new file mode 100644 index 0000000..d2525af --- /dev/null +++ b/Assets/Scripts/Receiver/Log.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b50bafffc2a14308b4639d318d8ba1e8 +timeCreated: 1565418430 \ No newline at end of file From 699b5ef52b1ee7403bc732d2e169c171881cbc1b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:40:36 +0900 Subject: [PATCH 023/453] :sparkles: Setup AddComponentMenu to Receiver.Empty --- Assets/Scripts/Receiver/Empty.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Scripts/Receiver/Empty.cs b/Assets/Scripts/Receiver/Empty.cs index b2e4463..a6a1330 100644 --- a/Assets/Scripts/Receiver/Empty.cs +++ b/Assets/Scripts/Receiver/Empty.cs @@ -1,5 +1,8 @@ +using UnityEngine; + namespace UniFlow.Receiver { + [AddComponentMenu("UniFlow/Receiver/Empty", 20000)] public class Empty : ReceiverBase { public override void OnReceive(EventMessages eventMessages) From 456c57491469fbe29293fa3819cd775247791449 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 11 Aug 2019 11:49:41 +0900 Subject: [PATCH 024/453] :sparkles: Make accessors to public --- Assets/Scripts/Connector/AnimationEvent.cs | 15 +++++---------- Assets/Scripts/Connector/AnimatorTrigger.cs | 9 ++++++--- Assets/Scripts/Connector/AudioController.cs | 9 +++------ Assets/Scripts/Connector/AudioEvent.cs | 9 +++------ Assets/Scripts/Connector/CameraEvent.cs | 6 ++---- Assets/Scripts/Connector/Interval.cs | 3 +-- Assets/Scripts/Connector/LifecycleEvent.cs | 6 ++---- Assets/Scripts/Connector/LoadSceneEvent.cs | 3 +-- Assets/Scripts/Connector/MouseEvent.cs | 6 ++---- Assets/Scripts/Connector/ParticleEvent.cs | 6 ++---- .../Connector/PhysicsCollision2DEvent.cs | 6 ++---- .../Scripts/Connector/PhysicsCollisionEvent.cs | 6 ++---- .../Scripts/Connector/PhysicsTrigger2DEvent.cs | 6 ++---- .../Scripts/Connector/PhysicsTriggerEvent.cs | 6 ++---- Assets/Scripts/Connector/PlayableController.cs | 8 +++----- Assets/Scripts/Connector/RectTransformEvent.cs | 6 ++---- .../Connector/SimpleAnimationController.cs | 18 ++++++------------ Assets/Scripts/Connector/Timer.cs | 3 +-- Assets/Scripts/Connector/TransformEvent.cs | 6 ++---- .../Connector/UIBehaviourEventTrigger.cs | 6 ++---- Assets/Scripts/Connector/UnloadSceneEvent.cs | 3 +-- 21 files changed, 52 insertions(+), 94 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 06444b8..f28b170 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -12,31 +12,28 @@ public class AnimationEvent : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; - private AnimationClip AnimationClip + [UsedImplicitly] public AnimationClip AnimationClip { get => animationClip; - [UsedImplicitly] set => animationClip = value; } [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - private AnimatorCullingMode CullingMode + [UsedImplicitly] public AnimatorCullingMode CullingMode { get => cullingMode; - [UsedImplicitly] set => cullingMode = value; } [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - private AnimatorUpdateMode UpdateMode + [UsedImplicitly] public AnimatorUpdateMode UpdateMode { get => updateMode; - [UsedImplicitly] set => updateMode = value; } private Animator animator = default; - private Animator Animator + [UsedImplicitly] public Animator Animator { get => animator != default @@ -45,12 +42,11 @@ private Animator Animator GetComponent() != default ? GetComponent() : gameObject.AddComponent(); - [UsedImplicitly] set => animator = value; } private SimpleAnimation simpleAnimation = default; - private SimpleAnimation SimpleAnimation + [UsedImplicitly] public SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -60,7 +56,6 @@ private SimpleAnimation SimpleAnimation ? GetComponent() : gameObject.AddComponent() ; - [UsedImplicitly] set => simpleAnimation = value; } diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index 521fc12..bfa1cf6 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -12,13 +12,16 @@ public class AnimatorTrigger : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private Animator animator = default; - private Animator Animator => animator ? animator : animator = GetComponent(); + [UsedImplicitly] public Animator Animator + { + get => animator ? animator : animator = GetComponent(); + set => animator = value; + } [SerializeField] private string triggerName = default; - private string TriggerName + [UsedImplicitly] public string TriggerName { get => triggerName; - [UsedImplicitly] set => triggerName = value; } diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 0c60d57..a5d83fd 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -10,25 +10,23 @@ namespace UniFlow.Connector public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; - private AudioControlMethod AudioControlMethod + [UsedImplicitly] public AudioControlMethod AudioControlMethod { get => audioControlMethod; - [UsedImplicitly] set => audioControlMethod = value; } [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - private AudioClip AudioClip + [UsedImplicitly] public AudioClip AudioClip { get => audioClip; - [UsedImplicitly] set => audioClip = value; } private AudioSource audioSource = default; - private AudioSource AudioSource + [UsedImplicitly] public AudioSource AudioSource { get => audioSource != default @@ -37,7 +35,6 @@ private AudioSource AudioSource GetComponent() != default ? GetComponent() : gameObject.AddComponent(); - [UsedImplicitly] set => audioSource = value; } diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index e3c8528..8cc2ae6 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -10,25 +10,23 @@ namespace UniFlow.Connector public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; - private AudioEventType AudioEventType + [UsedImplicitly] public AudioEventType AudioEventType { get => audioEventType; - [UsedImplicitly] set => audioEventType = value; } [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - private AudioClip AudioClip + [UsedImplicitly] public AudioClip AudioClip { get => audioClip; - [UsedImplicitly] set => audioClip = value; } private AudioSource audioSource = default; - private AudioSource AudioSource + [UsedImplicitly] public AudioSource AudioSource { get => audioSource != default @@ -37,7 +35,6 @@ private AudioSource AudioSource GetComponent() != default ? GetComponent() : gameObject.AddComponent(); - [UsedImplicitly] set => audioSource = value; } diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index 15afd5e..f924f3a 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = default; - private CameraEventType CameraEventType + [UsedImplicitly] public CameraEventType CameraEventType { get => cameraEventType; - [UsedImplicitly] set => cameraEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index 0201228..b2cee50 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -9,10 +9,9 @@ namespace UniFlow.Connector public class Interval : ConnectorBase { [SerializeField] private float seconds = default; - private float Seconds + [UsedImplicitly] public float Seconds { get => seconds; - [UsedImplicitly] set => seconds = value; } diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index 196b8b6..6cc044c 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = default; - private LifecycleEventType LifecycleEventType + [UsedImplicitly] public LifecycleEventType LifecycleEventType { get => lifecycleEventType; - [UsedImplicitly] set => lifecycleEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index 280af64..c7e59d0 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -13,10 +13,9 @@ namespace UniFlow.Connector public class LoadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; - private IEnumerable SceneNames + [UsedImplicitly] public IEnumerable SceneNames { get => sceneNames; - [UsedImplicitly] set => sceneNames = value.ToList(); } diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 9a14e7c..d3ef95e 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = default; - private MouseEventType MouseEventType + [UsedImplicitly] public MouseEventType MouseEventType { get => mouseEventType; - [UsedImplicitly] set => mouseEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index 1f0f4f6..82609ab 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = default; - private ParticleEventType ParticleEventType + [UsedImplicitly] public ParticleEventType ParticleEventType { get => particleEventType; - [UsedImplicitly] set => particleEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 97189fe..735ad1a 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; - private PhysicsCollision2DEventType PhysicsCollision2DEventType + [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType { get => physicsCollision2DEventType; - [UsedImplicitly] set => physicsCollision2DEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index b53a1cf..a64a75f 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; - private PhysicsCollisionEventType PhysicsCollisionEventType + [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType { get => physicsCollisionEventType; - [UsedImplicitly] set => physicsCollisionEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index c27166e..65d7624 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; - private PhysicsTrigger2DEventType PhysicsTrigger2DEventType + [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType { get => physicsTrigger2DEventType; - [UsedImplicitly] set => physicsTrigger2DEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index d3dbc27..0b99a70 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; - private PhysicsTriggerEventType PhysicsTriggerEventType + [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType { get => physicsTriggerEventType; - [UsedImplicitly] set => physicsTriggerEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 667f6f1..dd35da1 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -12,23 +12,21 @@ namespace UniFlow.Connector public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = default; - private PlayableControlMethod PlayableControlMethod + [UsedImplicitly] public PlayableControlMethod PlayableControlMethod { get => playableControlMethod; - [UsedImplicitly] set => playableControlMethod = value; } [SerializeField] private TimelineAsset timelineAsset = default; - private TimelineAsset TimelineAsset + [UsedImplicitly] public TimelineAsset TimelineAsset { get => timelineAsset; - [UsedImplicitly] set => timelineAsset = value; } private PlayableDirector playableDirector = default; - private PlayableDirector PlayableDirector + [UsedImplicitly] public PlayableDirector PlayableDirector { get => playableDirector != default diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index ec1c3fa..eb96251 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = default; - private RectTransformEventType RectTransformEventType + [UsedImplicitly] public RectTransformEventType RectTransformEventType { get => rectTransformEventType; - [UsedImplicitly] set => rectTransformEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 7f0cd23..a01511a 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -11,41 +11,37 @@ namespace UniFlow.Connector public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; - private SimpleAnimationControlMethod SimpleAnimationControlMethod + [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod { get => simpleAnimationControlMethod; - [UsedImplicitly] set => simpleAnimationControlMethod = value; } [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; - private AnimationClip AnimationClip + [UsedImplicitly] public AnimationClip AnimationClip { get => animationClip; - [UsedImplicitly] set => animationClip = value; } [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - private AnimatorCullingMode CullingMode + [UsedImplicitly] public AnimatorCullingMode CullingMode { get => cullingMode; - [UsedImplicitly] set => cullingMode = value; } [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - private AnimatorUpdateMode UpdateMode + [UsedImplicitly] public AnimatorUpdateMode UpdateMode { get => updateMode; - [UsedImplicitly] set => updateMode = value; } private Animator animator = default; - private Animator Animator + [UsedImplicitly] public Animator Animator { get => animator != default @@ -54,12 +50,11 @@ private Animator Animator GetComponent() != default ? GetComponent() : gameObject.AddComponent(); - [UsedImplicitly] set => animator = value; } private SimpleAnimation simpleAnimation = default; - private SimpleAnimation SimpleAnimation + [UsedImplicitly] public SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -69,7 +64,6 @@ private SimpleAnimation SimpleAnimation ? GetComponent() : gameObject.AddComponent() ; - [UsedImplicitly] set => simpleAnimation = value; } diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index cba42cb..0cb0537 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -9,10 +9,9 @@ namespace UniFlow.Connector public class Timer : ConnectorBase { [SerializeField] private float seconds = default; - private float Seconds + [UsedImplicitly] public float Seconds { get => seconds; - [UsedImplicitly] set => seconds = value; } diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index cbbb459..837acc2 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = default; - private TransformEventType TransformEventType + [UsedImplicitly] public TransformEventType TransformEventType { get => transformEventType; - [UsedImplicitly] set => transformEventType = value; } private Component component = default; - private Component Component + [UsedImplicitly] public Component Component { get => component ? component : component = this; - [UsedImplicitly] set => component = value; } diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index d13e0ac..22b4720 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -11,18 +11,16 @@ namespace UniFlow.Connector public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = default; - private EventTriggerType EventTriggerType + [UsedImplicitly] public EventTriggerType EventTriggerType { get => eventTriggerType; - [UsedImplicitly] set => eventTriggerType = value; } private UIBehaviour uiBehaviour = default; - private UIBehaviour UIBehaviour + [UsedImplicitly] public UIBehaviour UIBehaviour { get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); - [UsedImplicitly] set => uiBehaviour = value; } diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index fc433e6..178f4f2 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -13,10 +13,9 @@ namespace UniFlow.Connector public class UnloadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; - private IEnumerable SceneNames + [UsedImplicitly] public IEnumerable SceneNames { get => sceneNames; - [UsedImplicitly] set => sceneNames = value.ToList(); } From edbc00b7ea6b2f27828817a26a0295b1d877c6f7 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 13 Aug 2019 20:10:13 +0900 Subject: [PATCH 025/453] :sparkles: Add ConnectorType.KeyEvent --- Assets/Scripts/ConnectorType.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 11bbe90..ea63577 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -9,6 +9,7 @@ public enum ConnectorType CameraEvent, ParticleEvent, MouseEvent, + KeyEvent, PhysicsCollisionEvent, PhysicsCollision2DEvent, From a61d85fabcce948f22d4513d276f6e9116b1e3af Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 13 Aug 2019 20:10:36 +0900 Subject: [PATCH 026/453] :sparkles: Implement Connector.KeyEvent --- Assets/Scripts/Connector/KeyEvent.cs | 53 +++++++++++++++++++++ Assets/Scripts/Connector/KeyEvent.cs.meta | 3 ++ Assets/Scripts/Message/KeyEventData.cs | 24 ++++++++++ Assets/Scripts/Message/KeyEventData.cs.meta | 3 ++ 4 files changed, 83 insertions(+) create mode 100644 Assets/Scripts/Connector/KeyEvent.cs create mode 100644 Assets/Scripts/Connector/KeyEvent.cs.meta create mode 100644 Assets/Scripts/Message/KeyEventData.cs create mode 100644 Assets/Scripts/Message/KeyEventData.cs.meta diff --git a/Assets/Scripts/Connector/KeyEvent.cs b/Assets/Scripts/Connector/KeyEvent.cs new file mode 100644 index 0000000..d02f064 --- /dev/null +++ b/Assets/Scripts/Connector/KeyEvent.cs @@ -0,0 +1,53 @@ +using System; +using UniFlow.Message; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector +{ + public class KeyEvent : ConnectorBase + { + [SerializeField] private KeyCode keyCode = default; + private KeyCode KeyCode => keyCode; + + [SerializeField] private KeyEventType keyEventType = default; + private KeyEventType KeyEventType => keyEventType; + + public override IObservable OnConnectAsObservable() + { + return KeyEventAsObservable().Select(_ => EventMessage.Create(ConnectorType.KeyEvent, this, KeyEventData.Create(KeyCode, KeyEventType))); + } + + private IObservable KeyEventAsObservable() + { + switch (KeyEventType) + { + case KeyEventType.Down: + return this + .UpdateAsObservable() + .Where(_ => Input.GetKeyDown(KeyCode)) + .AsUnitObservable(); + case KeyEventType.Press: + return this + .UpdateAsObservable() + .Where(_ => Input.GetKey(KeyCode)) + .AsUnitObservable(); + case KeyEventType.Up: + return this + .UpdateAsObservable() + .Where(_ => Input.GetKeyUp(KeyCode)) + .AsUnitObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum KeyEventType + { + Down, + Press, + Up, + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/KeyEvent.cs.meta b/Assets/Scripts/Connector/KeyEvent.cs.meta new file mode 100644 index 0000000..59f6701 --- /dev/null +++ b/Assets/Scripts/Connector/KeyEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8c14f3a3d8fe4aada21f6a9e1d371b9f +timeCreated: 1565693346 \ No newline at end of file diff --git a/Assets/Scripts/Message/KeyEventData.cs b/Assets/Scripts/Message/KeyEventData.cs new file mode 100644 index 0000000..804f7a5 --- /dev/null +++ b/Assets/Scripts/Message/KeyEventData.cs @@ -0,0 +1,24 @@ +using JetBrains.Annotations; +using UniFlow.Connector; +using UnityEngine; + +namespace UniFlow.Message +{ + [PublicAPI] + public class KeyEventData + { + private KeyEventData(KeyCode keyCode, KeyEventType keyEventType) + { + KeyCode = keyCode; + KeyEventType = keyEventType; + } + + public KeyCode KeyCode { get; } + public KeyEventType KeyEventType { get; } + + public static KeyEventData Create(KeyCode keyCode, KeyEventType keyEventType) + { + return new KeyEventData(keyCode, keyEventType); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/KeyEventData.cs.meta b/Assets/Scripts/Message/KeyEventData.cs.meta new file mode 100644 index 0000000..4e3f9da --- /dev/null +++ b/Assets/Scripts/Message/KeyEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 97be247201f14f61b5cb573b4aad6392 +timeCreated: 1565693944 \ No newline at end of file From 87c76084cefda60ea901b8ee60d4edbc247c0856 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 14 Aug 2019 12:39:25 +0900 Subject: [PATCH 027/453] :clipboard: Add reference to ObservableTween --- Assets/UniFlow.asmdef | 1 + Packages/manifest.json | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Assets/UniFlow.asmdef b/Assets/UniFlow.asmdef index d69bf5e..53b9116 100644 --- a/Assets/UniFlow.asmdef +++ b/Assets/UniFlow.asmdef @@ -5,6 +5,7 @@ "GUID:aff632302a0b84b498c3f33f7639b4d3", "GUID:560b04d1a97f54a4e82edc0cbbb69285", "GUID:f51ebe6a0ceec4240a699833d6309b23", + "GUID:c571cab59b47e4b18969473a38df77be", "GUID:0d8beb7f090555447a6cf5ce9e54dbb4" ], "includePlatforms": [], diff --git a/Packages/manifest.json b/Packages/manifest.json index 64635d8..f83d213 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -30,7 +30,9 @@ "com.unity.timeline": "1.1.0", "com.unity.ugui": "1.0.0", "com.unity.xr.legacyinputhelpers": "2.0.2", + "dev.monry.unirx-observabletween": "0.0.1-preview.4", "jp.cysharp.unirx": "7.1.0", + "jp.cysharp.unitask": "1.0.0", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", @@ -61,7 +63,6 @@ "com.unity.modules.video": "1.0.0", "com.unity.modules.vr": "1.0.0", "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0", - "jp.cysharp.unitask": "1.0.0" + "com.unity.modules.xr": "1.0.0" } } From 55aceef6ecbaf18aa7adc18086dc13f2d3750062 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 14 Aug 2019 12:39:54 +0900 Subject: [PATCH 028/453] :sparkles: Implement TimeScaleController --- .../Scripts/Connector/TimeScaleController.cs | 49 +++++++++++++++++++ .../Connector/TimeScaleController.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 2 + 3 files changed, 54 insertions(+) create mode 100644 Assets/Scripts/Connector/TimeScaleController.cs create mode 100644 Assets/Scripts/Connector/TimeScaleController.cs.meta diff --git a/Assets/Scripts/Connector/TimeScaleController.cs b/Assets/Scripts/Connector/TimeScaleController.cs new file mode 100644 index 0000000..a483759 --- /dev/null +++ b/Assets/Scripts/Connector/TimeScaleController.cs @@ -0,0 +1,49 @@ +using System; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + [AddComponentMenu("UniFlow/TimeScaleController", 9002)] + public class TimeScaleController : ConnectorBase + { + [SerializeField] private float timeScale = default; + private float TimeScale => timeScale; + + [SerializeField] private float duration = default; + private float Duration => duration; + + [SerializeField] private ObservableTween.EaseType easeType = default; + private ObservableTween.EaseType EaseType => easeType; + + private ISubject OnCompleteTweenSubject { get; } = new Subject(); + + public override IObservable OnConnectAsObservable() + { + ChangeTimeScale(); + return OnCompleteTweenSubject.Select(_ => EventMessage.Create(ConnectorType.TimeScaleController, this)); + } + + private void ChangeTimeScale() + { + if (Mathf.Approximately(0.0f, Duration)) + { + Time.timeScale = TimeScale; + OnCompleteTweenSubject.OnNext(Unit.Default); + return; + } + + ObservableTween + .Tween( + Time.timeScale, + TimeScale, + Duration, + EaseType, + ObservableTween.LoopType.None, + () => OnCompleteTweenSubject.OnNext(Unit.Default), + true + ) + .Subscribe(x => Time.timeScale = x); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/TimeScaleController.cs.meta b/Assets/Scripts/Connector/TimeScaleController.cs.meta new file mode 100644 index 0000000..ea70738 --- /dev/null +++ b/Assets/Scripts/Connector/TimeScaleController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 296d09de4d5545b2898c66b8a4f7cbd9 +timeCreated: 1565694908 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 11bbe90..7f42020 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -28,8 +28,10 @@ public enum ConnectorType Timer, Interval, + TimeScaleController, Empty, + // ReSharper disable once UnusedMember.Global Custom, } } \ No newline at end of file From f1ac46bcf0f199ca01719b4d181d363b6a9b8af5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 14 Aug 2019 12:42:26 +0900 Subject: [PATCH 029/453] :sparkles: Support ignoring TimeScale --- Assets/Scripts/Connector/Interval.cs | 5 ++++- Assets/Scripts/Connector/Timer.cs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index b2cee50..3f03f3e 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -15,10 +15,13 @@ [UsedImplicitly] public float Seconds set => seconds = value; } + [SerializeField] private bool ignoreTimeScale = default; + private bool IgnoreTimeScale => ignoreTimeScale; + public override IObservable OnConnectAsObservable() { return Observable - .Interval(TimeSpan.FromSeconds(Seconds)) + .Interval(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) .Select(_ => EventMessage.Create(ConnectorType.Interval, this, Seconds)); } } diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index 0cb0537..505dec8 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -15,10 +15,13 @@ [UsedImplicitly] public float Seconds set => seconds = value; } + [SerializeField] private bool ignoreTimeScale = default; + private bool IgnoreTimeScale => ignoreTimeScale; + public override IObservable OnConnectAsObservable() { return Observable - .Timer(TimeSpan.FromSeconds(Seconds)) + .Timer(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) .Select(_ => EventMessage.Create(ConnectorType.Timer, this, Seconds)); } } From 93ec6c817ad23e712dac28e3245481ec03b89a33 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 14 Aug 2019 14:37:58 +0900 Subject: [PATCH 030/453] :beetle: Avoid error in Receiver.Log --- Assets/Scripts/Receiver/Log.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index db0c4e1..54cf12c 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -16,8 +16,8 @@ public override void OnReceive(EventMessages eventMessages) { sb.AppendLine($" {index}"); sb.AppendLine($" Type:\n {eventMessage.ConnectorType}"); - sb.AppendLine($" Sender:\n {eventMessage.Sender.ToString().Replace("\n", "\n ")}"); - sb.AppendLine($" Data:\n {eventMessage.Data.ToString().Replace("\n", "\n ")}"); + sb.AppendLine($" Sender:\n {eventMessage.Sender?.ToString().Replace("\n", "\n ")}"); + sb.AppendLine($" Data:\n {eventMessage.Data?.ToString().Replace("\n", "\n ")}"); index++; } Debug.Log(sb.ToString()); From c193d09f66772bc66d83b079fbe9c965aecf17e1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 14 Aug 2019 14:38:15 +0900 Subject: [PATCH 031/453] :beetle: Fix cannot find AnimationClip when using SimpleAnimationController --- Assets/Scripts/Connector/SimpleAnimationController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index a01511a..b272e6b 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -86,7 +86,7 @@ private void Awake() { // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. - if (AnimationClip != default && Animator == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) + if (AnimationClip != default && Animator != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) { SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); SimpleAnimation.cullingMode = CullingMode; From c9d7d7b6646145d197e677ac5ae7cc8e2de0a480 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 14 Aug 2019 14:55:43 +0900 Subject: [PATCH 032/453] :clipboard: Add Menu item for KeyEvent --- Assets/Scripts/Connector/KeyEvent.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/Connector/KeyEvent.cs b/Assets/Scripts/Connector/KeyEvent.cs index d02f064..8842a80 100644 --- a/Assets/Scripts/Connector/KeyEvent.cs +++ b/Assets/Scripts/Connector/KeyEvent.cs @@ -6,6 +6,7 @@ namespace UniFlow.Connector { + [AddComponentMenu("UniFlow/KeyEvent", 107)] public class KeyEvent : ConnectorBase { [SerializeField] private KeyCode keyCode = default; From 92d9d7fb906164dd98ff5fcbe00d2349e7163030 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:17:26 +0900 Subject: [PATCH 033/453] :sparkles: Use enum for order of AddComponentMenu --- Assets/Scripts/Connector/AnimationEvent.cs | 2 +- Assets/Scripts/Connector/AnimatorTrigger.cs | 2 +- Assets/Scripts/Connector/AudioController.cs | 2 +- Assets/Scripts/Connector/AudioEvent.cs | 2 +- Assets/Scripts/Connector/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Empty.cs | 2 +- Assets/Scripts/Connector/Interval.cs | 2 +- Assets/Scripts/Connector/KeyEvent.cs | 2 +- Assets/Scripts/Connector/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/LoadSceneEvent.cs | 2 +- Assets/Scripts/Connector/MouseEvent.cs | 2 +- Assets/Scripts/Connector/ParticleEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollision2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollisionEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTriggerEvent.cs | 2 +- Assets/Scripts/Connector/PlayableController.cs | 2 +- Assets/Scripts/Connector/RectTransformEvent.cs | 2 +- .../Scripts/Connector/SimpleAnimationController.cs | 2 +- Assets/Scripts/Connector/TimeScaleController.cs | 2 +- Assets/Scripts/Connector/TimelineSignal.cs | 2 +- Assets/Scripts/Connector/Timer.cs | 2 +- Assets/Scripts/Connector/TransformEvent.cs | 2 +- Assets/Scripts/Connector/UIBehaviourEventTrigger.cs | 2 +- Assets/Scripts/Connector/UnloadSceneEvent.cs | 2 +- Assets/Scripts/ConnectorType.cs | 13 +++++++------ 26 files changed, 32 insertions(+), 31 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index f28b170..53e18ec 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/AnimationEvent", 302)] + [AddComponentMenu("UniFlow/AnimationEvent", (int) ConnectorType.AnimationEvent)] public class AnimationEvent : ConnectorBase { [SerializeField] diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index bfa1cf6..549f79a 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/AnimatorTrigger", 301)] + [AddComponentMenu("UniFlow/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] public class AnimatorTrigger : ConnectorBase { [SerializeField] diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index a5d83fd..7f1f938 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/AudioController", 303)] + [AddComponentMenu("UniFlow/AudioController", (int) ConnectorType.AudioController)] public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index 8cc2ae6..d24f1aa 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/AudioEvent", 304)] + [AddComponentMenu("UniFlow/AudioEvent", (int) ConnectorType.AudioEvent)] public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index f924f3a..316a585 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/CameraEvent", 104)] + [AddComponentMenu("UniFlow/CameraEvent", (int) ConnectorType.CameraEvent)] public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = default; diff --git a/Assets/Scripts/Connector/Empty.cs b/Assets/Scripts/Connector/Empty.cs index 0b06f4c..66ffeec 100644 --- a/Assets/Scripts/Connector/Empty.cs +++ b/Assets/Scripts/Connector/Empty.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/Empty", 10000)] + [AddComponentMenu("UniFlow/Empty", (int) ConnectorType.Empty)] public class Empty : ConnectorBase { public override IObservable OnConnectAsObservable() => diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index 3f03f3e..90ca55f 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/Interval", 9001)] + [AddComponentMenu("UniFlow/Interval", (int) ConnectorType.Interval)] public class Interval : ConnectorBase { [SerializeField] private float seconds = default; diff --git a/Assets/Scripts/Connector/KeyEvent.cs b/Assets/Scripts/Connector/KeyEvent.cs index 8842a80..3af6717 100644 --- a/Assets/Scripts/Connector/KeyEvent.cs +++ b/Assets/Scripts/Connector/KeyEvent.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/KeyEvent", 107)] + [AddComponentMenu("UniFlow/KeyEvent", (int) ConnectorType.KeyEvent)] public class KeyEvent : ConnectorBase { [SerializeField] private KeyCode keyCode = default; diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index 6cc044c..6071194 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/LifecycleEvent", 100)] + [AddComponentMenu("UniFlow/LifecycleEvent", (int) ConnectorType.LifecycleEvent)] public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = default; diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index c7e59d0..ad54d2b 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/LoadScene", 400)] + [AddComponentMenu("UniFlow/LoadScene", (int) ConnectorType.LoadScene)] public class LoadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index d3ef95e..53b634e 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/MouseEvent", 106)] + [AddComponentMenu("UniFlow/MouseEvent", (int) ConnectorType.MouseEvent)] public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = default; diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index 82609ab..cbef366 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/ParticleEvent", 105)] + [AddComponentMenu("UniFlow/ParticleEvent", (int) ConnectorType.ParticleEvent)] public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 735ad1a..2712cdc 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/PhyticsCollision2DEvent", 201)] + [AddComponentMenu("UniFlow/PhyticsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index a64a75f..11cb546 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/PhysicsCollisionEvent", 200)] + [AddComponentMenu("UniFlow/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 65d7624..c14686b 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/PhysicsTrigger2DEvent", 203)] + [AddComponentMenu("UniFlow/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 0b99a70..630c1df 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/PhyticsTriggerEvent", 202)] + [AddComponentMenu("UniFlow/PhyticsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index dd35da1..85ad466 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/PlayableController", 305)] + [AddComponentMenu("UniFlow/PlayableController", (int) ConnectorType.PlayableController)] public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = default; diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index eb96251..f06622e 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/RectTransformEvent", 103)] + [AddComponentMenu("UniFlow/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = default; diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index b272e6b..82facc6 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/SimpleAnimationController", 300)] + [AddComponentMenu("UniFlow/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; diff --git a/Assets/Scripts/Connector/TimeScaleController.cs b/Assets/Scripts/Connector/TimeScaleController.cs index a483759..8cf0650 100644 --- a/Assets/Scripts/Connector/TimeScaleController.cs +++ b/Assets/Scripts/Connector/TimeScaleController.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/TimeScaleController", 9002)] + [AddComponentMenu("UniFlow/TimeScaleController", (int) ConnectorType.TimeScaleController)] public class TimeScaleController : ConnectorBase { [SerializeField] private float timeScale = default; diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/TimelineSignal.cs index 64687a5..51d93c1 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/TimelineSignal.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector { // Timeline SignalReceiver cannot serialize [Serializable] class // So I provide overloads to construct TimelineEventData - [AddComponentMenu("UniFlow/TimelineSignal", 306)] + [AddComponentMenu("UniFlow/TimelineSignal", (int) ConnectorType.TimelineSignal)] public class TimelineSignal : ConnectorBase { private ISubject Subject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index 505dec8..e71094d 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/Timer", 9000)] + [AddComponentMenu("UniFlow/Timer", (int) ConnectorType.Timer)] public class Timer : ConnectorBase { [SerializeField] private float seconds = default; diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 837acc2..2236584 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/TransformEvent", 102)] + [AddComponentMenu("UniFlow/TransformEvent", (int) ConnectorType.TransformEvent)] public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = default; diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index 22b4720..34d0458 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/UIBehaviourEventTrigger", 101)] + [AddComponentMenu("UniFlow/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = default; diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index 178f4f2..4a781e3 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/UnloadScene", 401)] + [AddComponentMenu("UniFlow/UnloadScene", (int) ConnectorType.UnloadScene)] public class UnloadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index dd69d17..23d85b5 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -2,7 +2,7 @@ namespace UniFlow { public enum ConnectorType { - LifecycleEvent = 1, + LifecycleEvent = 100, UIBehaviourEventTrigger, TransformEvent, RectTransformEvent, @@ -11,28 +11,29 @@ public enum ConnectorType MouseEvent, KeyEvent, - PhysicsCollisionEvent, + PhysicsCollisionEvent = 200, PhysicsCollision2DEvent, PhysicsTriggerEvent, PhysicsTrigger2DEvent, + SimpleAnimationController = 300, AnimatorTrigger, - SimpleAnimationController, AnimationEvent, AudioController, AudioEvent, PlayableController, TimelineSignal, + RaycasterController, - LoadScene, + LoadScene = 400, UnloadScene, - Timer, + Timer = 9000, Interval, TimeScaleController, Empty, // ReSharper disable once UnusedMember.Global - Custom, + Custom = -1, } } \ No newline at end of file From 6c87fc617d17dd754f44a6bc6be7444764f3ee9d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:17:59 +0900 Subject: [PATCH 034/453] :sparkles: Expose setter and AddConnectable for Editor extensions --- Assets/Scripts/ConnectorBase.cs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 717e9cd..18f54aa 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using JetBrains.Annotations; using UniRx; using UnityEngine; using Zenject; @@ -28,8 +29,18 @@ [SerializeField] [Tooltip("Set true to allow to act as the receiver")] .Where(x => !ReferenceEquals(x, this)) .ToArray(); - private bool ActAsTrigger => actAsTrigger; - private bool ActAsReceiver => actAsReceiver; + [UsedImplicitly] public bool ActAsTrigger + { + get => actAsTrigger; + set => actAsTrigger = value; + } + + [UsedImplicitly] public bool ActAsReceiver + { + get => actAsReceiver; + set => actAsReceiver = value; + } + [Inject] private DiContainer Container { get; } protected virtual void Start() @@ -64,5 +75,14 @@ void IConnector.Connect(IObservable source) } public abstract IObservable OnConnectAsObservable(); + + public void AddConnectable(ConnectableBase connectable) + { + if (targetComponents == default) + { + targetComponents = new List(); + } + targetComponents.Add(connectable); + } } } \ No newline at end of file From 56f95ce00efa4e2d0f699d183d7bf91a525bdf43 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:19:00 +0900 Subject: [PATCH 035/453] :sparkles: Implement RaycasterController --- .../Scripts/Connector/RaycasterController.cs | 57 +++++++++++++++++++ .../Connector/RaycasterController.cs.meta | 3 + .../Message/RaycasterControllerEventData.cs | 19 +++++++ .../RaycasterControllerEventData.cs.meta | 3 + 4 files changed, 82 insertions(+) create mode 100644 Assets/Scripts/Connector/RaycasterController.cs create mode 100644 Assets/Scripts/Connector/RaycasterController.cs.meta create mode 100644 Assets/Scripts/Message/RaycasterControllerEventData.cs create mode 100644 Assets/Scripts/Message/RaycasterControllerEventData.cs.meta diff --git a/Assets/Scripts/Connector/RaycasterController.cs b/Assets/Scripts/Connector/RaycasterController.cs new file mode 100644 index 0000000..f138b6b --- /dev/null +++ b/Assets/Scripts/Connector/RaycasterController.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace UniFlow.Connector +{ + [AddComponentMenu("UniFlow/RaycasterController", (int) ConnectorType.RaycasterController)] + public class RaycasterController : ConnectorBase + { + [SerializeField] private List raycasters = default; + [SerializeField] private RaycasterControlMethod raycasterControlMethod = default; + + [UsedImplicitly] private IEnumerable Raycasters + { + get => raycasters; + set => raycasters = value.ToList(); + } + + [UsedImplicitly] private RaycasterControlMethod RaycasterControlMethod + { + get => raycasterControlMethod; + set => raycasterControlMethod = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + return Observable + .Create( + observer => + { + HandleActivation(); + observer.OnNext(EventMessage.Create(ConnectorType.RaycasterController, this, RaycasterControllerEventData.Create(RaycasterControlMethod))); + return Disposable; + } + ); + } + + private void HandleActivation() + { + Raycasters.ToList().ForEach(x => x.enabled = RaycasterControlMethod == RaycasterControlMethod.Activate); + } + } + + [PublicAPI] + public enum RaycasterControlMethod + { + Activate, + Deactivate, + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/RaycasterController.cs.meta b/Assets/Scripts/Connector/RaycasterController.cs.meta new file mode 100644 index 0000000..4d809f9 --- /dev/null +++ b/Assets/Scripts/Connector/RaycasterController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 310968de5ced47a1ab75a25d6e50732a +timeCreated: 1566216860 \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycasterControllerEventData.cs b/Assets/Scripts/Message/RaycasterControllerEventData.cs new file mode 100644 index 0000000..4c22282 --- /dev/null +++ b/Assets/Scripts/Message/RaycasterControllerEventData.cs @@ -0,0 +1,19 @@ +using UniFlow.Connector; + +namespace UniFlow.Message +{ + public class RaycasterControllerEventData + { + private RaycasterControllerEventData(RaycasterControlMethod raycasterControlMethod) + { + RaycasterControlMethod = raycasterControlMethod; + } + + public RaycasterControlMethod RaycasterControlMethod { get; } + + public static RaycasterControllerEventData Create(RaycasterControlMethod raycasterControlMethod) + { + return new RaycasterControllerEventData(raycasterControlMethod); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycasterControllerEventData.cs.meta b/Assets/Scripts/Message/RaycasterControllerEventData.cs.meta new file mode 100644 index 0000000..e2b3200 --- /dev/null +++ b/Assets/Scripts/Message/RaycasterControllerEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 95377b16823742ea92366fb102cd62cd +timeCreated: 1566217154 \ No newline at end of file From 042d9c036f378fc21305bdc27aac35c96dd2d1c1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:19:15 +0900 Subject: [PATCH 036/453] :sparkles: Add ObservableReceiverBase --- .../Receiver/ObservableReceiverBase.cs | 20 +++++++++++++++++++ .../Receiver/ObservableReceiverBase.cs.meta | 3 +++ 2 files changed, 23 insertions(+) create mode 100644 Assets/Scripts/Receiver/ObservableReceiverBase.cs create mode 100644 Assets/Scripts/Receiver/ObservableReceiverBase.cs.meta diff --git a/Assets/Scripts/Receiver/ObservableReceiverBase.cs b/Assets/Scripts/Receiver/ObservableReceiverBase.cs new file mode 100644 index 0000000..4ef4f7b --- /dev/null +++ b/Assets/Scripts/Receiver/ObservableReceiverBase.cs @@ -0,0 +1,20 @@ +using System; +using UniRx; + +namespace UniFlow.Receiver +{ + public abstract class ObservableReceiverBase : ReceiverBase + { + private ISubject OnReceiveSubject { get; } = new Subject(); + + protected IObservable OnReceiveAsObservable() + { + return OnReceiveSubject; + } + + public override void OnReceive(EventMessages eventMessages) + { + OnReceiveSubject.OnNext(eventMessages); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Receiver/ObservableReceiverBase.cs.meta b/Assets/Scripts/Receiver/ObservableReceiverBase.cs.meta new file mode 100644 index 0000000..7e6ebc7 --- /dev/null +++ b/Assets/Scripts/Receiver/ObservableReceiverBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be0ec6c605f14b139257077975e4230a +timeCreated: 1565873932 \ No newline at end of file From 8787ed4b1643d4aaa51f7c62c10b24bdba80fbc9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:19:29 +0900 Subject: [PATCH 037/453] :clipboard: Add and update dependency to ObservableTween --- Assets/package.json | 3 ++- Packages/manifest.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/package.json b/Assets/package.json index 36ffbdb..4c17629 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -16,7 +16,8 @@ "com.unity.simpleanimation": "1.0.0", "com.stevevermeulen.extenject": "9.1.0", "jp.cysharp.unirx": "7.1.0", - "jp.cysharp.unitask": "1.0.0" + "jp.cysharp.unitask": "1.0.0", + "dev.monry.unirx-observabletween": "0.0.1-preview.6" }, "repository": { "type": "git", diff --git a/Packages/manifest.json b/Packages/manifest.json index f83d213..36343ca 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -30,7 +30,7 @@ "com.unity.timeline": "1.1.0", "com.unity.ugui": "1.0.0", "com.unity.xr.legacyinputhelpers": "2.0.2", - "dev.monry.unirx-observabletween": "0.0.1-preview.4", + "dev.monry.unirx-observabletween": "0.0.1-preview.6", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "com.unity.modules.ai": "1.0.0", From fa2c41cb40b6571c3a6c95d38fc34fc768b46083 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:24:45 +0900 Subject: [PATCH 038/453] :clipboard: Bump up version --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 4c17629..54847c3 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.6", + "version": "0.1.0-preview.7", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 5e4b703aca57acc169681925a0d75c1e715eb1e8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 19 Aug 2019 22:34:02 +0900 Subject: [PATCH 039/453] :memo: Update CHANGELOG.md --- Assets/CHANGELOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 83797f5..677af75 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [0.1.0-preview.7] - 2019-08-19 + +Implement `TimeScaleController`, `KeyEvent` + +### Features + +* Add `Connector.TimeScaleController` +* Add `Connector.KeyEvent` +* Add `Receiver.Log` +* Add `ObservableReceiverBase` + +### Improvements + +* Make accessor to public + +## [0.1.0-preview.6] - 2019-08-11 + +Add Components automatically + +### Features + +* Add components required by some connectors automatically + +### Improvements + +* Refactor codes + ## [0.0.4-preview.5] - 2019-08-06 Refactor code From 92bd09e04ac31ba7dfe5798ad384d95893b5f127 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 20 Aug 2019 11:11:30 +0900 Subject: [PATCH 040/453] :fire: Remove `ActAsReceiver` --- Assets/Scripts/ConnectorBase.cs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 18f54aa..e6d2f19 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -19,9 +19,6 @@ [SerializeField] [Tooltip("Specify identifiers of IEventConnectable that resolve [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] private bool actAsTrigger = false; - [SerializeField] [Tooltip("Set true to allow to act as the receiver")] - private bool actAsReceiver = false; - private IEnumerable TargetConnectors => new List() .Concat(targetComponents ?? new List()) @@ -35,12 +32,6 @@ [UsedImplicitly] public bool ActAsTrigger set => actAsTrigger = value; } - [UsedImplicitly] public bool ActAsReceiver - { - get => actAsReceiver; - set => actAsReceiver = value; - } - [Inject] private DiContainer Container { get; } protected virtual void Start() @@ -68,7 +59,7 @@ void IConnector.Connect(IObservable source) .ToList() .ForEach(x => observable.Subscribe(x.OnReceive)); - if (ActAsReceiver) + if (!TargetConnectors.Any()) { observable.Subscribe(); } @@ -76,6 +67,7 @@ void IConnector.Connect(IObservable source) public abstract IObservable OnConnectAsObservable(); + [PublicAPI] public void AddConnectable(ConnectableBase connectable) { if (targetComponents == default) From 117b3178470ef1a8b216c2852756e8b050e6a9be Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 20 Aug 2019 11:13:59 +0900 Subject: [PATCH 041/453] :memo: Update CHANGELOG --- Assets/CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 677af75..3468f84 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.1.0-preview.8] - 2019-08-20 + +Improve inspector + +### Improvements + +* Remove `ActAsReceiver` parameter from Connector components + ## [0.1.0-preview.7] - 2019-08-19 Implement `TimeScaleController`, `KeyEvent` From 3fb9565999206b64b6d64b97c7166f4a3a862839 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 20 Aug 2019 11:32:23 +0900 Subject: [PATCH 042/453] :recycle: Fix regression: SerializeField removed --- Assets/Scripts/Connector/AnimationEvent.cs | 13 +++++------ Assets/Scripts/Connector/AnimatorTrigger.cs | 4 ++-- Assets/Scripts/Connector/AudioController.cs | 11 +++++----- Assets/Scripts/Connector/AudioEvent.cs | 11 +++++----- Assets/Scripts/Connector/CameraEvent.cs | 4 ++-- Assets/Scripts/Connector/Interval.cs | 10 ++++++--- Assets/Scripts/Connector/KeyEvent.cs | 4 ++-- Assets/Scripts/Connector/LifecycleEvent.cs | 4 ++-- Assets/Scripts/Connector/LoadSceneEvent.cs | 1 + Assets/Scripts/Connector/MouseEvent.cs | 4 ++-- Assets/Scripts/Connector/ParticleEvent.cs | 4 ++-- .../Connector/PhysicsCollision2DEvent.cs | 4 ++-- .../Connector/PhysicsCollisionEvent.cs | 4 ++-- .../Connector/PhysicsTrigger2DEvent.cs | 4 ++-- .../Scripts/Connector/PhysicsTriggerEvent.cs | 4 ++-- .../Scripts/Connector/PlayableController.cs | 7 +++--- .../Scripts/Connector/RaycasterController.cs | 1 - .../Scripts/Connector/RectTransformEvent.cs | 4 ++-- .../Connector/SimpleAnimationController.cs | 20 +++++++---------- .../Scripts/Connector/TimeScaleController.cs | 22 ++++++++++++++----- Assets/Scripts/Connector/Timer.cs | 10 ++++++--- Assets/Scripts/Connector/TransformEvent.cs | 4 ++-- .../Connector/UIBehaviourEventTrigger.cs | 4 ++-- Assets/Scripts/Connector/UnloadSceneEvent.cs | 1 + 24 files changed, 85 insertions(+), 74 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index 53e18ec..b1b1b7e 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -12,27 +12,26 @@ public class AnimationEvent : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; + [UsedImplicitly] public AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - - [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [UsedImplicitly] public AnimatorCullingMode CullingMode { get => cullingMode; set => cullingMode = value; } - - [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; [UsedImplicitly] public AnimatorUpdateMode UpdateMode { get => updateMode; set => updateMode = value; } - - private Animator animator = default; [UsedImplicitly] public Animator Animator { get => @@ -44,8 +43,6 @@ [UsedImplicitly] public Animator Animator : gameObject.AddComponent(); set => animator = value; } - - private SimpleAnimation simpleAnimation = default; [UsedImplicitly] public SimpleAnimation SimpleAnimation { get => diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/AnimatorTrigger.cs index 549f79a..56bd382 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/AnimatorTrigger.cs @@ -12,13 +12,13 @@ public class AnimatorTrigger : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private Animator animator = default; + [SerializeField] private string triggerName = default; + [UsedImplicitly] public Animator Animator { get => animator ? animator : animator = GetComponent(); set => animator = value; } - - [SerializeField] private string triggerName = default; [UsedImplicitly] public string TriggerName { get => triggerName; diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 7f1f938..9c6dd59 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -10,22 +10,21 @@ namespace UniFlow.Connector public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = default; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; + [SerializeField] private AudioSource audioSource = default; + [UsedImplicitly] public AudioControlMethod AudioControlMethod { get => audioControlMethod; set => audioControlMethod = value; } - - [SerializeField] - [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] - private AudioClip audioClip = default; [UsedImplicitly] public AudioClip AudioClip { get => audioClip; set => audioClip = value; } - - private AudioSource audioSource = default; [UsedImplicitly] public AudioSource AudioSource { get => diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index d24f1aa..840cd5a 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -10,22 +10,21 @@ namespace UniFlow.Connector public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = default; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; + [SerializeField] private AudioSource audioSource = default; + [UsedImplicitly] public AudioEventType AudioEventType { get => audioEventType; set => audioEventType = value; } - - [SerializeField] - [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] - private AudioClip audioClip = default; [UsedImplicitly] public AudioClip AudioClip { get => audioClip; set => audioClip = value; } - - private AudioSource audioSource = default; [UsedImplicitly] public AudioSource AudioSource { get => diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index 316a585..fb0f3a6 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public CameraEventType CameraEventType { get => cameraEventType; set => cameraEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Interval.cs index 90ca55f..483865f 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Interval.cs @@ -9,14 +9,18 @@ namespace UniFlow.Connector public class Interval : ConnectorBase { [SerializeField] private float seconds = default; + [SerializeField] private bool ignoreTimeScale = default; + [UsedImplicitly] public float Seconds { get => seconds; set => seconds = value; } - - [SerializeField] private bool ignoreTimeScale = default; - private bool IgnoreTimeScale => ignoreTimeScale; + [UsedImplicitly] private bool IgnoreTimeScale + { + get => ignoreTimeScale; + set => ignoreTimeScale = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/KeyEvent.cs b/Assets/Scripts/Connector/KeyEvent.cs index 3af6717..4d90ea0 100644 --- a/Assets/Scripts/Connector/KeyEvent.cs +++ b/Assets/Scripts/Connector/KeyEvent.cs @@ -10,9 +10,9 @@ namespace UniFlow.Connector public class KeyEvent : ConnectorBase { [SerializeField] private KeyCode keyCode = default; - private KeyCode KeyCode => keyCode; - [SerializeField] private KeyEventType keyEventType = default; + + private KeyCode KeyCode => keyCode; private KeyEventType KeyEventType => keyEventType; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index 6071194..efd7ec6 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public LifecycleEventType LifecycleEventType { get => lifecycleEventType; set => lifecycleEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index ad54d2b..c895482 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -13,6 +13,7 @@ namespace UniFlow.Connector public class LoadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; + [UsedImplicitly] public IEnumerable SceneNames { get => sceneNames; diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 53b634e..402457c 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public MouseEventType MouseEventType { get => mouseEventType; set => mouseEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index cbef366..5ef2e78 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public ParticleEventType ParticleEventType { get => particleEventType; set => particleEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index 2712cdc..a053b54 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType { get => physicsCollision2DEventType; set => physicsCollision2DEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index 11cb546..7898a00 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType { get => physicsCollisionEventType; set => physicsCollisionEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index c14686b..4add343 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType { get => physicsTrigger2DEventType; set => physicsTrigger2DEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index 630c1df..b4d1afb 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType { get => physicsTriggerEventType; set => physicsTriggerEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 85ad466..7683118 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -12,20 +12,19 @@ namespace UniFlow.Connector public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = default; + [SerializeField] private TimelineAsset timelineAsset = default; + [SerializeField] private PlayableDirector playableDirector = default; + [UsedImplicitly] public PlayableControlMethod PlayableControlMethod { get => playableControlMethod; set => playableControlMethod = value; } - - [SerializeField] private TimelineAsset timelineAsset = default; [UsedImplicitly] public TimelineAsset TimelineAsset { get => timelineAsset; set => timelineAsset = value; } - - private PlayableDirector playableDirector = default; [UsedImplicitly] public PlayableDirector PlayableDirector { get => diff --git a/Assets/Scripts/Connector/RaycasterController.cs b/Assets/Scripts/Connector/RaycasterController.cs index f138b6b..55a0560 100644 --- a/Assets/Scripts/Connector/RaycasterController.cs +++ b/Assets/Scripts/Connector/RaycasterController.cs @@ -20,7 +20,6 @@ [UsedImplicitly] private IEnumerable Raycasters get => raycasters; set => raycasters = value.ToList(); } - [UsedImplicitly] private RaycasterControlMethod RaycasterControlMethod { get => raycasterControlMethod; diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index f06622e..c199a4b 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public RectTransformEventType RectTransformEventType { get => rectTransformEventType; set => rectTransformEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 82facc6..3e24cf1 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -11,36 +11,34 @@ namespace UniFlow.Connector public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; + [SerializeField] + [Tooltip("If you do not specify it will be used SimpleAnimation setting")] + private AnimationClip animationClip = default; + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; + [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod { get => simpleAnimationControlMethod; set => simpleAnimationControlMethod = value; } - - [SerializeField] - [Tooltip("If you do not specify it will be used SimpleAnimation setting")] - private AnimationClip animationClip = default; [UsedImplicitly] public AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - - [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [UsedImplicitly] public AnimatorCullingMode CullingMode { get => cullingMode; set => cullingMode = value; } - - [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; [UsedImplicitly] public AnimatorUpdateMode UpdateMode { get => updateMode; set => updateMode = value; } - - private Animator animator = default; [UsedImplicitly] public Animator Animator { get => @@ -52,8 +50,6 @@ [UsedImplicitly] public Animator Animator : gameObject.AddComponent(); set => animator = value; } - - private SimpleAnimation simpleAnimation = default; [UsedImplicitly] public SimpleAnimation SimpleAnimation { get => diff --git a/Assets/Scripts/Connector/TimeScaleController.cs b/Assets/Scripts/Connector/TimeScaleController.cs index 8cf0650..4dfb50b 100644 --- a/Assets/Scripts/Connector/TimeScaleController.cs +++ b/Assets/Scripts/Connector/TimeScaleController.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -8,13 +9,24 @@ namespace UniFlow.Connector public class TimeScaleController : ConnectorBase { [SerializeField] private float timeScale = default; - private float TimeScale => timeScale; - [SerializeField] private float duration = default; - private float Duration => duration; - [SerializeField] private ObservableTween.EaseType easeType = default; - private ObservableTween.EaseType EaseType => easeType; + + [UsedImplicitly] private float TimeScale + { + get => timeScale; + set => timeScale = value; + } + [UsedImplicitly] private float Duration + { + get => duration; + set => duration = value; + } + [UsedImplicitly] private ObservableTween.EaseType EaseType + { + get => easeType; + set => easeType = value; + } private ISubject OnCompleteTweenSubject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Timer.cs index e71094d..72b0f98 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Timer.cs @@ -9,14 +9,18 @@ namespace UniFlow.Connector public class Timer : ConnectorBase { [SerializeField] private float seconds = default; + [SerializeField] private bool ignoreTimeScale = default; + [UsedImplicitly] public float Seconds { get => seconds; set => seconds = value; } - - [SerializeField] private bool ignoreTimeScale = default; - private bool IgnoreTimeScale => ignoreTimeScale; + [UsedImplicitly] private bool IgnoreTimeScale + { + get => ignoreTimeScale; + set => ignoreTimeScale = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 2236584..2d04e11 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = default; + [SerializeField] private Component component = default; + [UsedImplicitly] public TransformEventType TransformEventType { get => transformEventType; set => transformEventType = value; } - - private Component component = default; [UsedImplicitly] public Component Component { get => component ? component : component = this; diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index 34d0458..e478887 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -11,13 +11,13 @@ namespace UniFlow.Connector public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = default; + [SerializeField] private UIBehaviour uiBehaviour = default; + [UsedImplicitly] public EventTriggerType EventTriggerType { get => eventTriggerType; set => eventTriggerType = value; } - - private UIBehaviour uiBehaviour = default; [UsedImplicitly] public UIBehaviour UIBehaviour { get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index 4a781e3..6927c53 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -13,6 +13,7 @@ namespace UniFlow.Connector public class UnloadSceneEvent : ConnectorBase { [SerializeField] private List sceneNames = default; + [UsedImplicitly] public IEnumerable SceneNames { get => sceneNames; From 76a43f8478f5565ce3fb1e231ce9b4a10e0b71f8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 20 Aug 2019 11:33:13 +0900 Subject: [PATCH 043/453] :memo: Remove about Act As Receiver --- Assets/README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Assets/README.md b/Assets/README.md index 501e783..7228277 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -36,7 +36,7 @@ This method will be passed `EventMessages` what contains all propagated event in ### Inspector -inspector +inspector #### Target Instances @@ -55,10 +55,6 @@ Fire messages at the correct time for each component. Set true to allow to act as the entry point of events. -#### Act As Receiver - -Set true to allow to act as the receiver of events. - #### Other parameters for each Connector Individual parameters can be specified for each component. From 15ad61bb1e56b75863ab3237f215302cb958b5f6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 20 Aug 2019 11:46:35 +0900 Subject: [PATCH 044/453] :clipboard::memo: Update CHANGELOG and bump up version --- Assets/CHANGELOG.md | 4 ++++ Assets/package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 3468f84..61366b4 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -8,6 +8,10 @@ Improve inspector * Remove `ActAsReceiver` parameter from Connector components +### Fixes + +* Fixed regression where some SerializeFields disappeared + ## [0.1.0-preview.7] - 2019-08-19 Implement `TimeScaleController`, `KeyEvent` diff --git a/Assets/package.json b/Assets/package.json index 54847c3..4588c9b 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.7", + "version": "0.1.0-preview.8", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 83644e61a09735b2fe5953cebd89583a7feb71a8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:02:07 +0900 Subject: [PATCH 045/453] :clipboard: Upgrade Unity 2019.2.2 --- Packages/manifest.json | 2 +- ProjectSettings/EditorSettings.asset | 2 +- ProjectSettings/ProjectVersion.txt | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Packages/manifest.json b/Packages/manifest.json index 36343ca..004d467 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -19,7 +19,7 @@ "com.unity.analytics": "3.3.2", "com.unity.collab-proxy": "1.2.16", "com.unity.ext.nunit": "1.0.0", - "com.unity.ide.rider": "1.0.8", + "com.unity.ide.rider": "1.1.0", "com.unity.ide.vscode": "1.0.7", "com.unity.multiplayer-hlapi": "1.0.2", "com.unity.package-manager-ui": "2.2.0", diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset index 3b2e138..b269790 100644 --- a/ProjectSettings/EditorSettings.asset +++ b/ProjectSettings/EditorSettings.asset @@ -17,7 +17,7 @@ EditorSettings: m_EtcTextureNormalCompressor: 2 m_EtcTextureBestCompressor: 4 m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref - m_ProjectGenerationRootNamespace: EventConnector + m_ProjectGenerationRootNamespace: UniFlow m_CollabEditorSettings: inProgressEnabled: 1 m_EnableTextureStreamingInEditMode: 1 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 7e64146..e1a95a3 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.0f1 -m_EditorVersionWithRevision: 2019.2.0f1 (20c1667945cf) +m_EditorVersion: 2019.2.2f1 +m_EditorVersionWithRevision: 2019.2.2f1 (ab112815d860) From 5c4b8b39c16eef745fbbd3be6308248d28ca9fc8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:03:45 +0900 Subject: [PATCH 046/453] :sparkles: Tweak editor menu --- Assets/Scripts/ConnectorType.cs | 7 ++++++- Assets/Scripts/Message/RaycasterControllerEventData.cs | 2 ++ Assets/Scripts/Receiver/Empty.cs | 2 +- Assets/Scripts/Receiver/Log.cs | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 23d85b5..72fb899 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -1,5 +1,7 @@ namespace UniFlow { + // ReSharper disable InconsistentNaming + // ReSharper disable UnusedMember.Global public enum ConnectorType { LifecycleEvent = 100, @@ -33,7 +35,10 @@ public enum ConnectorType TimeScaleController, Empty, - // ReSharper disable once UnusedMember.Global + Bundle = 10000, + + Receiver = 20000, + Custom = -1, } } \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycasterControllerEventData.cs b/Assets/Scripts/Message/RaycasterControllerEventData.cs index 4c22282..a55b3e3 100644 --- a/Assets/Scripts/Message/RaycasterControllerEventData.cs +++ b/Assets/Scripts/Message/RaycasterControllerEventData.cs @@ -1,7 +1,9 @@ +using JetBrains.Annotations; using UniFlow.Connector; namespace UniFlow.Message { + [PublicAPI] public class RaycasterControllerEventData { private RaycasterControllerEventData(RaycasterControlMethod raycasterControlMethod) diff --git a/Assets/Scripts/Receiver/Empty.cs b/Assets/Scripts/Receiver/Empty.cs index a6a1330..30b39af 100644 --- a/Assets/Scripts/Receiver/Empty.cs +++ b/Assets/Scripts/Receiver/Empty.cs @@ -2,7 +2,7 @@ namespace UniFlow.Receiver { - [AddComponentMenu("UniFlow/Receiver/Empty", 20000)] + [AddComponentMenu("UniFlow/Receiver/Empty", (int) ConnectorType.Receiver)] public class Empty : ReceiverBase { public override void OnReceive(EventMessages eventMessages) diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index 54cf12c..dec8b6a 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -3,7 +3,7 @@ namespace UniFlow.Receiver { - [AddComponentMenu("UniFlow/Receiver/Log", 20001)] + [AddComponentMenu("UniFlow/Receiver/Log", (int) ConnectorType.Receiver)] public class Log : ReceiverBase { public override void OnReceive(EventMessages eventMessages) From afce2f9fe4f863e8473e0272143f737bdb26ab5b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:10:19 +0900 Subject: [PATCH 047/453] :sparkles: Add MoveParentTransform --- .../Scripts/Connector/MoveParentTransform.cs | 55 +++++++++++++++++++ .../Connector/MoveParentTransform.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 1 + .../Message/MoveParentTransformEventData.cs | 21 +++++++ .../MoveParentTransformEventData.cs.meta | 3 + 5 files changed, 83 insertions(+) create mode 100644 Assets/Scripts/Connector/MoveParentTransform.cs create mode 100644 Assets/Scripts/Connector/MoveParentTransform.cs.meta create mode 100644 Assets/Scripts/Message/MoveParentTransformEventData.cs create mode 100644 Assets/Scripts/Message/MoveParentTransformEventData.cs.meta diff --git a/Assets/Scripts/Connector/MoveParentTransform.cs b/Assets/Scripts/Connector/MoveParentTransform.cs new file mode 100644 index 0000000..d644223 --- /dev/null +++ b/Assets/Scripts/Connector/MoveParentTransform.cs @@ -0,0 +1,55 @@ +using System; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + [AddComponentMenu("UniFlow/MoveParentTransform", (int) ConnectorType.MoveParentTransform)] + public class MoveParentTransform : ConnectorBase + { + // ReSharper disable once InconsistentNaming + [SerializeField] private Transform _transform = default; + [SerializeField] private Transform targetTransform = default; + [SerializeField] private bool worldPositionStays = true; + + [UsedImplicitly] public Transform Transform + { + get => _transform != default + ? _transform + : _transform = transform; + set => _transform = value; + } + [UsedImplicitly] public Transform TargetTransform + { + get => targetTransform; + set => targetTransform = value; + } + [UsedImplicitly] public bool WorldPositionStays + { + get => worldPositionStays; + set => worldPositionStays = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + return Observable + .Create( + observer => + { + Transform.SetParent(TargetTransform, WorldPositionStays); + observer.OnNext(EventMessage.Create(ConnectorType.MoveParentTransform, this, MoveParentTransformEventData.Create(TargetTransform))); + return Disposable; + } + ); + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/MoveParentTransform.cs.meta b/Assets/Scripts/Connector/MoveParentTransform.cs.meta new file mode 100644 index 0000000..ff4ddba --- /dev/null +++ b/Assets/Scripts/Connector/MoveParentTransform.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9a52a20b5ede4c8ca6a5debe9b19c80b +timeCreated: 1566463259 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 72fb899..65e4007 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -26,6 +26,7 @@ public enum ConnectorType PlayableController, TimelineSignal, RaycasterController, + MoveParentTransform, LoadScene = 400, UnloadScene, diff --git a/Assets/Scripts/Message/MoveParentTransformEventData.cs b/Assets/Scripts/Message/MoveParentTransformEventData.cs new file mode 100644 index 0000000..fa1e234 --- /dev/null +++ b/Assets/Scripts/Message/MoveParentTransformEventData.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using UnityEngine; + +namespace UniFlow.Message +{ + [PublicAPI] + public class MoveParentTransformEventData + { + private MoveParentTransformEventData(Transform targetTransform) + { + TargetTransform = targetTransform; + } + + public Transform TargetTransform { get; } + + public static MoveParentTransformEventData Create(Transform targetTransform) + { + return new MoveParentTransformEventData(targetTransform); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/MoveParentTransformEventData.cs.meta b/Assets/Scripts/Message/MoveParentTransformEventData.cs.meta new file mode 100644 index 0000000..2c75a6b --- /dev/null +++ b/Assets/Scripts/Message/MoveParentTransformEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 45beb06348e0486b806b77ca24d064ed +timeCreated: 1566463494 \ No newline at end of file From 2f656608c367a54c218c854679d1989539c2d082 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:10:59 +0900 Subject: [PATCH 048/453] :sparkles: Add RaycastTargetController --- .../Connector/RaycastTargetController.cs | 71 +++++++++++++++++++ .../Connector/RaycastTargetController.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 1 + .../RaycastTargetControllerEventData.cs | 21 ++++++ .../RaycastTargetControllerEventData.cs.meta | 3 + 5 files changed, 99 insertions(+) create mode 100644 Assets/Scripts/Connector/RaycastTargetController.cs create mode 100644 Assets/Scripts/Connector/RaycastTargetController.cs.meta create mode 100644 Assets/Scripts/Message/RaycastTargetControllerEventData.cs create mode 100644 Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta diff --git a/Assets/Scripts/Connector/RaycastTargetController.cs b/Assets/Scripts/Connector/RaycastTargetController.cs new file mode 100644 index 0000000..85ad721 --- /dev/null +++ b/Assets/Scripts/Connector/RaycastTargetController.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace UniFlow.Connector +{ + [AddComponentMenu("UniFlow/RaycasterController", (int) ConnectorType.RaycastTargetController)] + public class RaycastTargetController : ConnectorBase + { + [SerializeField] private List graphics = default; + [SerializeField] private List colliders = default; + [SerializeField] private List collider2Ds = default; + [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = default; + + [UsedImplicitly] public IEnumerable Graphics + { + get => graphics; + set => graphics = value.ToList(); + } + [UsedImplicitly] public IEnumerable Colliders + { + get => colliders; + set => colliders = value.ToList(); + } + + [UsedImplicitly] public IEnumerable Collider2Ds + { + get => collider2Ds; + set => collider2Ds = value.ToList(); + } + [UsedImplicitly] private RaycastTargetControlMethod RaycastTargetControlMethod + { + get => raycastTargetControlMethod; + set => raycastTargetControlMethod = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + return Observable + .Create( + observer => + { + HandleActivation(); + observer.OnNext(EventMessage.Create(ConnectorType.RaycasterController, this, RaycastTargetControllerEventData.Create(RaycastTargetControlMethod))); + return Disposable; + } + ); + } + + private void HandleActivation() + { + Graphics.ToList().ForEach(x => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate); + Colliders.ToList().ForEach(x => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate); + Collider2Ds.ToList().ForEach(x => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate); + } + } + + [PublicAPI] + public enum RaycastTargetControlMethod + { + Activate, + Deactivate, + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/RaycastTargetController.cs.meta b/Assets/Scripts/Connector/RaycastTargetController.cs.meta new file mode 100644 index 0000000..bb2a3e0 --- /dev/null +++ b/Assets/Scripts/Connector/RaycastTargetController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: feefc9c6f64c4f74b9dcdc3462b2243d +timeCreated: 1566464568 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 65e4007..2e9f888 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -26,6 +26,7 @@ public enum ConnectorType PlayableController, TimelineSignal, RaycasterController, + RaycastTargetController, MoveParentTransform, LoadScene = 400, diff --git a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs new file mode 100644 index 0000000..02859eb --- /dev/null +++ b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using UniFlow.Connector; + +namespace UniFlow.Message +{ + [PublicAPI] + public class RaycastTargetControllerEventData + { + private RaycastTargetControllerEventData(RaycastTargetControlMethod raycastTargetControlMethod) + { + RaycastTargetControlMethod = raycastTargetControlMethod; + } + + public RaycastTargetControlMethod RaycastTargetControlMethod { get; } + + public static RaycastTargetControllerEventData Create(RaycastTargetControlMethod raycastTargetControlMethod) + { + return new RaycastTargetControllerEventData(raycastTargetControlMethod); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta new file mode 100644 index 0000000..a02c545 --- /dev/null +++ b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6de275d3c07b446f92c4252b99762c02 +timeCreated: 1566464955 \ No newline at end of file From 1208dbc4fdeb6e0dc4eb74bded5a57aa1e70a3a5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:12:48 +0900 Subject: [PATCH 049/453] :sparkles: Add SimpleAnimationEvent --- .../Scripts/Connector/SimpleAnimationEvent.cs | 101 ++++++++++++++++++ .../Connector/SimpleAnimationEvent.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 1 + .../Message/SimpleAnimationEventData.cs | 21 ++++ .../Message/SimpleAnimationEventData.cs.meta | 3 + 5 files changed, 129 insertions(+) create mode 100644 Assets/Scripts/Connector/SimpleAnimationEvent.cs create mode 100644 Assets/Scripts/Connector/SimpleAnimationEvent.cs.meta create mode 100644 Assets/Scripts/Message/SimpleAnimationEventData.cs create mode 100644 Assets/Scripts/Message/SimpleAnimationEventData.cs.meta diff --git a/Assets/Scripts/Connector/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/SimpleAnimationEvent.cs new file mode 100644 index 0000000..56808f0 --- /dev/null +++ b/Assets/Scripts/Connector/SimpleAnimationEvent.cs @@ -0,0 +1,101 @@ +using System; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + [AddComponentMenu("UniFlow/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] + public class SimpleAnimationEvent : ConnectorBase + { + [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = default; + [SerializeField] + [Tooltip("If you do not specify it will not be filtered")] + private AnimationClip animationClip = default; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; + + [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType + { + get => simpleAnimationEventType; + set => simpleAnimationEventType = value; + } + [UsedImplicitly] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } + [UsedImplicitly] public Animator Animator + { + get => + animator != default + ? animator + : animator = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + set => animator = value; + } + [UsedImplicitly] public SimpleAnimation SimpleAnimation + { + get => + simpleAnimation != default + ? simpleAnimation + : simpleAnimation = + Animator.GetComponent() != default + ? Animator.GetComponent() + : Animator.gameObject.AddComponent() + ; + set => simpleAnimation = value; + } + + private ISubject<(SimpleAnimationEventType eventType, AnimationClip animationClip)> CurrentStateSubject { get; } = new Subject<(SimpleAnimationEventType, AnimationClip)>(); + + protected override void Start() + { + base.Start(); + ObserveSimpleAnimation(); + } + + public override IObservable OnConnectAsObservable() + { + return CurrentStateSubject + .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) + .Select(_ => EventMessage.Create(ConnectorType.SimpleAnimationEvent, this, SimpleAnimationEventData.Create(SimpleAnimationEventType))); + } + + private void ObserveSimpleAnimation() + { + foreach (var state in SimpleAnimation.GetStates()) + { + state + .ObserveEveryValueChanged(x => (SimpleAnimation.IsPlaying(x.name), x.normalizedTime)) + .Pairwise() + .SubscribeWithState(state, OnChangeAnimatorStateInfo); + } + } + + private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTime)> pair, SimpleAnimation.State state) + { + if (!pair.Previous.isPlaying && pair.Current.isPlaying) + { + CurrentStateSubject.OnNext((SimpleAnimationEventType.Play, state.clip)); + } + else if (pair.Previous.isPlaying && !pair.Current.isPlaying) + { + CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); + } + else if (pair.Previous.normalizedTime < 1.0f && Mathf.Approximately(pair.Current.normalizedTime, 1.0f)) + { + CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); + } + } + } + + public enum SimpleAnimationEventType + { + Play = 1, + Stop, + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/SimpleAnimationEvent.cs.meta b/Assets/Scripts/Connector/SimpleAnimationEvent.cs.meta new file mode 100644 index 0000000..daba3a7 --- /dev/null +++ b/Assets/Scripts/Connector/SimpleAnimationEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6fc6fac5bf554d4da6db3c2feda04ca8 +timeCreated: 1566462036 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 2e9f888..edec7ef 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -19,6 +19,7 @@ public enum ConnectorType PhysicsTrigger2DEvent, SimpleAnimationController = 300, + SimpleAnimationEvent, AnimatorTrigger, AnimationEvent, AudioController, diff --git a/Assets/Scripts/Message/SimpleAnimationEventData.cs b/Assets/Scripts/Message/SimpleAnimationEventData.cs new file mode 100644 index 0000000..c35e240 --- /dev/null +++ b/Assets/Scripts/Message/SimpleAnimationEventData.cs @@ -0,0 +1,21 @@ +using JetBrains.Annotations; +using UniFlow.Connector; + +namespace UniFlow.Message +{ + [PublicAPI] + public class SimpleAnimationEventData + { + private SimpleAnimationEventData(SimpleAnimationEventType eventType) + { + EventType = eventType; + } + + public SimpleAnimationEventType EventType { get; } + + public static SimpleAnimationEventData Create(SimpleAnimationEventType eventType) + { + return new SimpleAnimationEventData(eventType); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/SimpleAnimationEventData.cs.meta b/Assets/Scripts/Message/SimpleAnimationEventData.cs.meta new file mode 100644 index 0000000..35b2f02 --- /dev/null +++ b/Assets/Scripts/Message/SimpleAnimationEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8bb6f0d83a6443f4875b3263485f65b3 +timeCreated: 1566462143 \ No newline at end of file From 62c5a28143b76b256be473fe23cddb01bd1e5dce Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:14:49 +0900 Subject: [PATCH 050/453] :sparkles: Add Zenject installer --- Assets/Scripts/InjectId.cs | 7 +++++++ Assets/Scripts/InjectId.cs.meta | 3 +++ Assets/Scripts/Installer.meta | 3 +++ .../Installer/SceneNamePrefixInstaller.cs | 16 ++++++++++++++++ .../Installer/SceneNamePrefixInstaller.cs.meta | 3 +++ 5 files changed, 32 insertions(+) create mode 100644 Assets/Scripts/InjectId.cs create mode 100644 Assets/Scripts/InjectId.cs.meta create mode 100644 Assets/Scripts/Installer.meta create mode 100644 Assets/Scripts/Installer/SceneNamePrefixInstaller.cs create mode 100644 Assets/Scripts/Installer/SceneNamePrefixInstaller.cs.meta diff --git a/Assets/Scripts/InjectId.cs b/Assets/Scripts/InjectId.cs new file mode 100644 index 0000000..429d45a --- /dev/null +++ b/Assets/Scripts/InjectId.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public static class InjectId + { + public const string SceneNamePrefix = "SceneNamePrefix"; + } +} \ No newline at end of file diff --git a/Assets/Scripts/InjectId.cs.meta b/Assets/Scripts/InjectId.cs.meta new file mode 100644 index 0000000..7801e23 --- /dev/null +++ b/Assets/Scripts/InjectId.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 786da2bc699a4d349c8dd2a7d6362145 +timeCreated: 1566377588 \ No newline at end of file diff --git a/Assets/Scripts/Installer.meta b/Assets/Scripts/Installer.meta new file mode 100644 index 0000000..160c0b6 --- /dev/null +++ b/Assets/Scripts/Installer.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6faa808c7797452186ee5f3ee2eddf8a +timeCreated: 1566377768 \ No newline at end of file diff --git a/Assets/Scripts/Installer/SceneNamePrefixInstaller.cs b/Assets/Scripts/Installer/SceneNamePrefixInstaller.cs new file mode 100644 index 0000000..4d8ffd4 --- /dev/null +++ b/Assets/Scripts/Installer/SceneNamePrefixInstaller.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using Zenject; + +namespace UniFlow.Installer +{ + public class SceneNamePrefixInstaller : MonoInstaller + { + [SerializeField] private string sceneNamePrefix = default; + private string SceneNamePrefix => sceneNamePrefix; + + public override void InstallBindings() + { + Container.BindInstance(SceneNamePrefix).WithId(InjectId.SceneNamePrefix).AsCached(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Installer/SceneNamePrefixInstaller.cs.meta b/Assets/Scripts/Installer/SceneNamePrefixInstaller.cs.meta new file mode 100644 index 0000000..bf960ba --- /dev/null +++ b/Assets/Scripts/Installer/SceneNamePrefixInstaller.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e9e46a5f65894e82a0d111a62ba9bee3 +timeCreated: 1566377673 \ No newline at end of file From 50671ee4774d61bc25d28a3633f86fe4371c01fb Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:17:27 +0900 Subject: [PATCH 051/453] :sparkles: Support Load/Unload scenes using enum --- Assets/Scripts/Connector/LoadSceneEvent.cs | 47 ++++++++++++++++---- Assets/Scripts/Connector/UnloadSceneEvent.cs | 47 ++++++++++++++++---- 2 files changed, 76 insertions(+), 18 deletions(-) diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/LoadSceneEvent.cs index c895482..e91f71b 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/LoadSceneEvent.cs @@ -1,24 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using JetBrains.Annotations; using UniRx; using UniRx.Async; using UnityEngine; using UnityEngine.SceneManagement; +using Zenject; namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/LoadScene", (int) ConnectorType.LoadScene)] - public class LoadSceneEvent : ConnectorBase + public abstract class LoadSceneEventBase : ConnectorBase { - [SerializeField] private List sceneNames = default; - - [UsedImplicitly] public IEnumerable SceneNames - { - get => sceneNames; - set => sceneNames = value.ToList(); - } + [UsedImplicitly] + public abstract IEnumerable SceneNames { get; set; } public override IObservable OnConnectAsObservable() { @@ -35,4 +31,37 @@ private async UniTask LoadScenes() } } } + + [AddComponentMenu("UniFlow/LoadScene", (int) ConnectorType.LoadScene)] + public class LoadSceneEvent : LoadSceneEventBase + { + [SerializeField] private List sceneNames = default; + + [UsedImplicitly] public override IEnumerable SceneNames + { + get => sceneNames; + set => sceneNames = value.ToList(); + } + } + + public abstract class LoadSceneEvent : LoadSceneEventBase where TSceneName : Enum + { + [SerializeField] private List sceneNames = default; + + [InjectOptional(Id = InjectId.SceneNamePrefix)] private string SceneNamePrefix { get; } + + [UsedImplicitly] public override IEnumerable SceneNames + { + get => sceneNames.Select(x => $"{SceneNamePrefix}{x.ToString()}"); + set => sceneNames = value + .Select( + x => (TSceneName) Enum + .Parse( + typeof(TSceneName), + Regex.Replace(x, $"^{SceneNamePrefix}", string.Empty) + ) + ) + .ToList(); + } + } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/UnloadSceneEvent.cs index 6927c53..c09f83e 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/UnloadSceneEvent.cs @@ -1,24 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using JetBrains.Annotations; using UniRx; using UniRx.Async; using UnityEngine; using UnityEngine.SceneManagement; +using Zenject; namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/UnloadScene", (int) ConnectorType.UnloadScene)] - public class UnloadSceneEvent : ConnectorBase + public abstract class UnloadSceneEventBase : ConnectorBase { - [SerializeField] private List sceneNames = default; - - [UsedImplicitly] public IEnumerable SceneNames - { - get => sceneNames; - set => sceneNames = value.ToList(); - } + [UsedImplicitly] + public abstract IEnumerable SceneNames { get; set; } public override IObservable OnConnectAsObservable() { @@ -35,4 +31,37 @@ private async UniTask UnloadScenes() } } } + + [AddComponentMenu("UniFlow/UnloadScene", (int) ConnectorType.UnloadScene)] + public class UnloadSceneEvent : UnloadSceneEventBase + { + [SerializeField] private List sceneNames = default; + + [UsedImplicitly] public override IEnumerable SceneNames + { + get => sceneNames; + set => sceneNames = value.ToList(); + } + } + + public abstract class UnloadSceneEvent : UnloadSceneEventBase where TSceneName : Enum + { + [SerializeField] private List sceneNames = default; + + [InjectOptional(Id = InjectId.SceneNamePrefix)] private string SceneNamePrefix { get; } + + [UsedImplicitly] public override IEnumerable SceneNames + { + get => sceneNames.Select(x => $"{SceneNamePrefix}{x.ToString()}"); + set => sceneNames = value + .Select( + x => (TSceneName) Enum + .Parse( + typeof(TSceneName), + Regex.Replace(x, $"^{SceneNamePrefix}", string.Empty) + ) + ) + .ToList(); + } + } } \ No newline at end of file From 944d9ae97078567f6f3b208cdc0113b5f8f76a1e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:20:24 +0900 Subject: [PATCH 052/453] :sparkles: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index edec7ef..25abd11 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -31,7 +31,9 @@ public enum ConnectorType MoveParentTransform, LoadScene = 400, + LoadScene_Enum, UnloadScene, + UnloadScene_Enum, Timer = 9000, Interval, From 593726f84ea2106c68dfe594db93ef5d81f65612 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:21:28 +0900 Subject: [PATCH 053/453] :beetle: Fix menu name --- Assets/Scripts/Connector/RaycastTargetController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/RaycastTargetController.cs b/Assets/Scripts/Connector/RaycastTargetController.cs index 85ad721..54ec2c1 100644 --- a/Assets/Scripts/Connector/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/RaycastTargetController.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector { - [AddComponentMenu("UniFlow/RaycasterController", (int) ConnectorType.RaycastTargetController)] + [AddComponentMenu("UniFlow/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] public class RaycastTargetController : ConnectorBase { [SerializeField] private List graphics = default; From c008a0e183b3082474264a25665c61c86207ed1a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:22:43 +0900 Subject: [PATCH 054/453] :sparkles: Use GameObject that attached Animator --- Assets/Scripts/Connector/AnimationEvent.cs | 6 +++--- Assets/Scripts/Connector/SimpleAnimationController.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/AnimationEvent.cs index b1b1b7e..d421169 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/AnimationEvent.cs @@ -49,9 +49,9 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation simpleAnimation != default ? simpleAnimation : simpleAnimation = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent() + Animator.GetComponent() != default + ? Animator.GetComponent() + : Animator.gameObject.AddComponent() ; set => simpleAnimation = value; } diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 3e24cf1..ccdcb14 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -56,9 +56,9 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation simpleAnimation != default ? simpleAnimation : simpleAnimation = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent() + Animator.GetComponent() != default + ? Animator.GetComponent() + : Animator.gameObject.AddComponent() ; set => simpleAnimation = value; } From 0725a3282a9624753f54327daf020a3a6f9ed1fc Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:24:56 +0900 Subject: [PATCH 055/453] :wrench: Set playAutomatically = false --- Assets/Scripts/Connector/SimpleAnimationController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index ccdcb14..1e41e5e 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -86,6 +86,7 @@ private void Awake() { SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); SimpleAnimation.cullingMode = CullingMode; + SimpleAnimation.playAutomatically = false; Animator.updateMode = UpdateMode; } } From d226d81efd13c399259d9dc335a67cfed913d058 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:28:57 +0900 Subject: [PATCH 056/453] :clipboard: Bump up to v0.1.0-preview.9 --- Assets/CHANGELOG.md | 19 +++++++++++++++++++ Assets/package.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 61366b4..74d303c 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.1.0-preview.9] - 2019-08-22 + +Add connectors + +### Features + +* Add connectors + * MoveParentTransform + * RaycastTargetController + * SimpleAnimationEvent + +### Improvements + +* Added Connector to load/unload scenes using `enum` values + +### Fixes + +* Fixed an issue where GameObject to which SimpleAnimation was attached was incorrect + ## [0.1.0-preview.8] - 2019-08-20 Improve inspector diff --git a/Assets/package.json b/Assets/package.json index 4588c9b..a213d8a 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.8", + "version": "0.1.0-preview.9", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 35c6a1257ccfd09ebfed0b524532125b829bbd65 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:47:47 +0900 Subject: [PATCH 057/453] :wrench: Change some enum default values to unselected --- Assets/Scripts/Connector/AudioController.cs | 2 +- Assets/Scripts/Connector/AudioEvent.cs | 2 +- Assets/Scripts/Connector/CameraEvent.cs | 2 +- Assets/Scripts/Connector/KeyEvent.cs | 4 ++-- Assets/Scripts/Connector/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/MouseEvent.cs | 2 +- Assets/Scripts/Connector/ParticleEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollision2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsCollisionEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs | 2 +- Assets/Scripts/Connector/PhysicsTriggerEvent.cs | 2 +- Assets/Scripts/Connector/PlayableController.cs | 2 +- Assets/Scripts/Connector/RaycastTargetController.cs | 13 ++++++------- Assets/Scripts/Connector/RaycasterController.cs | 12 ++++++------ Assets/Scripts/Connector/RectTransformEvent.cs | 2 +- .../Scripts/Connector/SimpleAnimationController.cs | 2 +- Assets/Scripts/Connector/SimpleAnimationEvent.cs | 4 ++-- Assets/Scripts/Connector/TransformEvent.cs | 2 +- Assets/Scripts/Connector/UIBehaviourEventTrigger.cs | 2 +- 19 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/AudioController.cs index 9c6dd59..1e8d301 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/AudioController.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/AudioController", (int) ConnectorType.AudioController)] public class AudioController : ConnectorBase { - [SerializeField] private AudioControlMethod audioControlMethod = default; + [SerializeField] private AudioControlMethod audioControlMethod = (AudioControlMethod) (-1); [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/AudioEvent.cs index 840cd5a..ce08326 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/AudioEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/AudioEvent", (int) ConnectorType.AudioEvent)] public class AudioEvent : ConnectorBase { - [SerializeField] private AudioEventType audioEventType = default; + [SerializeField] private AudioEventType audioEventType = (AudioEventType) (-1); [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/CameraEvent.cs index fb0f3a6..5d4e4b6 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/CameraEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/CameraEvent", (int) ConnectorType.CameraEvent)] public class CameraEvent : ConnectorBase { - [SerializeField] private CameraEventType cameraEventType = default; + [SerializeField] private CameraEventType cameraEventType = (CameraEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public CameraEventType CameraEventType diff --git a/Assets/Scripts/Connector/KeyEvent.cs b/Assets/Scripts/Connector/KeyEvent.cs index 4d90ea0..a3b5a63 100644 --- a/Assets/Scripts/Connector/KeyEvent.cs +++ b/Assets/Scripts/Connector/KeyEvent.cs @@ -9,11 +9,11 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/KeyEvent", (int) ConnectorType.KeyEvent)] public class KeyEvent : ConnectorBase { + [SerializeField] private KeyEventType keyEventType = (KeyEventType) (-1); [SerializeField] private KeyCode keyCode = default; - [SerializeField] private KeyEventType keyEventType = default; - private KeyCode KeyCode => keyCode; private KeyEventType KeyEventType => keyEventType; + private KeyCode KeyCode => keyCode; public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/LifecycleEvent.cs index efd7ec6..22b8128 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/LifecycleEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/LifecycleEvent", (int) ConnectorType.LifecycleEvent)] public class LifecycleEvent : ConnectorBase { - [SerializeField] private LifecycleEventType lifecycleEventType = default; + [SerializeField] private LifecycleEventType lifecycleEventType = (LifecycleEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public LifecycleEventType LifecycleEventType diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/MouseEvent.cs index 402457c..944f914 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/MouseEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/MouseEvent", (int) ConnectorType.MouseEvent)] public class MouseEvent : ConnectorBase { - [SerializeField] private MouseEventType mouseEventType = default; + [SerializeField] private MouseEventType mouseEventType = (MouseEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public MouseEventType MouseEventType diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/ParticleEvent.cs index 5ef2e78..296d342 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/ParticleEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/ParticleEvent", (int) ConnectorType.ParticleEvent)] public class ParticleEvent : ConnectorBase { - [SerializeField] private ParticleEventType particleEventType = default; + [SerializeField] private ParticleEventType particleEventType = (ParticleEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public ParticleEventType ParticleEventType diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs index a053b54..d574abf 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/PhyticsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] public class PhysicsCollision2DEvent : ConnectorBase { - [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = default; + [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = (PhysicsCollision2DEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs index 7898a00..2676462 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/PhysicsCollisionEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] public class PhysicsCollisionEvent : ConnectorBase { - [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = default; + [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = (PhysicsCollisionEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs index 4add343..2045a60 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] public class PhysicsTrigger2DEvent : ConnectorBase { - [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = default; + [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = (PhysicsTrigger2DEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs index b4d1afb..a87c6d0 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/PhysicsTriggerEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/PhyticsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] public class PhysicsTriggerEvent : ConnectorBase { - [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = default; + [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = (PhysicsTriggerEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/PlayableController.cs index 7683118..139907e 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/PlayableController.cs @@ -11,7 +11,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/PlayableController", (int) ConnectorType.PlayableController)] public class PlayableController : ConnectorBase { - [SerializeField] private PlayableControlMethod playableControlMethod = default; + [SerializeField] private PlayableControlMethod playableControlMethod = (PlayableControlMethod) (-1); [SerializeField] private TimelineAsset timelineAsset = default; [SerializeField] private PlayableDirector playableDirector = default; diff --git a/Assets/Scripts/Connector/RaycastTargetController.cs b/Assets/Scripts/Connector/RaycastTargetController.cs index 54ec2c1..422b08d 100644 --- a/Assets/Scripts/Connector/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/RaycastTargetController.cs @@ -12,11 +12,16 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] public class RaycastTargetController : ConnectorBase { + [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = (RaycastTargetControlMethod) (-1); [SerializeField] private List graphics = default; [SerializeField] private List colliders = default; [SerializeField] private List collider2Ds = default; - [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = default; + [UsedImplicitly] private RaycastTargetControlMethod RaycastTargetControlMethod + { + get => raycastTargetControlMethod; + set => raycastTargetControlMethod = value; + } [UsedImplicitly] public IEnumerable Graphics { get => graphics; @@ -27,17 +32,11 @@ [UsedImplicitly] public IEnumerable Colliders get => colliders; set => colliders = value.ToList(); } - [UsedImplicitly] public IEnumerable Collider2Ds { get => collider2Ds; set => collider2Ds = value.ToList(); } - [UsedImplicitly] private RaycastTargetControlMethod RaycastTargetControlMethod - { - get => raycastTargetControlMethod; - set => raycastTargetControlMethod = value; - } private IDisposable Disposable { get; } = new CompositeDisposable(); diff --git a/Assets/Scripts/Connector/RaycasterController.cs b/Assets/Scripts/Connector/RaycasterController.cs index 55a0560..d3a0856 100644 --- a/Assets/Scripts/Connector/RaycasterController.cs +++ b/Assets/Scripts/Connector/RaycasterController.cs @@ -12,19 +12,19 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/RaycasterController", (int) ConnectorType.RaycasterController)] public class RaycasterController : ConnectorBase { + [SerializeField] private RaycasterControlMethod raycasterControlMethod = (RaycasterControlMethod) (-1); [SerializeField] private List raycasters = default; - [SerializeField] private RaycasterControlMethod raycasterControlMethod = default; - [UsedImplicitly] private IEnumerable Raycasters - { - get => raycasters; - set => raycasters = value.ToList(); - } [UsedImplicitly] private RaycasterControlMethod RaycasterControlMethod { get => raycasterControlMethod; set => raycasterControlMethod = value; } + [UsedImplicitly] private IEnumerable Raycasters + { + get => raycasters; + set => raycasters = value.ToList(); + } private IDisposable Disposable { get; } = new CompositeDisposable(); diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/RectTransformEvent.cs index c199a4b..0ac7c70 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/RectTransformEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] public class RectTransformEvent : ConnectorBase { - [SerializeField] private RectTransformEventType rectTransformEventType = default; + [SerializeField] private RectTransformEventType rectTransformEventType = (RectTransformEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public RectTransformEventType RectTransformEventType diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/SimpleAnimationController.cs index 1e41e5e..f9416c4 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/SimpleAnimationController.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] public class SimpleAnimationController : ConnectorBase { - [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = default; + [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = (SimpleAnimationControlMethod) (-1); [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; diff --git a/Assets/Scripts/Connector/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/SimpleAnimationEvent.cs index 56808f0..936aa56 100644 --- a/Assets/Scripts/Connector/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/SimpleAnimationEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] public class SimpleAnimationEvent : ConnectorBase { - [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = default; + [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = (SimpleAnimationEventType) (-1); [SerializeField] [Tooltip("If you do not specify it will not be filtered")] private AnimationClip animationClip = default; @@ -95,7 +95,7 @@ private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTim public enum SimpleAnimationEventType { - Play = 1, + Play, Stop, } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/TransformEvent.cs index 2d04e11..554b923 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/TransformEvent.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/TransformEvent", (int) ConnectorType.TransformEvent)] public class TransformEvent : ConnectorBase { - [SerializeField] private TransformEventType transformEventType = default; + [SerializeField] private TransformEventType transformEventType = (TransformEventType) (-1); [SerializeField] private Component component = default; [UsedImplicitly] public TransformEventType TransformEventType diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs index e478887..489c660 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector [AddComponentMenu("UniFlow/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] public class UIBehaviourEventTrigger : ConnectorBase { - [SerializeField] private EventTriggerType eventTriggerType = default; + [SerializeField] private EventTriggerType eventTriggerType = (EventTriggerType) (-1); [SerializeField] private UIBehaviour uiBehaviour = default; [UsedImplicitly] public EventTriggerType EventTriggerType From b08dc1fd6872b288401f52c85a09da39b68564d2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 22 Aug 2019 21:50:31 +0900 Subject: [PATCH 058/453] :clipboard: Bump up version to v0.1.0-preview.10 --- Assets/CHANGELOG.md | 8 ++++++++ Assets/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 74d303c..65504b8 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.1.0-preview.10] - 2019-08-22 + +Tweak + +### Changes + +* Change some enum default values to unselected + ## [0.1.0-preview.9] - 2019-08-22 Add connectors diff --git a/Assets/package.json b/Assets/package.json index a213d8a..4bdac10 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.9", + "version": "0.1.0-preview.10", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 9ac4e59f30c782b8017a5bc0b94e67c21d9b991b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 18:22:47 +0900 Subject: [PATCH 059/453] :beetle: Fix Missing Reference Exception --- Assets/Scripts/Connector/SimpleAnimationEvent.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/SimpleAnimationEvent.cs index 936aa56..4d1cda9 100644 --- a/Assets/Scripts/Connector/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/SimpleAnimationEvent.cs @@ -72,7 +72,8 @@ private void ObserveSimpleAnimation() state .ObserveEveryValueChanged(x => (SimpleAnimation.IsPlaying(x.name), x.normalizedTime)) .Pairwise() - .SubscribeWithState(state, OnChangeAnimatorStateInfo); + .SubscribeWithState(state, OnChangeAnimatorStateInfo) + .AddTo(this); } } From e1a51177244d652e4e99d052b1e2be385e583126 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 23 Aug 2019 15:19:22 +0900 Subject: [PATCH 060/453] :sparkles: WIP: Implement dummy --- Assets/Editor.meta | 8 + Assets/Editor/AssetReferences.asset | 20 ++ Assets/Editor/AssetReferences.asset.meta | 8 + Assets/Editor/Scripts.meta | 8 + Assets/Editor/Scripts/AssetReferences.cs | 36 +++ Assets/Editor/Scripts/AssetReferences.cs.meta | 3 + Assets/Editor/Scripts/FlowEdge.cs | 20 ++ Assets/Editor/Scripts/FlowEdge.cs.meta | 3 + Assets/Editor/Scripts/FlowEditorWindow.cs | 55 ++++ .../Editor/Scripts/FlowEditorWindow.cs.meta | 3 + Assets/Editor/Scripts/FlowGraphView.cs | 131 +++++++++ Assets/Editor/Scripts/FlowGraphView.cs.meta | 3 + Assets/Editor/Scripts/FlowGridBackground.cs | 8 + .../Editor/Scripts/FlowGridBackground.cs.meta | 3 + Assets/Editor/Scripts/FlowNode.cs | 21 ++ Assets/Editor/Scripts/FlowNode.cs.meta | 3 + Assets/Editor/Scripts/FlowPort.cs | 12 + Assets/Editor/Scripts/FlowPort.cs.meta | 3 + Assets/Editor/Scripts/FlowVisualElement.cs | 29 ++ .../Editor/Scripts/FlowVisualElement.cs.meta | 3 + Assets/Editor/Scripts/LayerIndex.cs | 8 + Assets/Editor/Scripts/LayerIndex.cs.meta | 3 + Assets/Editor/StyleSheets.meta | 3 + Assets/Editor/StyleSheets/FlowGraphView.uss | 9 + .../Editor/StyleSheets/FlowGraphView.uss.meta | 3 + Assets/Editor/StyleSheets/FlowNode.uss | 11 + Assets/Editor/StyleSheets/FlowNode.uss.meta | 3 + .../Editor/StyleSheets/FlowVisualElement.uss | 11 + .../StyleSheets/FlowVisualElement.uss.meta | 3 + Assets/Editor/UniFlow.Editor.asmdef | 14 + Assets/Editor/UniFlow.Editor.asmdef.meta | 7 + UIElements.xsd | 7 + ...itor.Experimental.UIElements.GraphView.xsd | 17 ++ UnityEditor.Experimental.UIElements.xsd | 228 +++++++++++++++ UnityEditor.PackageManager.UI.xsd | 116 ++++++++ UnityEngine.Experimental.UIElements.xsd | 269 ++++++++++++++++++ 36 files changed, 1092 insertions(+) create mode 100644 Assets/Editor.meta create mode 100644 Assets/Editor/AssetReferences.asset create mode 100644 Assets/Editor/AssetReferences.asset.meta create mode 100644 Assets/Editor/Scripts.meta create mode 100644 Assets/Editor/Scripts/AssetReferences.cs create mode 100644 Assets/Editor/Scripts/AssetReferences.cs.meta create mode 100644 Assets/Editor/Scripts/FlowEdge.cs create mode 100644 Assets/Editor/Scripts/FlowEdge.cs.meta create mode 100644 Assets/Editor/Scripts/FlowEditorWindow.cs create mode 100644 Assets/Editor/Scripts/FlowEditorWindow.cs.meta create mode 100644 Assets/Editor/Scripts/FlowGraphView.cs create mode 100644 Assets/Editor/Scripts/FlowGraphView.cs.meta create mode 100644 Assets/Editor/Scripts/FlowGridBackground.cs create mode 100644 Assets/Editor/Scripts/FlowGridBackground.cs.meta create mode 100644 Assets/Editor/Scripts/FlowNode.cs create mode 100644 Assets/Editor/Scripts/FlowNode.cs.meta create mode 100644 Assets/Editor/Scripts/FlowPort.cs create mode 100644 Assets/Editor/Scripts/FlowPort.cs.meta create mode 100644 Assets/Editor/Scripts/FlowVisualElement.cs create mode 100644 Assets/Editor/Scripts/FlowVisualElement.cs.meta create mode 100644 Assets/Editor/Scripts/LayerIndex.cs create mode 100644 Assets/Editor/Scripts/LayerIndex.cs.meta create mode 100644 Assets/Editor/StyleSheets.meta create mode 100644 Assets/Editor/StyleSheets/FlowGraphView.uss create mode 100644 Assets/Editor/StyleSheets/FlowGraphView.uss.meta create mode 100644 Assets/Editor/StyleSheets/FlowNode.uss create mode 100644 Assets/Editor/StyleSheets/FlowNode.uss.meta create mode 100644 Assets/Editor/StyleSheets/FlowVisualElement.uss create mode 100644 Assets/Editor/StyleSheets/FlowVisualElement.uss.meta create mode 100644 Assets/Editor/UniFlow.Editor.asmdef create mode 100644 Assets/Editor/UniFlow.Editor.asmdef.meta create mode 100644 UIElements.xsd create mode 100644 UnityEditor.Experimental.UIElements.GraphView.xsd create mode 100644 UnityEditor.Experimental.UIElements.xsd create mode 100644 UnityEditor.PackageManager.UI.xsd create mode 100644 UnityEngine.Experimental.UIElements.xsd diff --git a/Assets/Editor.meta b/Assets/Editor.meta new file mode 100644 index 0000000..fb4c557 --- /dev/null +++ b/Assets/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07aa457ae04af4b98bce42409533883b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/AssetReferences.asset b/Assets/Editor/AssetReferences.asset new file mode 100644 index 0000000..342b877 --- /dev/null +++ b/Assets/Editor/AssetReferences.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 862eccc6c6b74070a43ca9ba61c41d8d, type: 3} + m_Name: AssetReferences + m_EditorClassIdentifier: + flowVisualElement: {fileID: 7433441132597879392, guid: e5cd5853b6b74e9eab84a4e05492245e, + type: 3} + flowGraphView: {fileID: 7433441132597879392, guid: 2d1bfda56f80479a9954af9e73517286, + type: 3} + flowNode: {fileID: 7433441132597879392, guid: 9966dde7671f4ac2b46777545308ca19, + type: 3} diff --git a/Assets/Editor/AssetReferences.asset.meta b/Assets/Editor/AssetReferences.asset.meta new file mode 100644 index 0000000..6280858 --- /dev/null +++ b/Assets/Editor/AssetReferences.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 605e150d339d14b64b0f12478f2b60c6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Scripts.meta b/Assets/Editor/Scripts.meta new file mode 100644 index 0000000..1720458 --- /dev/null +++ b/Assets/Editor/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a288908b1da674ce6bab525764a9a873 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Scripts/AssetReferences.cs b/Assets/Editor/Scripts/AssetReferences.cs new file mode 100644 index 0000000..842ed78 --- /dev/null +++ b/Assets/Editor/Scripts/AssetReferences.cs @@ -0,0 +1,36 @@ +using System.Linq; +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + [CreateAssetMenu(menuName = "UniFlow/Editor AssetReferences", fileName = "AssetReferences.asset")] + public class AssetReferences : ScriptableObject + { + [SerializeField] private StyleSheet flowVisualElement = default; + [SerializeField] private StyleSheet flowGraphView = default; + [SerializeField] private StyleSheet flowNode = default; + + public StyleSheet FlowVisualElement => flowVisualElement; + public StyleSheet FlowGraphView => flowGraphView; + public StyleSheet FlowNode => flowNode; + + private static AssetReferences instance = default; + public static AssetReferences Instance => instance ? instance : instance = Load(); + + public static void Reload() + { + instance = Load(); + } + + private static AssetReferences Load() + { + return AssetDatabase + .FindAssets("t:UniFlow.Editor.AssetReferences") + .Select(AssetDatabase.GUIDToAssetPath) + .Select(AssetDatabase.LoadAssetAtPath) + .FirstOrDefault(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/AssetReferences.cs.meta b/Assets/Editor/Scripts/AssetReferences.cs.meta new file mode 100644 index 0000000..df303a5 --- /dev/null +++ b/Assets/Editor/Scripts/AssetReferences.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 862eccc6c6b74070a43ca9ba61c41d8d +timeCreated: 1566486612 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs new file mode 100644 index 0000000..c65bd5b --- /dev/null +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -0,0 +1,20 @@ +using UnityEditor.Experimental.GraphView; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class FlowEdge : Edge + { + public FlowEdge() + { + + } + + public override void OnSelected() + { + base.OnSelected(); + Debug.Log($"Input: {input.portName}"); + Debug.Log($"Output: {output.portName}"); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEdge.cs.meta b/Assets/Editor/Scripts/FlowEdge.cs.meta new file mode 100644 index 0000000..7c45f51 --- /dev/null +++ b/Assets/Editor/Scripts/FlowEdge.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2115b911c6054dcaa5f8c8351b295822 +timeCreated: 1566529312 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs new file mode 100644 index 0000000..3bfd6c3 --- /dev/null +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -0,0 +1,55 @@ +using UnityEditor; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class FlowEditorWindow : EditorWindow + { + private static FlowEditorWindow window = default; + + private static FlowEditorWindow Window + { + get + { + if (window == default) + { + window = GetWindow(); + } + + return window; + } + } + + [MenuItem("Window/UniFlow/Open UniFlow Window %#u")] + public static void Open() + { + Window.Load(); + + var originalCallback = Selection.selectionChanged; + Selection.selectionChanged = () => + { + originalCallback?.Invoke(); + Window.Load(); + }; + } + + [MenuItem("Window/UniFlow/Reload UniFlow Window %#&u")] + public static void Reload() + { + Window.Load(); + } + + private void Load() + { + AssetReferences.Reload(); + rootVisualElement.Clear(); + var flowVisualElement = new FlowVisualElement + { + name = typeof(FlowVisualElement).Name, + }; + rootVisualElement.Add(flowVisualElement); + titleContent = new GUIContent("UniFlow Graph"); + Repaint(); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs.meta b/Assets/Editor/Scripts/FlowEditorWindow.cs.meta new file mode 100644 index 0000000..67c9a9b --- /dev/null +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8991e32e603d4ef99dba136dde08bc1d +timeCreated: 1566479887 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs new file mode 100644 index 0000000..21d6872 --- /dev/null +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -0,0 +1,131 @@ +using UnityEditor.Experimental.GraphView; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowGraphView : GraphView + { + public FlowGraphView() + { + styleSheets.Add(AssetReferences.Instance.FlowGraphView); + SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); + this.AddManipulator(new ContentDragger()); + this.AddManipulator(new SelectionDragger()); + this.AddManipulator(new RectangleSelector()); + this.AddManipulator(new ClickSelector()); + + var flowGridBackground = new FlowGridBackground + { + name = typeof(FlowGridBackground).Name, + }; + Insert(0, flowGridBackground); + } + + public void Initialize() + { + var edge1 = new FlowEdge(); + var edge2 = new FlowEdge(); + + { + var flowNode = new FlowNode + { + title = "hoge", + }; + + { + // Port の向きは Node から見た向き + var port = Port.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(FlowPort)); + port.portName = "Out"; + port.portColor = Color.red; + + // Edge も Node から見た向き + edge1.output = port; + + // Add 対象の Container も Node から見た向き + flowNode.outputContainer.Add(port); + } + + var properties = new VisualElement + { + name = "MainContainer", + }; + properties.Add(new Slider("Foo", 0.0f, 1.0f)); + flowNode.mainContainer.Add(properties); + + AddElement(flowNode); + } + { + var flowNode = new FlowNode + { + title = "fuga", + }; + + { + var port = Port.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(FlowPort)); + port.portName = "In"; + port.portColor = Color.blue; + + edge1.input = port; + + flowNode.inputContainer.Add(port); + } + + { + var port = Port.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(FlowPort)); + port.portName = "Out"; + port.portColor = Color.red; + + edge2.output = port; + + flowNode.outputContainer.Add(port); + } + + var properties = new VisualElement + { + name = "MainContainer", + }; + properties.Add(new Toggle("Bar")); + properties + .Add( + new ObjectField("Quz") + { + objectType = typeof(StyleSheet), + } + ); + flowNode.mainContainer.Add(properties); + + AddElement(flowNode); + } + { + var flowNode = new FlowNode + { + title = "piyo", + }; + + { + var port = Port.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(FlowPort)); + port.portName = "In"; + port.portColor = Color.blue; + + edge2.input = port; + + flowNode.inputContainer.Add(port); + } + + var properties = new VisualElement + { + name = "MainContainer", + }; + properties.Add(new TextField("Buz")); + flowNode.mainContainer.Add(properties); + + AddElement(flowNode); + } + + AddElement(edge1); + AddElement(edge2); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGraphView.cs.meta b/Assets/Editor/Scripts/FlowGraphView.cs.meta new file mode 100644 index 0000000..5de35ec --- /dev/null +++ b/Assets/Editor/Scripts/FlowGraphView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0663831361b146bdb10f634132351323 +timeCreated: 1566483741 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGridBackground.cs b/Assets/Editor/Scripts/FlowGridBackground.cs new file mode 100644 index 0000000..06ea8fb --- /dev/null +++ b/Assets/Editor/Scripts/FlowGridBackground.cs @@ -0,0 +1,8 @@ +using UnityEditor.Experimental.GraphView; + +namespace UniFlow.Editor +{ + public class FlowGridBackground : GridBackground + { + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGridBackground.cs.meta b/Assets/Editor/Scripts/FlowGridBackground.cs.meta new file mode 100644 index 0000000..c1e0578 --- /dev/null +++ b/Assets/Editor/Scripts/FlowGridBackground.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9e69953512fc435ca34deb4a994c6c90 +timeCreated: 1566528461 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs new file mode 100644 index 0000000..9881056 --- /dev/null +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -0,0 +1,21 @@ +using UnityEditor.Experimental.GraphView; + +namespace UniFlow.Editor +{ + public class FlowNode : Node + { + public FlowNode() + { + styleSheets.Add(AssetReferences.Instance.FlowNode); + capabilities = + Capabilities.Selectable | +// Capabilities.Collapsible | + Capabilities.Resizable | + Capabilities.Movable | + Capabilities.Deletable | + Capabilities.Droppable | + Capabilities.Ascendable | + Capabilities.Renamable; + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowNode.cs.meta b/Assets/Editor/Scripts/FlowNode.cs.meta new file mode 100644 index 0000000..be46cdc --- /dev/null +++ b/Assets/Editor/Scripts/FlowNode.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8fc98eb37f1b4b69a10c9990a1509baf +timeCreated: 1566527981 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowPort.cs b/Assets/Editor/Scripts/FlowPort.cs new file mode 100644 index 0000000..77ad271 --- /dev/null +++ b/Assets/Editor/Scripts/FlowPort.cs @@ -0,0 +1,12 @@ +using System; +using UnityEditor.Experimental.GraphView; + +namespace UniFlow.Editor +{ + public class FlowPort : Port + { + protected FlowPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + { + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowPort.cs.meta b/Assets/Editor/Scripts/FlowPort.cs.meta new file mode 100644 index 0000000..4c48b4a --- /dev/null +++ b/Assets/Editor/Scripts/FlowPort.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ba2ac6700fd4440895a81bb745143298 +timeCreated: 1566529708 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs new file mode 100644 index 0000000..8408118 --- /dev/null +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -0,0 +1,29 @@ +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowVisualElement : VisualElement + { + public FlowVisualElement() + { + styleSheets.Add(AssetReferences.Instance.FlowVisualElement); + + var content = new VisualElement + { + name = "Content", + }; + + { + var graphView = new FlowGraphView + { + name = typeof(FlowGraphView).Name, + }; + graphView.Initialize(); + + content.Add(graphView); + } + + Add(content); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs.meta b/Assets/Editor/Scripts/FlowVisualElement.cs.meta new file mode 100644 index 0000000..ad0e515 --- /dev/null +++ b/Assets/Editor/Scripts/FlowVisualElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0de9e2e85c5c43d68cc5e98238742e77 +timeCreated: 1566483785 \ No newline at end of file diff --git a/Assets/Editor/Scripts/LayerIndex.cs b/Assets/Editor/Scripts/LayerIndex.cs new file mode 100644 index 0000000..c1d1b08 --- /dev/null +++ b/Assets/Editor/Scripts/LayerIndex.cs @@ -0,0 +1,8 @@ +namespace UniFlow.Editor +{ + public enum LayerIndex + { + Edge = 1, + Node, + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/LayerIndex.cs.meta b/Assets/Editor/Scripts/LayerIndex.cs.meta new file mode 100644 index 0000000..4894060 --- /dev/null +++ b/Assets/Editor/Scripts/LayerIndex.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7b2f5cee29ac4d5ba6c38784800955a4 +timeCreated: 1566528981 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets.meta b/Assets/Editor/StyleSheets.meta new file mode 100644 index 0000000..4dd2562 --- /dev/null +++ b/Assets/Editor/StyleSheets.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 56a08ed7966b430496412e3548a8ffee +timeCreated: 1566486429 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets/FlowGraphView.uss b/Assets/Editor/StyleSheets/FlowGraphView.uss new file mode 100644 index 0000000..160c4a4 --- /dev/null +++ b/Assets/Editor/StyleSheets/FlowGraphView.uss @@ -0,0 +1,9 @@ +#FlowGridBackground { + flex-direction: row; + flex: 1; + --grid-background-color: #2a2a2a; + --line-color: #262626; + --thick-line-color: #212121; + --spacing: 10; + --thick-lines: 10; +} diff --git a/Assets/Editor/StyleSheets/FlowGraphView.uss.meta b/Assets/Editor/StyleSheets/FlowGraphView.uss.meta new file mode 100644 index 0000000..0577e65 --- /dev/null +++ b/Assets/Editor/StyleSheets/FlowGraphView.uss.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2d1bfda56f80479a9954af9e73517286 +timeCreated: 1566524058 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets/FlowNode.uss b/Assets/Editor/StyleSheets/FlowNode.uss new file mode 100644 index 0000000..ab11e35 --- /dev/null +++ b/Assets/Editor/StyleSheets/FlowNode.uss @@ -0,0 +1,11 @@ +FlowNode { + min-width: 200px; +} + +FlowNode #MainContainer { + margin: 5px 10px; +} + +.unity-label { + min-width: 100px; +} \ No newline at end of file diff --git a/Assets/Editor/StyleSheets/FlowNode.uss.meta b/Assets/Editor/StyleSheets/FlowNode.uss.meta new file mode 100644 index 0000000..5d57447 --- /dev/null +++ b/Assets/Editor/StyleSheets/FlowNode.uss.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9966dde7671f4ac2b46777545308ca19 +timeCreated: 1566528152 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets/FlowVisualElement.uss b/Assets/Editor/StyleSheets/FlowVisualElement.uss new file mode 100644 index 0000000..2ffed4c --- /dev/null +++ b/Assets/Editor/StyleSheets/FlowVisualElement.uss @@ -0,0 +1,11 @@ +#FlowVisualElement { + flex: 1; +} + +#FlowVisualElement > #Content { + flex: 1; +} + +#FlowVisualElement > #Content > #FlowGraphView { + flex: 1; +} diff --git a/Assets/Editor/StyleSheets/FlowVisualElement.uss.meta b/Assets/Editor/StyleSheets/FlowVisualElement.uss.meta new file mode 100644 index 0000000..5e4a0bf --- /dev/null +++ b/Assets/Editor/StyleSheets/FlowVisualElement.uss.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e5cd5853b6b74e9eab84a4e05492245e +timeCreated: 1566486429 \ No newline at end of file diff --git a/Assets/Editor/UniFlow.Editor.asmdef b/Assets/Editor/UniFlow.Editor.asmdef new file mode 100644 index 0000000..eefea85 --- /dev/null +++ b/Assets/Editor/UniFlow.Editor.asmdef @@ -0,0 +1,14 @@ +{ + "name": "UniFlow.Editor", + "references": [ + "GUID:04f82f1ff3df44e29a1b2cce70510c34" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/Assets/Editor/UniFlow.Editor.asmdef.meta b/Assets/Editor/UniFlow.Editor.asmdef.meta new file mode 100644 index 0000000..f717c3e --- /dev/null +++ b/Assets/Editor/UniFlow.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26d6569d8bbc24143ac64be547efc761 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UIElements.xsd b/UIElements.xsd new file mode 100644 index 0000000..4a3eba1 --- /dev/null +++ b/UIElements.xsd @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/UnityEditor.Experimental.UIElements.GraphView.xsd b/UnityEditor.Experimental.UIElements.GraphView.xsd new file mode 100644 index 0000000..6e47008 --- /dev/null +++ b/UnityEditor.Experimental.UIElements.GraphView.xsd @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UnityEditor.Experimental.UIElements.xsd b/UnityEditor.Experimental.UIElements.xsd new file mode 100644 index 0000000..40d366f --- /dev/null +++ b/UnityEditor.Experimental.UIElements.xsd @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UnityEditor.PackageManager.UI.xsd b/UnityEditor.PackageManager.UI.xsd new file mode 100644 index 0000000..c03366a --- /dev/null +++ b/UnityEditor.PackageManager.UI.xsd @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UnityEngine.Experimental.UIElements.xsd b/UnityEngine.Experimental.UIElements.xsd new file mode 100644 index 0000000..4b00590 --- /dev/null +++ b/UnityEngine.Experimental.UIElements.xsd @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 822cc6394b721dd55345621ddd5329f1ce09c626 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 24 Aug 2019 17:37:51 +0900 Subject: [PATCH 061/453] :sparkles: Load Nodes from selected GameObject --- Assets/Editor/Scripts/FlowEditorWindow.cs | 15 +- Assets/Editor/Scripts/FlowGraphView.cs | 167 +++++++++++----------- Assets/Scripts/ConnectorBase.cs | 16 +++ 3 files changed, 113 insertions(+), 85 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 3bfd6c3..9fa94cb 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -43,12 +43,17 @@ private void Load() { AssetReferences.Reload(); rootVisualElement.Clear(); - var flowVisualElement = new FlowVisualElement - { - name = typeof(FlowVisualElement).Name, - }; - rootVisualElement.Add(flowVisualElement); titleContent = new GUIContent("UniFlow Graph"); + + if (Selection.activeGameObject != default) + { + var flowVisualElement = new FlowVisualElement + { + name = typeof(FlowVisualElement).Name, + }; + rootVisualElement.Add(flowVisualElement); + } + Repaint(); } } diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 21d6872..739681a 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -1,5 +1,7 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; using UnityEditor.Experimental.GraphView; -using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; @@ -23,109 +25,114 @@ public FlowGraphView() Insert(0, flowGridBackground); } + private IDictionary> DestinationConnectors { get; } = new Dictionary>(); + private IDictionary> SourceConnectors { get; } = new Dictionary>(); + private IDictionary RenderedNodes { get; } = new Dictionary(); + private IDictionary OutputPorts { get; } = new Dictionary(); + private IDictionary InputPorts { get; } = new Dictionary(); + public void Initialize() { - var edge1 = new FlowEdge(); - var edge2 = new FlowEdge(); - + var activeGameObject = Selection.activeGameObject; + if (activeGameObject == default) { - var flowNode = new FlowNode - { - title = "hoge", - }; - - { - // Port の向きは Node から見た向き - var port = Port.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(FlowPort)); - port.portName = "Out"; - port.portColor = Color.red; + return; + } - // Edge も Node から見た向き - edge1.output = port; + var connectables = activeGameObject.scene.IsValid() + ? activeGameObject.scene.GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() + : activeGameObject.GetComponentsInChildren().ToArray(); - // Add 対象の Container も Node から見た向き - flowNode.outputContainer.Add(port); + foreach (var connector in connectables.OfType()) + { + if (!DestinationConnectors.ContainsKey(connector)) + { + DestinationConnectors[connector] = new List(); } - var properties = new VisualElement + foreach (var targetConnector in connector.TargetComponents) { - name = "MainContainer", - }; - properties.Add(new Slider("Foo", 0.0f, 1.0f)); - flowNode.mainContainer.Add(properties); + if (!SourceConnectors.ContainsKey(targetConnector)) + { + SourceConnectors[targetConnector] = new List(); + } - AddElement(flowNode); + DestinationConnectors[connector].Add(targetConnector); + SourceConnectors[targetConnector].Add(connector); + } } + + var rootConnectables = connectables.Where(x => !SourceConnectors.ContainsKey(x)).ToArray(); + if (!rootConnectables.Any() && connectables.Any()) { - var flowNode = new FlowNode - { - title = "fuga", - }; + rootConnectables = new[] {connectables.First()}; + } - { - var port = Port.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(FlowPort)); - port.portName = "In"; - port.portColor = Color.blue; + foreach (var (rootConnectable, index) in rootConnectables.Select((v, i) => (v, i))) + { + CreateNode(rootConnectable, 0, index * 400); + } - edge1.input = port; + CreateEdges(); + } - flowNode.inputContainer.Add(port); - } + private void CreateNode(IConnectable connectable, int x, int y) + { + var node = new FlowNode + { + title = connectable.GetType().Name, + }; + node.SetPosition(new Rect(x, y, 200, 200)); + if (DestinationConnectors.ContainsKey(connectable)) + { + foreach (var (targetConnectable, index) in DestinationConnectors[connectable].Select((v, i) => (v, i))) { - var port = Port.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(FlowPort)); - port.portName = "Out"; - port.portColor = Color.red; - - edge2.output = port; - - flowNode.outputContainer.Add(port); + if (!RenderedNodes.ContainsKey(targetConnectable)) + { + CreateNode(targetConnectable, x + 300, y + index * 400); + } } + } + + RenderedNodes[connectable] = node; + AddElement(node); + } - var properties = new VisualElement + private void CreateEdges() + { + foreach (var (connectable, targetConnectables) in DestinationConnectors.Select(x => (x.Key, x.Value))) + { + foreach (var targetConnectable in targetConnectables) { - name = "MainContainer", - }; - properties.Add(new Toggle("Bar")); - properties - .Add( - new ObjectField("Quz") + if (!RenderedNodes.ContainsKey(connectable) || !RenderedNodes.ContainsKey(targetConnectable)) + { + continue; + } + + if (!OutputPorts.ContainsKey(connectable)) + { + OutputPorts[connectable] = Port.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(FlowPort)); + OutputPorts[connectable].portName = "Out"; + RenderedNodes[connectable].outputContainer.Add(OutputPorts[connectable]); + } + + if (!InputPorts.ContainsKey(targetConnectable)) + { + InputPorts[targetConnectable] = Port.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(FlowPort)); + InputPorts[targetConnectable].portName = "In"; + RenderedNodes[targetConnectable].inputContainer.Add(InputPorts[targetConnectable]); + } + + AddElement( + new FlowEdge { - objectType = typeof(StyleSheet), + output = OutputPorts[connectable], + input = InputPorts[targetConnectable], } ); - flowNode.mainContainer.Add(properties); - - AddElement(flowNode); - } - { - var flowNode = new FlowNode - { - title = "piyo", - }; - - { - var port = Port.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(FlowPort)); - port.portName = "In"; - port.portColor = Color.blue; - - edge2.input = port; - - flowNode.inputContainer.Add(port); } - - var properties = new VisualElement - { - name = "MainContainer", - }; - properties.Add(new TextField("Buz")); - flowNode.mainContainer.Add(properties); - - AddElement(flowNode); } - - AddElement(edge1); - AddElement(edge2); } } } \ No newline at end of file diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index e6d2f19..3b88fbf 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -26,6 +26,22 @@ [SerializeField] [Tooltip("Set true to allow to act as the entry point of events .Where(x => !ReferenceEquals(x, this)) .ToArray(); +#if UNITY_EDITOR + [UsedImplicitly] + public IEnumerable TargetComponents + { + get => targetComponents; + set => targetComponents = value.ToList(); + } + + [UsedImplicitly] + public IEnumerable TargetIds + { + get => targetIds; + set => targetIds = value.ToList(); + } +#endif + [UsedImplicitly] public bool ActAsTrigger { get => actAsTrigger; From 7a484ba0147a0bf50d331ec337d872023eb7a9bf Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 29 Aug 2019 16:49:46 +0900 Subject: [PATCH 062/453] :sparkles: Implement add nodes --- Assets/Editor/Scripts/ConnectableInfo.cs | 67 ++++++++ Assets/Editor/Scripts/ConnectableInfo.cs.meta | 3 + .../Editor/Scripts/EdgeConnectorListener.cs | 32 ++++ .../Scripts/EdgeConnectorListener.cs.meta | 3 + Assets/Editor/Scripts/FlowEditorWindow.cs | 4 +- Assets/Editor/Scripts/FlowGraphView.cs | 98 ++++++++---- Assets/Editor/Scripts/FlowNode.cs | 150 +++++++++++++++++- Assets/Editor/Scripts/FlowPort.cs | 19 ++- Assets/Editor/Scripts/SearchWindowProvider.cs | 70 ++++++++ .../Scripts/SearchWindowProvider.cs.meta | 3 + Assets/Editor/StyleSheets/FlowNode.uss | 19 ++- 11 files changed, 430 insertions(+), 38 deletions(-) create mode 100644 Assets/Editor/Scripts/ConnectableInfo.cs create mode 100644 Assets/Editor/Scripts/ConnectableInfo.cs.meta create mode 100644 Assets/Editor/Scripts/EdgeConnectorListener.cs create mode 100644 Assets/Editor/Scripts/EdgeConnectorListener.cs.meta create mode 100644 Assets/Editor/Scripts/SearchWindowProvider.cs create mode 100644 Assets/Editor/Scripts/SearchWindowProvider.cs.meta diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs b/Assets/Editor/Scripts/ConnectableInfo.cs new file mode 100644 index 0000000..72c233c --- /dev/null +++ b/Assets/Editor/Scripts/ConnectableInfo.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class ConnectableInfo + { + private ConnectableInfo(GameObject gameObject, Type type, string name, IEnumerable parameters) + { + GameObject = gameObject; + Type = type; + Name = name; + Parameters = parameters; + } + + public GameObject GameObject { get; set; } + public Type Type { get; } + public string Name { get; } + public IEnumerable Parameters { get; } + + public class Parameter + { + private Parameter(Type type, string name, object value) + { + Type = type; + Name = name; + Value = value; + } + + public Type Type { get; } + public string Name { get; } + public object Value { get; set; } + + public static Parameter Create(Type type, string name, object value) + { + return new Parameter(type, name, value); + } + } + + public static ConnectableInfo Create(IConnectable instance) + { + return Create(instance.GetType(), instance); + } + + public static ConnectableInfo Create(Type type, IConnectable instance = default) + { + return + new ConnectableInfo( + ((Component) instance)?.gameObject, + type, + type.Name, + type + .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Where(x => x.GetCustomAttribute() != null || x.IsPublic) + .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)) + ); + } + + public static ConnectableInfo Create(GameObject gameObject, Type type, string name, IEnumerable parameters) + { + return new ConnectableInfo(gameObject, type, name, parameters); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs.meta b/Assets/Editor/Scripts/ConnectableInfo.cs.meta new file mode 100644 index 0000000..c6b1eb6 --- /dev/null +++ b/Assets/Editor/Scripts/ConnectableInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 96538b1e78274531a60e0f9694a342da +timeCreated: 1566907405 \ No newline at end of file diff --git a/Assets/Editor/Scripts/EdgeConnectorListener.cs b/Assets/Editor/Scripts/EdgeConnectorListener.cs new file mode 100644 index 0000000..7cd667e --- /dev/null +++ b/Assets/Editor/Scripts/EdgeConnectorListener.cs @@ -0,0 +1,32 @@ +using UnityEditor.Experimental.GraphView; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class EdgeConnectorListener : IEdgeConnectorListener + { + public EdgeConnectorListener(FlowGraphView flowGraphView, SearchWindowProvider searchWindowProvider) + { + FlowGraphView = flowGraphView; + SearchWindowProvider = searchWindowProvider; + } + + private FlowGraphView FlowGraphView { get; } + private SearchWindowProvider SearchWindowProvider { get; } + + void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) + { + SearchWindowProvider.FlowPort = (FlowPort) (edge.output?.edgeConnector.edgeDragHelper.draggedPort ?? edge.input?.edgeConnector.edgeDragHelper.draggedPort); + SearchWindow + .Open( + new SearchWindowContext(GUIUtility.GUIToScreenPoint(Event.current.mousePosition)), + SearchWindowProvider + ); + } + + void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) + { + FlowGraphView.AddEdge((FlowPort) edge.output, (FlowPort) edge.input); + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/EdgeConnectorListener.cs.meta b/Assets/Editor/Scripts/EdgeConnectorListener.cs.meta new file mode 100644 index 0000000..e45bb9d --- /dev/null +++ b/Assets/Editor/Scripts/EdgeConnectorListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 783a4a0e2caa408aaa72e9d89f41d3a0 +timeCreated: 1566893817 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 9fa94cb..817a618 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -7,7 +7,7 @@ public class FlowEditorWindow : EditorWindow { private static FlowEditorWindow window = default; - private static FlowEditorWindow Window + internal static FlowEditorWindow Window { get { @@ -47,7 +47,7 @@ private void Load() if (Selection.activeGameObject != default) { - var flowVisualElement = new FlowVisualElement + var flowVisualElement = new FlowVisualElement() { name = typeof(FlowVisualElement).Name, }; diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 739681a..613638f 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using UnityEditor; @@ -28,8 +29,8 @@ public FlowGraphView() private IDictionary> DestinationConnectors { get; } = new Dictionary>(); private IDictionary> SourceConnectors { get; } = new Dictionary>(); private IDictionary RenderedNodes { get; } = new Dictionary(); - private IDictionary OutputPorts { get; } = new Dictionary(); - private IDictionary InputPorts { get; } = new Dictionary(); + private SearchWindowProvider SearchWindowProvider { get; set; } + private EdgeConnectorListener EdgeConnectorListener { get; set; } public void Initialize() { @@ -39,6 +40,20 @@ public void Initialize() return; } + SearchWindowProvider = ScriptableObject.CreateInstance(); + SearchWindowProvider.Initialize(this); + EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); + + nodeCreationRequest = context => + { + SearchWindowProvider.FlowPort = null; + SearchWindow + .Open( + new SearchWindowContext(context.screenMousePosition), + SearchWindowProvider + ); + }; + var connectables = activeGameObject.scene.IsValid() ? activeGameObject.scene.GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() : activeGameObject.GetComponentsInChildren().ToArray(); @@ -70,19 +85,29 @@ public void Initialize() foreach (var (rootConnectable, index) in rootConnectables.Select((v, i) => (v, i))) { - CreateNode(rootConnectable, 0, index * 400); + CreateNodeRecursive(rootConnectable, new Vector2(0, index * 400)); } CreateEdges(); } - private void CreateNode(IConnectable connectable, int x, int y) + internal Vector2 NormalizeMousePosition(Vector2 mousePosition) { - var node = new FlowNode - { - title = connectable.GetType().Name, - }; - node.SetPosition(new Rect(x, y, 200, 200)); + return contentViewContainer + .WorldToLocal( + FlowEditorWindow + .Window + .rootVisualElement + .ChangeCoordinatesTo( + FlowEditorWindow.Window.rootVisualElement.parent, + mousePosition - FlowEditorWindow.Window.position.position + ) + ); + } + + private void CreateNodeRecursive(IConnectable connectable, Vector2 position) + { + var node = AddNode(connectable.GetType(), connectable, position); if (DestinationConnectors.ContainsKey(connectable)) { @@ -90,13 +115,12 @@ private void CreateNode(IConnectable connectable, int x, int y) { if (!RenderedNodes.ContainsKey(targetConnectable)) { - CreateNode(targetConnectable, x + 300, y + index * 400); + CreateNodeRecursive(targetConnectable, new Vector2(position.x + 350, position.y + index * 400)); } } } RenderedNodes[connectable] = node; - AddElement(node); } private void CreateEdges() @@ -110,29 +134,39 @@ private void CreateEdges() continue; } - if (!OutputPorts.ContainsKey(connectable)) - { - OutputPorts[connectable] = Port.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, typeof(FlowPort)); - OutputPorts[connectable].portName = "Out"; - RenderedNodes[connectable].outputContainer.Add(OutputPorts[connectable]); - } - - if (!InputPorts.ContainsKey(targetConnectable)) - { - InputPorts[targetConnectable] = Port.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, typeof(FlowPort)); - InputPorts[targetConnectable].portName = "In"; - RenderedNodes[targetConnectable].inputContainer.Add(InputPorts[targetConnectable]); - } - - AddElement( - new FlowEdge - { - output = OutputPorts[connectable], - input = InputPorts[targetConnectable], - } - ); + AddElement(AddEdge((FlowPort) RenderedNodes[connectable].OutputPort, (FlowPort) RenderedNodes[targetConnectable].InputPort)); } } } + + public FlowNode AddNode(Type connectableType, IConnectable connectableInstance, Vector2 position) + { + var node = new FlowNode(ConnectableInfo.Create(connectableType, connectableInstance), EdgeConnectorListener); + node.Initialize(); + node.SetPosition(new Rect(position.x, position.y, 0, 0)); + AddElement(node); + return node; + } + + public FlowEdge AddEdge(FlowPort outputPort, FlowPort inputPort) + { + var edge = new FlowEdge + { + output = outputPort, + input = inputPort, + }; + edge.output.Connect(edge); + edge.input.Connect(edge); + AddElement(edge); + return edge; + } + + public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAdapter) + { + return ports + .ToList() + .Where(x => x.direction != startPort.direction && x.node != startPort.node) + .ToList(); + } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 9881056..4668709 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -1,21 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Text.RegularExpressions; using UnityEditor.Experimental.GraphView; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; +using Object = UnityEngine.Object; namespace UniFlow.Editor { public class FlowNode : Node { - public FlowNode() + public FlowNode(ConnectableInfo connectableInfo, IEdgeConnectorListener edgeConnectorListener) { + ConnectableInfo = connectableInfo; + EdgeConnectorListener = edgeConnectorListener; + } + + public void Initialize() + { + title = ConnectableInfo.Name; styleSheets.Add(AssetReferences.Instance.FlowNode); capabilities = Capabilities.Selectable | // Capabilities.Collapsible | - Capabilities.Resizable | +// Capabilities.Resizable | Capabilities.Movable | Capabilities.Deletable | Capabilities.Droppable | Capabilities.Ascendable | Capabilities.Renamable; + + AddParameters(); + AddPorts(); + } + + public Port InputPort { get; private set; } + public Port OutputPort { get; private set; } + + private ConnectableInfo ConnectableInfo { get; } + private IEdgeConnectorListener EdgeConnectorListener { get; } + + private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> + { + {typeof(string), CreateBindableElement}, + {typeof(int), CreateBindableElement}, + {typeof(float), CreateBindableElement}, + {typeof(double), CreateBindableElement}, + {typeof(bool), CreateBindableElement}, + {typeof(Object), CreateBindableElement}, + }; + + private void AddParameters() + { + var contentsElement = this.Q("contents"); + + var parametersElement = new VisualElement {name = "parameters"}; + { + var dividerElement = new VisualElement {name = "divider"}; + dividerElement.AddToClassList("horizontal"); + parametersElement.Add(dividerElement); + + var itemsElement = new VisualElement {name = "items"}; + parametersElement.Add(itemsElement); + + { + var element = new VisualElement(); + var field = new ObjectField("GameObject") {value = ConnectableInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; + field.RegisterValueChangedCallback(x => ConnectableInfo.GameObject = x.newValue as GameObject); + element.Add(field); + itemsElement.Add(element); + + var innerDividerElement = new VisualElement {name = "divider"}; + innerDividerElement.AddToClassList("horizontal"); + itemsElement.Add(innerDividerElement); + } + + foreach (var parameter in ConnectableInfo.Parameters) + { + var element = new VisualElement(); + var field = CreateField(parameter); + element.Add(field); + itemsElement.Add(element); + } + } + + contentsElement.Add(parametersElement); + } + + private static BindableElement CreateField(ConnectableInfo.Parameter parameter) + { + // EnumField does not work unless the initial value is given to the second argument + if (parameter.Type.IsEnum) + { + var field = new EnumField(ToDisplayName(parameter.Name), parameter.Value == default ? (Enum) Activator.CreateInstance(parameter.Type) : (Enum) parameter.Value); + field.RegisterValueChangedCallback(x => parameter.Value = x.newValue); + return field; + } + + var fieldType = parameter.Type; + + if (typeof(Object).IsAssignableFrom(parameter.Type)) + { + fieldType = typeof(Object); + } + + return CreateFieldFunctions[fieldType](parameter); + } + + private static BindableElement CreateBindableElement(ConnectableInfo.Parameter parameter) where TResult : BaseField, new() + { + var field = new TResult + { + label = ToDisplayName(parameter.Name), + value = (TValue) parameter.Value, + }; + + if (field is INotifyValueChanged notifyValueChanged) + { + notifyValueChanged.RegisterValueChangedCallback(x => parameter.Value = x.newValue); + } + + // ReSharper disable once InvertIf + if (typeof(TValue) == typeof(Object) && field is ObjectField objectField) + { + objectField.objectType = parameter.Type; + objectField.allowSceneObjects = true; + } + + return field; + } + + private void AddPorts() + { + if (typeof(IConnector).IsAssignableFrom(ConnectableInfo.Type)) + { + OutputPort = FlowPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, EdgeConnectorListener); + OutputPort.portName = "Out"; + outputContainer.Add(OutputPort); + } + else + { + outputContainer.RemoveFromHierarchy(); + } + + InputPort = FlowPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi); + InputPort.portName = "In"; + inputContainer.Add(InputPort); + } + + private static string ToDisplayName(string original) + { + if (Regex.IsMatch(original, "ControlMethod$")) + { + return "Control Method"; + } + + if (Regex.IsMatch(original, "EventType$")) + { + return "Event Type"; + } + + return original.Substring(0, 1).ToUpper() + Regex.Replace(original.Substring(1), "([A-Z]+[a-z])", " $1"); } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowPort.cs b/Assets/Editor/Scripts/FlowPort.cs index 77ad271..1037b7a 100644 --- a/Assets/Editor/Scripts/FlowPort.cs +++ b/Assets/Editor/Scripts/FlowPort.cs @@ -1,12 +1,29 @@ using System; using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; namespace UniFlow.Editor { public class FlowPort : Port { - protected FlowPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + private FlowPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) { } + + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, IEdgeConnectorListener edgeConnectorListener = default) + { + var port = new FlowPort(portOrientation, portDirection, portCapacity, typeof(FlowPort)); + + // ReSharper disable once InvertIf + if (edgeConnectorListener != default) + { + port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); + port.AddManipulator(port.m_EdgeConnector); + } + + return port; + } + + } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs new file mode 100644 index 0000000..9bca93b --- /dev/null +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.Experimental.GraphView; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider + { + private FlowGraphView FlowGraphView { get; set; } + + private List SearchTreeEntries { get; set; } + + private Texture2D DummyIcon { get; set; } + + public FlowPort FlowPort { get; set; } + + public void Initialize(FlowGraphView flowGraphView) + { + FlowGraphView = flowGraphView; + + DummyIcon = new Texture2D(1, 1); + DummyIcon.SetPixel(0, 0, new Color(0, 0, 0, 0)); + DummyIcon.Apply(); + + SearchTreeEntries = new List + { + new SearchTreeGroupEntry(new GUIContent("Add Node")) + }; + SearchTreeEntries + .AddRange( + AppDomain + .CurrentDomain + .GetAssemblies() + .SelectMany(x => x.GetTypes()) + .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectableBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) + .OrderBy(x => ((AddComponentMenu) x.GetCustomAttributes(false).FirstOrDefault())?.componentOrder) + .Select(x => new SearchTreeEntry(new GUIContent(x.Name, DummyIcon)) {level = 1, userData = x}) + .ToList() + ); + } + + List ISearchWindowProvider.CreateSearchTree(SearchWindowContext context) + { + return SearchTreeEntries; + } + + bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) + { + if (!typeof(IConnectable).IsAssignableFrom((Type) searchTreeEntry.userData)) + { + return false; + } + + var node = FlowGraphView.AddNode((Type) searchTreeEntry.userData, null, FlowGraphView.NormalizeMousePosition(context.screenMousePosition)); + node.Query().Build().First().value = Selection.activeGameObject; + + if (FlowPort != default) + { + FlowGraphView.AddEdge(FlowPort, (FlowPort) node.InputPort); + } + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs.meta b/Assets/Editor/Scripts/SearchWindowProvider.cs.meta new file mode 100644 index 0000000..4f9ba4e --- /dev/null +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 949152518d31435a98b76546407f84c9 +timeCreated: 1566893459 \ No newline at end of file diff --git a/Assets/Editor/StyleSheets/FlowNode.uss b/Assets/Editor/StyleSheets/FlowNode.uss index ab11e35..2e3a73f 100644 --- a/Assets/Editor/StyleSheets/FlowNode.uss +++ b/Assets/Editor/StyleSheets/FlowNode.uss @@ -1,11 +1,28 @@ FlowNode { - min-width: 200px; + width: 300px; } FlowNode #MainContainer { margin: 5px 10px; } +FlowNode #parameters { + background-color: rgba(63, 63, 63, 0.8); +} + +FlowNode #parameters #items { + padding: 5px; +} + +FlowNode #parameters #items > #divider { + margin: 5px 0; +} + +FlowNode #parameters #items > VisualElement .unity-label { + min-width: 150px; + max-width: 150px; +} + .unity-label { min-width: 100px; } \ No newline at end of file From e07937f62ddb1539fcca82ac818fc2abb480096b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 29 Aug 2019 16:50:00 +0900 Subject: [PATCH 063/453] :clipboard: Upgrade Unity 2019.2.3f1 --- Packages/manifest.json | 2 +- ProjectSettings/ProjectVersion.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Packages/manifest.json b/Packages/manifest.json index 004d467..cc10ed5 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -20,7 +20,7 @@ "com.unity.collab-proxy": "1.2.16", "com.unity.ext.nunit": "1.0.0", "com.unity.ide.rider": "1.1.0", - "com.unity.ide.vscode": "1.0.7", + "com.unity.ide.vscode": "1.1.0", "com.unity.multiplayer-hlapi": "1.0.2", "com.unity.package-manager-ui": "2.2.0", "com.unity.purchasing": "2.0.6", diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index e1a95a3..f18539f 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.2f1 -m_EditorVersionWithRevision: 2019.2.2f1 (ab112815d860) +m_EditorVersion: 2019.2.3f1 +m_EditorVersionWithRevision: 2019.2.3f1 (8e55c27a4621) From 826ac931b8091195af9620cb606179311347eea0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 29 Aug 2019 19:00:37 +0900 Subject: [PATCH 064/453] :sparkles: Record position/scale --- Assets/Editor/Scripts/FlowEditorWindow.cs | 50 +++++++++++------------ Assets/Editor/Scripts/FlowGraphView.cs | 33 ++++++++------- 2 files changed, 41 insertions(+), 42 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 817a618..f1285fc 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -3,6 +3,23 @@ namespace UniFlow.Editor { + internal class FlowGraphParameters : ScriptableSingleton + { + [SerializeField] private Vector3 latestPosition = Vector3.zero; + [SerializeField] private Vector3 latestScale = Vector3.one; + + internal Vector3 LatestPosition + { + get => latestPosition; + set => latestPosition = value; + } + internal Vector3 LatestScale + { + get => latestScale; + set => latestScale = value; + } + } + public class FlowEditorWindow : EditorWindow { private static FlowEditorWindow window = default; @@ -20,39 +37,22 @@ internal static FlowEditorWindow Window } } - [MenuItem("Window/UniFlow/Open UniFlow Window %#u")] + [MenuItem("Window/UniFlow/Open UniFlow Graph %#u")] public static void Open() { - Window.Load(); - - var originalCallback = Selection.selectionChanged; - Selection.selectionChanged = () => - { - originalCallback?.Invoke(); - Window.Load(); - }; - } - - [MenuItem("Window/UniFlow/Reload UniFlow Window %#&u")] - public static void Reload() - { - Window.Load(); + var flowEditorWindow = GetWindow(); + flowEditorWindow.titleContent = new GUIContent("UniFlow Graph"); } - private void Load() + private void OnEnable() { AssetReferences.Reload(); - rootVisualElement.Clear(); - titleContent = new GUIContent("UniFlow Graph"); - if (Selection.activeGameObject != default) + var flowVisualElement = new FlowVisualElement { - var flowVisualElement = new FlowVisualElement() - { - name = typeof(FlowVisualElement).Name, - }; - rootVisualElement.Add(flowVisualElement); - } + name = typeof(FlowVisualElement).Name, + }; + rootVisualElement.Add(flowVisualElement); Repaint(); } diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 613638f..71eb8bd 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -4,14 +4,22 @@ using UnityEditor; using UnityEditor.Experimental.GraphView; using UnityEngine; +using UnityEngine.SceneManagement; using UnityEngine.UIElements; namespace UniFlow.Editor { public class FlowGraphView : GraphView { - public FlowGraphView() + private IDictionary> DestinationConnectors { get; } = new Dictionary>(); + private IDictionary> SourceConnectors { get; } = new Dictionary>(); + private IDictionary RenderedNodes { get; } = new Dictionary(); + private SearchWindowProvider SearchWindowProvider { get; set; } + private EdgeConnectorListener EdgeConnectorListener { get; set; } + + public void Initialize() { + UpdateViewTransform(FlowGraphParameters.instance.LatestPosition, FlowGraphParameters.instance.LatestScale); styleSheets.Add(AssetReferences.Instance.FlowGraphView); SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); this.AddManipulator(new ContentDragger()); @@ -24,21 +32,12 @@ public FlowGraphView() name = typeof(FlowGridBackground).Name, }; Insert(0, flowGridBackground); - } - - private IDictionary> DestinationConnectors { get; } = new Dictionary>(); - private IDictionary> SourceConnectors { get; } = new Dictionary>(); - private IDictionary RenderedNodes { get; } = new Dictionary(); - private SearchWindowProvider SearchWindowProvider { get; set; } - private EdgeConnectorListener EdgeConnectorListener { get; set; } - public void Initialize() - { - var activeGameObject = Selection.activeGameObject; - if (activeGameObject == default) + viewTransformChanged = graphView => { - return; - } + FlowGraphParameters.instance.LatestPosition = graphView.viewTransform.position; + FlowGraphParameters.instance.LatestScale = graphView.viewTransform.scale; + }; SearchWindowProvider = ScriptableObject.CreateInstance(); SearchWindowProvider.Initialize(this); @@ -54,9 +53,9 @@ public void Initialize() ); }; - var connectables = activeGameObject.scene.IsValid() - ? activeGameObject.scene.GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() - : activeGameObject.GetComponentsInChildren().ToArray(); + var connectables = Selection.activeGameObject == default || Selection.activeGameObject.scene.IsValid() + ? SceneManager.GetActiveScene().GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() + : Selection.activeGameObject.GetComponentsInChildren().ToArray(); foreach (var connector in connectables.OfType()) { From bde9741b8de8832fd8398ab673b141cdc551e01d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 13:58:27 +0900 Subject: [PATCH 065/453] :clipboard: Upgrade Unity 2019.2.3f1 --- ProjectSettings/ProjectSettings.asset | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 0733b88..a7c63d5 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -151,6 +151,8 @@ PlayerSettings: sharedDepthBuffer: 1 dashSupport: 1 lowOverheadMode: 0 + protectedContext: 0 + v2Signing: 0 enable360StereoCapture: 0 isWsaHolographicRemotingEnabled: 0 protectGraphicsMemory: 0 From 7a696720329fb25b31c6c4d45ff4bfba3f1b18a3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 14:34:24 +0900 Subject: [PATCH 066/453] :sparkles: Implement Undo --- Assets/Editor/Scripts/ConnectableInfo.cs | 87 ++++++++++++++++------- Assets/Editor/Scripts/FlowEditorWindow.cs | 46 +++++++++++- Assets/Editor/Scripts/FlowGraphView.cs | 53 +++++++++----- Assets/Editor/Scripts/FlowNode.cs | 60 ++++++++++++++-- 4 files changed, 195 insertions(+), 51 deletions(-) diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs b/Assets/Editor/Scripts/ConnectableInfo.cs index 72c233c..0343bcd 100644 --- a/Assets/Editor/Scripts/ConnectableInfo.cs +++ b/Assets/Editor/Scripts/ConnectableInfo.cs @@ -2,66 +2,103 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using JetBrains.Annotations; using UnityEngine; namespace UniFlow.Editor { + [Serializable] public class ConnectableInfo { - private ConnectableInfo(GameObject gameObject, Type type, string name, IEnumerable parameters) + private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type type, string name, IEnumerable parameters) { GameObject = gameObject; + Connectable = connectable; Type = type; Name = name; - Parameters = parameters; + parameterList = parameters.ToList(); } public GameObject GameObject { get; set; } + public IConnectable Connectable { get; set; } public Type Type { get; } public string Name { get; } - public IEnumerable Parameters { get; } + [SerializeField] private List parameterList = default; + public IEnumerable ParameterList => parameterList; - public class Parameter + public void ApplyParameter(Parameter parameter) { - private Parameter(Type type, string name, object value) + if (Connectable == default) { - Type = type; - Name = name; - Value = value; + return; } - public Type Type { get; } - public string Name { get; } - public object Value { get; set; } + Type + .GetField(parameter.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? + .SetValue(Connectable, parameter.Value); + } - public static Parameter Create(Type type, string name, object value) + public void ApplyParameters() + { + if (Connectable == default) { - return new Parameter(type, name, value); + return; } + + ParameterList.ToList().ForEach(ApplyParameter); } + [PublicAPI] public static ConnectableInfo Create(IConnectable instance) { return Create(instance.GetType(), instance); } + [PublicAPI] public static ConnectableInfo Create(Type type, IConnectable instance = default) { - return - new ConnectableInfo( - ((Component) instance)?.gameObject, - type, - type.Name, - type - .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Where(x => x.GetCustomAttribute() != null || x.IsPublic) - .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)) - ); + return Create( + ((Component) instance)?.gameObject, + instance, + type, + type.Name, + type + .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Where(x => x.GetCustomAttribute() != null || x.IsPublic) + .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)) + ); + } + + [PublicAPI] + public static ConnectableInfo Create(GameObject gameObject, IConnectable instance, Type type, string name, IEnumerable parameters) + { + return new ConnectableInfo(gameObject, instance, type, name, parameters); } - public static ConnectableInfo Create(GameObject gameObject, Type type, string name, IEnumerable parameters) + [Serializable] + public class Parameter { - return new ConnectableInfo(gameObject, type, name, parameters); + private Parameter(Type type, string name, object value) + { + Type = type; + Name = name; + Value = value; + } + + [SerializeField] private object value = default; + + public Type Type { get; } + public string Name { get; } + public object Value + { + get => value; + set => this.value = value; + } + + public static Parameter Create(Type type, string name, object value) + { + return new Parameter(type, name, value); + } } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index f1285fc..a3815e6 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -37,17 +39,30 @@ internal static FlowEditorWindow Window } } + [SerializeField] private List connectableInfoList = new List(); + + public IList ConnectableInfoList => connectableInfoList; + [MenuItem("Window/UniFlow/Open UniFlow Graph %#u")] public static void Open() { - var flowEditorWindow = GetWindow(); - flowEditorWindow.titleContent = new GUIContent("UniFlow Graph"); + window = GetWindow(); + window.titleContent = new GUIContent("UniFlow Graph"); } - private void OnEnable() + [SerializeField] private int counter; + + public void ForceRegisterUndo() + { + counter++; + } + + private void Reload() { AssetReferences.Reload(); + rootVisualElement.Clear(); + connectableInfoList = new List(); var flowVisualElement = new FlowVisualElement { name = typeof(FlowVisualElement).Name, @@ -55,6 +70,31 @@ private void OnEnable() rootVisualElement.Add(flowVisualElement); Repaint(); + + foreach (var i in ConnectableInfoList) + { + foreach (var j in i.ParameterList) + { + Debug.Log($"{i.Name}.{j.Name}: {j.Value}"); + } + } + } + + private void OnEnable() + { + Undo.undoRedoPerformed += Reload; + Reload(); + } + + private void OnDisable() + { + // ReSharper disable once DelegateSubtraction + Undo.undoRedoPerformed -= Reload; + } + + private void OnDestroy() + { + window = null; } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 71eb8bd..187ddab 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -53,6 +53,39 @@ public void Initialize() ); }; + CreateNodesFromInstance(); + + CreateEdges(); + + graphViewChanged += change => + { + change + .elementsToRemove? + .OfType() + .ToList() + .ForEach( + x => x.RemoveFromGraphView() + ); + return change; + }; + } + + internal Vector2 NormalizeMousePosition(Vector2 mousePosition) + { + return contentViewContainer + .WorldToLocal( + FlowEditorWindow + .Window + .rootVisualElement + .ChangeCoordinatesTo( + FlowEditorWindow.Window.rootVisualElement.parent, + mousePosition - FlowEditorWindow.Window.position.position + ) + ); + } + + private void CreateNodesFromInstance() + { var connectables = Selection.activeGameObject == default || Selection.activeGameObject.scene.IsValid() ? SceneManager.GetActiveScene().GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() : Selection.activeGameObject.GetComponentsInChildren().ToArray(); @@ -86,22 +119,6 @@ public void Initialize() { CreateNodeRecursive(rootConnectable, new Vector2(0, index * 400)); } - - CreateEdges(); - } - - internal Vector2 NormalizeMousePosition(Vector2 mousePosition) - { - return contentViewContainer - .WorldToLocal( - FlowEditorWindow - .Window - .rootVisualElement - .ChangeCoordinatesTo( - FlowEditorWindow.Window.rootVisualElement.parent, - mousePosition - FlowEditorWindow.Window.position.position - ) - ); } private void CreateNodeRecursive(IConnectable connectable, Vector2 position) @@ -140,7 +157,9 @@ private void CreateEdges() public FlowNode AddNode(Type connectableType, IConnectable connectableInstance, Vector2 position) { - var node = new FlowNode(ConnectableInfo.Create(connectableType, connectableInstance), EdgeConnectorListener); + var connectableInfo = ConnectableInfo.Create(connectableType, connectableInstance); + FlowEditorWindow.Window.ConnectableInfoList.Add(connectableInfo); + var node = new FlowNode(connectableInfo, EdgeConnectorListener); node.Initialize(); node.SetPosition(new Rect(position.x, position.y, 0, 0)); AddElement(node); diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 4668709..9c9474b 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.RegularExpressions; +using UnityEditor; using UnityEditor.Experimental.GraphView; using UnityEditor.UIElements; using UnityEngine; @@ -51,6 +52,14 @@ public void Initialize() {typeof(Object), CreateBindableElement}, }; + public void RemoveFromGraphView() + { + if (ConnectableInfo.Connectable != default) + { + Undo.DestroyObjectImmediate(ConnectableInfo.Connectable as Component); + } + } + private void AddParameters() { var contentsElement = this.Q("contents"); @@ -67,7 +76,29 @@ private void AddParameters() { var element = new VisualElement(); var field = new ObjectField("GameObject") {value = ConnectableInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; - field.RegisterValueChangedCallback(x => ConnectableInfo.GameObject = x.newValue as GameObject); + field.RegisterValueChangedCallback( + x => + { + var groupId = Undo.GetCurrentGroup(); + + if (x.previousValue != default && ConnectableInfo.Connectable != default) + { + Undo.DestroyObjectImmediate(ConnectableInfo.Connectable as Component); + EditorUtility.SetDirty(x.previousValue); + } + + if (x.newValue != default && x.newValue is GameObject newGameObject) + { + ConnectableInfo.GameObject = newGameObject; + ConnectableInfo.Connectable = Undo.AddComponent(ConnectableInfo.GameObject, ConnectableInfo.Type) as IConnectable; + ConnectableInfo.ApplyParameters(); + EditorUtility.SetDirty(x.newValue); + } + + Undo.CollapseUndoOperations(groupId); + } + ); + element.Add(field); itemsElement.Add(element); @@ -76,10 +107,10 @@ private void AddParameters() itemsElement.Add(innerDividerElement); } - foreach (var parameter in ConnectableInfo.Parameters) + foreach (var parameter in ConnectableInfo.ParameterList) { var element = new VisualElement(); - var field = CreateField(parameter); + var field = CreateField(ConnectableInfo, parameter); element.Add(field); itemsElement.Add(element); } @@ -88,13 +119,21 @@ private void AddParameters() contentsElement.Add(parametersElement); } - private static BindableElement CreateField(ConnectableInfo.Parameter parameter) + private static BindableElement CreateField(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) { // EnumField does not work unless the initial value is given to the second argument if (parameter.Type.IsEnum) { var field = new EnumField(ToDisplayName(parameter.Name), parameter.Value == default ? (Enum) Activator.CreateInstance(parameter.Type) : (Enum) parameter.Value); - field.RegisterValueChangedCallback(x => parameter.Value = x.newValue); + field.RegisterValueChangedCallback( + x => + { + parameter.Value = x.newValue; + Undo.RecordObject(connectableInfo.Connectable as Component, $"Change {connectableInfo.Name}.{parameter.Name}"); + connectableInfo.ApplyParameter(parameter); + EditorUtility.SetDirty(connectableInfo.Connectable as Component); + } + ); return field; } @@ -118,7 +157,16 @@ private static BindableElement CreateField(ConnectableInfo.Parameter parameter) if (field is INotifyValueChanged notifyValueChanged) { - notifyValueChanged.RegisterValueChangedCallback(x => parameter.Value = x.newValue); + notifyValueChanged.RegisterValueChangedCallback( + x => + { + Debug.Log($"Change {x.target} {x.previousValue} to {x.newValue}"); + // 直接 Component 監視させちゃう? + Undo.RecordObject(FlowEditorWindow.Window, "Change Value"); + parameter.Value = x.newValue; + FlowEditorWindow.Window.ForceRegisterUndo(); + } + ); } // ReSharper disable once InvertIf From e84cff7eb23546fbaa8c7d52ccd75af1322f8456 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 18:02:57 +0900 Subject: [PATCH 067/453] :sparkles: Support connection --- .../Editor/Scripts/EdgeConnectorListener.cs | 1 + Assets/Editor/Scripts/FlowEdge.cs | 15 +++------- Assets/Editor/Scripts/FlowGraphView.cs | 3 +- Assets/Editor/Scripts/FlowNode.cs | 29 ++++++++++++++++--- Assets/Editor/Scripts/IRemovableElement.cs | 7 +++++ .../Editor/Scripts/IRemovableElement.cs.meta | 3 ++ 6 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 Assets/Editor/Scripts/IRemovableElement.cs create mode 100644 Assets/Editor/Scripts/IRemovableElement.cs.meta diff --git a/Assets/Editor/Scripts/EdgeConnectorListener.cs b/Assets/Editor/Scripts/EdgeConnectorListener.cs index 7cd667e..aaa827c 100644 --- a/Assets/Editor/Scripts/EdgeConnectorListener.cs +++ b/Assets/Editor/Scripts/EdgeConnectorListener.cs @@ -27,6 +27,7 @@ void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) { FlowGraphView.AddEdge((FlowPort) edge.output, (FlowPort) edge.input); + (edge.output.node as FlowNode)?.ApplyTargetConnectors(); } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs index c65bd5b..7f179e3 100644 --- a/Assets/Editor/Scripts/FlowEdge.cs +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -1,20 +1,13 @@ using UnityEditor.Experimental.GraphView; -using UnityEngine; namespace UniFlow.Editor { - public class FlowEdge : Edge + public class FlowEdge : Edge, IRemovableElement { - public FlowEdge() + void IRemovableElement.RemoveFromGraphView() { - - } - - public override void OnSelected() - { - base.OnSelected(); - Debug.Log($"Input: {input.portName}"); - Debug.Log($"Output: {output.portName}"); + output.Disconnect(this); + (output?.node as FlowNode)?.ApplyTargetConnectors(); } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 187ddab..cdb666f 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -59,9 +59,10 @@ public void Initialize() graphViewChanged += change => { + change.elementsToRemove?.ToList().ForEach(Debug.Log); change .elementsToRemove? - .OfType() + .OfType() .ToList() .ForEach( x => x.RemoveFromGraphView() diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 9c9474b..8bdcee6 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text.RegularExpressions; using UnityEditor; using UnityEditor.Experimental.GraphView; @@ -10,7 +11,7 @@ namespace UniFlow.Editor { - public class FlowNode : Node + public class FlowNode : Node, IRemovableElement { public FlowNode(ConnectableInfo connectableInfo, IEdgeConnectorListener edgeConnectorListener) { @@ -52,12 +53,30 @@ public void Initialize() {typeof(Object), CreateBindableElement}, }; - public void RemoveFromGraphView() + void IRemovableElement.RemoveFromGraphView() { - if (ConnectableInfo.Connectable != default) + if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is Component component)) { - Undo.DestroyObjectImmediate(ConnectableInfo.Connectable as Component); + return; } + + Undo.DestroyObjectImmediate(component); + } + + public void ApplyTargetConnectors() + { + if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is ConnectorBase connector)) + { + return; + } + + Undo.RecordObject(connector, "Apply Target Connectors"); + connector.TargetComponents = OutputPort? + .connections + .Select(x => x.input.node as FlowNode) + .Where(x => x != default) + .Select(x => x.ConnectableInfo.Connectable) + .OfType(); } private void AddParameters() @@ -92,6 +111,8 @@ private void AddParameters() ConnectableInfo.GameObject = newGameObject; ConnectableInfo.Connectable = Undo.AddComponent(ConnectableInfo.GameObject, ConnectableInfo.Type) as IConnectable; ConnectableInfo.ApplyParameters(); + ApplyTargetConnectors(); + InputPort?.connections.Select(y => y.output.node).OfType().ToList().ForEach(y => y.ApplyTargetConnectors()); EditorUtility.SetDirty(x.newValue); } diff --git a/Assets/Editor/Scripts/IRemovableElement.cs b/Assets/Editor/Scripts/IRemovableElement.cs new file mode 100644 index 0000000..b8a8cf2 --- /dev/null +++ b/Assets/Editor/Scripts/IRemovableElement.cs @@ -0,0 +1,7 @@ +namespace UniFlow.Editor +{ + public interface IRemovableElement + { + void RemoveFromGraphView(); + } +} \ No newline at end of file diff --git a/Assets/Editor/Scripts/IRemovableElement.cs.meta b/Assets/Editor/Scripts/IRemovableElement.cs.meta new file mode 100644 index 0000000..96ff7d7 --- /dev/null +++ b/Assets/Editor/Scripts/IRemovableElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cf11e073a53243eeb19968e55d8fac0c +timeCreated: 1567154451 \ No newline at end of file From 9061d9f0c0797be2908a5737fcacec5441f58fdf Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 18:22:10 +0900 Subject: [PATCH 068/453] :shirt: Avoid warning in Rider --- Assets/Editor/Scripts/FlowEditorWindow.cs | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index a3815e6..a21f263 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -1,5 +1,5 @@ -using System; using System.Collections.Generic; +using JetBrains.Annotations; using UnityEditor; using UnityEngine; @@ -15,6 +15,7 @@ internal Vector3 LatestPosition get => latestPosition; set => latestPosition = value; } + internal Vector3 LatestScale { get => latestScale; @@ -50,7 +51,7 @@ public static void Open() window.titleContent = new GUIContent("UniFlow Graph"); } - [SerializeField] private int counter; + [SerializeField] [UsedImplicitly] private int counter; public void ForceRegisterUndo() { @@ -70,14 +71,6 @@ private void Reload() rootVisualElement.Add(flowVisualElement); Repaint(); - - foreach (var i in ConnectableInfoList) - { - foreach (var j in i.ParameterList) - { - Debug.Log($"{i.Name}.{j.Name}: {j.Value}"); - } - } } private void OnEnable() From 80f2a57fced5573c04aa379a50386e838dd4bda5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 22:09:16 +0900 Subject: [PATCH 069/453] :sparkles: Save Nodes position --- Assets/Editor/Scripts/FlowGraphView.cs | 83 ++++++++++++++++++++++---- Assets/Editor/Scripts/FlowNode.cs | 18 +++++- Assets/Scripts/ConnectableBase.cs | 8 +++ 3 files changed, 96 insertions(+), 13 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index cdb666f..1960c34 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -14,9 +14,13 @@ public class FlowGraphView : GraphView private IDictionary> DestinationConnectors { get; } = new Dictionary>(); private IDictionary> SourceConnectors { get; } = new Dictionary>(); private IDictionary RenderedNodes { get; } = new Dictionary(); + private IDictionary NormalizedPositionDictionary { get; } = new Dictionary(); private SearchWindowProvider SearchWindowProvider { get; set; } private EdgeConnectorListener EdgeConnectorListener { get; set; } + private const float NodeWidth = 300.0f; + private static Vector2 NodeMargin { get; } = new Vector2(50.0f, 50.0f); + public void Initialize() { UpdateViewTransform(FlowGraphParameters.instance.LatestPosition, FlowGraphParameters.instance.LatestScale); @@ -69,6 +73,13 @@ public void Initialize() ); return change; }; + + RegisterCallback( + (GeometryChangedEvent e) => + { + Relocation(); + } + ); } internal Vector2 NormalizeMousePosition(Vector2 mousePosition) @@ -88,14 +99,20 @@ internal Vector2 NormalizeMousePosition(Vector2 mousePosition) private void CreateNodesFromInstance() { var connectables = Selection.activeGameObject == default || Selection.activeGameObject.scene.IsValid() - ? SceneManager.GetActiveScene().GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() - : Selection.activeGameObject.GetComponentsInChildren().ToArray(); + ? SceneManager.GetActiveScene().GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() + : Selection.activeGameObject.GetComponentsInChildren().ToArray(); - foreach (var connector in connectables.OfType()) + foreach (var connectable in connectables) { - if (!DestinationConnectors.ContainsKey(connector)) + if (!DestinationConnectors.ContainsKey(connectable)) + { + DestinationConnectors[connectable] = new List(); + } + + var connector = connectable as ConnectorBase; + if (connector == default) { - DestinationConnectors[connector] = new List(); + continue; } foreach (var targetConnector in connector.TargetComponents) @@ -105,8 +122,8 @@ private void CreateNodesFromInstance() SourceConnectors[targetConnector] = new List(); } - DestinationConnectors[connector].Add(targetConnector); - SourceConnectors[targetConnector].Add(connector); + DestinationConnectors[connectable].Add(targetConnector); + SourceConnectors[targetConnector].Add(connectable); } } @@ -118,13 +135,15 @@ private void CreateNodesFromInstance() foreach (var (rootConnectable, index) in rootConnectables.Select((v, i) => (v, i))) { - CreateNodeRecursive(rootConnectable, new Vector2(0, index * 400)); + CreateNodeRecursive(rootConnectable, new Vector2Int(0, index)); } } - private void CreateNodeRecursive(IConnectable connectable, Vector2 position) + private void CreateNodeRecursive(IConnectable connectable, Vector2Int normalizedPosition) { - var node = AddNode(connectable.GetType(), connectable, position); + var node = AddNode(connectable.GetType(), connectable, Vector2.zero); + NormalizedPositionDictionary[node] = normalizedPosition; + RenderedNodes[connectable] = node; if (DestinationConnectors.ContainsKey(connectable)) { @@ -132,12 +151,52 @@ private void CreateNodeRecursive(IConnectable connectable, Vector2 position) { if (!RenderedNodes.ContainsKey(targetConnectable)) { - CreateNodeRecursive(targetConnectable, new Vector2(position.x + 350, position.y + index * 400)); + CreateNodeRecursive(targetConnectable, new Vector2Int(normalizedPosition.x + 1, normalizedPosition.y + index)); + } + else if (NormalizedPositionDictionary[RenderedNodes[targetConnectable]].x < normalizedPosition.x + 1) + { + NormalizedPositionDictionary[RenderedNodes[targetConnectable]] = new Vector2Int(normalizedPosition.x + 1, normalizedPosition.y + index); } } } + } - RenderedNodes[connectable] = node; + private void Relocation() + { + var nextYList = new List(); + + var groupId = Undo.GetCurrentGroup(); + + foreach (var pair in NormalizedPositionDictionary) + { + var node = pair.Key; + var normalizedPosition = pair.Value; + if (nextYList.Count <= normalizedPosition.x) + { + nextYList.Add(0.0f); + } + + var position = node.GetRecordedPosition(); + Debug.Log(position); + if (position.magnitude > 0.0f) + { + node.SetPosition(new Rect(position, node.layout.size)); + } + else + { + node.SetPosition( + new Rect( + new Vector2(normalizedPosition.x * (NodeWidth + NodeMargin.x), nextYList[normalizedPosition.x]), + node.layout.size + ) + ); + node.ApplyPosition(); + } + + nextYList[normalizedPosition.x] += node.layout.height + NodeMargin.y; + } + + Undo.CollapseUndoOperations(groupId); } private void CreateEdges() diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 8bdcee6..0e2cb84 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -35,6 +35,7 @@ public void Initialize() AddParameters(); AddPorts(); + RegisterCallback((GeometryChangedEvent e) => ApplyPosition()); } public Port InputPort { get; private set; } @@ -63,6 +64,22 @@ void IRemovableElement.RemoveFromGraphView() Undo.DestroyObjectImmediate(component); } + public Vector2 GetRecordedPosition() + { + return ((ConnectableBase) ConnectableInfo.Connectable).FlowGraphNodePosition; + } + + public void ApplyPosition() + { + if (!(ConnectableInfo.Connectable is ConnectableBase connectable) || Mathf.Approximately(layout.position.magnitude, 0.0f)) + { + return; + } + + Undo.RecordObject(connectable, "Move Node"); + connectable.FlowGraphNodePosition = layout.position; + } + public void ApplyTargetConnectors() { if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is ConnectorBase connector)) @@ -181,7 +198,6 @@ private static BindableElement CreateField(ConnectableInfo connectableInfo, Conn notifyValueChanged.RegisterValueChangedCallback( x => { - Debug.Log($"Change {x.target} {x.previousValue} to {x.newValue}"); // 直接 Component 監視させちゃう? Undo.RecordObject(FlowEditorWindow.Window, "Change Value"); parameter.Value = x.newValue; diff --git a/Assets/Scripts/ConnectableBase.cs b/Assets/Scripts/ConnectableBase.cs index 0047419..478487a 100644 --- a/Assets/Scripts/ConnectableBase.cs +++ b/Assets/Scripts/ConnectableBase.cs @@ -4,5 +4,13 @@ namespace UniFlow { public abstract class ConnectableBase : MonoBehaviour, IConnectable { +#if UNITY_EDITOR + [SerializeField] [HideInInspector] private Vector2 flowGraphNodePosition = default; + public Vector2 FlowGraphNodePosition + { + get => flowGraphNodePosition; + set => flowGraphNodePosition = value; + } +#endif } } \ No newline at end of file From 6f380d98d57440abc3da346e5e58bbd209ecd9b5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 22:54:20 +0900 Subject: [PATCH 070/453] :sparkles: Implement Toolbar buttons --- Assets/Editor/Scripts/FlowEditorWindow.cs | 3 +- Assets/Editor/Scripts/FlowGraphView.cs | 75 +++++++++++----------- Assets/Editor/Scripts/FlowVisualElement.cs | 69 ++++++++++++++++---- 3 files changed, 97 insertions(+), 50 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index a21f263..47049e7 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -15,12 +15,12 @@ internal Vector3 LatestPosition get => latestPosition; set => latestPosition = value; } - internal Vector3 LatestScale { get => latestScale; set => latestScale = value; } + internal static bool IsPrefabMode => Selection.activeGameObject != default && !Selection.activeGameObject.scene.IsValid(); } public class FlowEditorWindow : EditorWindow @@ -68,6 +68,7 @@ private void Reload() { name = typeof(FlowVisualElement).Name, }; + flowVisualElement.Initialize(); rootVisualElement.Add(flowVisualElement); Repaint(); diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 1960c34..98b6ae2 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -19,6 +19,7 @@ public class FlowGraphView : GraphView private EdgeConnectorListener EdgeConnectorListener { get; set; } private const float NodeWidth = 300.0f; + private static Vector2 NodesOffset { get; } = new Vector2(50.0f, 50.0f); private static Vector2 NodeMargin { get; } = new Vector2(50.0f, 50.0f); public void Initialize() @@ -82,6 +83,42 @@ public void Initialize() ); } + public void Relocation(bool forceReset = false) + { + var nextYList = new List(); + + var groupId = Undo.GetCurrentGroup(); + + foreach (var pair in NormalizedPositionDictionary) + { + var node = pair.Key; + var normalizedPosition = pair.Value; + if (nextYList.Count <= normalizedPosition.x) + { + nextYList.Add(0.0f); + } + + if (!forceReset && node.GetRecordedPosition().magnitude > 0.0f) + { + node.SetPosition(new Rect(node.GetRecordedPosition(), node.layout.size)); + } + else + { + node.SetPosition( + new Rect( + new Vector2(normalizedPosition.x * (NodeWidth + NodeMargin.x) + NodesOffset.x, nextYList[normalizedPosition.x] + NodesOffset.y), + node.layout.size + ) + ); + node.ApplyPosition(); + } + + nextYList[normalizedPosition.x] += node.layout.height + NodeMargin.y; + } + + Undo.CollapseUndoOperations(groupId); + } + internal Vector2 NormalizeMousePosition(Vector2 mousePosition) { return contentViewContainer @@ -161,44 +198,6 @@ private void CreateNodeRecursive(IConnectable connectable, Vector2Int normalized } } - private void Relocation() - { - var nextYList = new List(); - - var groupId = Undo.GetCurrentGroup(); - - foreach (var pair in NormalizedPositionDictionary) - { - var node = pair.Key; - var normalizedPosition = pair.Value; - if (nextYList.Count <= normalizedPosition.x) - { - nextYList.Add(0.0f); - } - - var position = node.GetRecordedPosition(); - Debug.Log(position); - if (position.magnitude > 0.0f) - { - node.SetPosition(new Rect(position, node.layout.size)); - } - else - { - node.SetPosition( - new Rect( - new Vector2(normalizedPosition.x * (NodeWidth + NodeMargin.x), nextYList[normalizedPosition.x]), - node.layout.size - ) - ); - node.ApplyPosition(); - } - - nextYList[normalizedPosition.x] += node.layout.height + NodeMargin.y; - } - - Undo.CollapseUndoOperations(groupId); - } - private void CreateEdges() { foreach (var (connectable, targetConnectables) in DestinationConnectors.Select(x => (x.Key, x.Value))) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 8408118..4b450c5 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -1,29 +1,76 @@ +using UnityEditor; +using UnityEngine; using UnityEngine.UIElements; namespace UniFlow.Editor { public class FlowVisualElement : VisualElement { - public FlowVisualElement() + private FlowGraphView FlowGraphView { get; set; } + private VisualElement Content { get; set; } + + public void Initialize() { styleSheets.Add(AssetReferences.Instance.FlowVisualElement); - var content = new VisualElement + Selection.selectionChanged += () => { - name = "Content", + Remove(Content); + Load(); }; - { - var graphView = new FlowGraphView + var toolbar = new IMGUIContainer( + () => { - name = typeof(FlowGraphView).Name, - }; - graphView.Initialize(); + GUILayout.BeginHorizontal(EditorStyles.toolbar); + if (GUILayout.Button($"Save {(FlowGraphParameters.IsPrefabMode ? "Prefab" : "Scenes")}", EditorStyles.toolbarButton)) + { + if (FlowGraphParameters.IsPrefabMode) + { + PrefabUtility.SavePrefabAsset(Selection.activeGameObject); + } + else + { + AssetDatabase.SaveAssets(); + } + } + + GUILayout.Space(6); - content.Add(graphView); - } + if (GUILayout.Button("Reset Viewport", EditorStyles.toolbarButton)) + { + FlowGraphParameters.instance.LatestPosition = Vector3.zero; + FlowGraphParameters.instance.LatestScale = Vector3.one; + Remove(Content); + Load(); + } + if (GUILayout.Button("Auto Layout", EditorStyles.toolbarButton)) + { + FlowGraphView.Relocation(true); + } + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + ); + Add(toolbar); + + Load(); + } - Add(content); + private void Load() + { + FlowGraphView = new FlowGraphView + { + name = typeof(FlowGraphView).Name, + }; + FlowGraphView.Initialize(); + Content = new VisualElement + { + name = "Content", + }; + Content.Add(FlowGraphView); + Add(Content); } } } \ No newline at end of file From 21f8f4f8f83d85738c14721d305343741062bc11 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 30 Aug 2019 23:09:02 +0900 Subject: [PATCH 071/453] :wrench: Tweak to save --- Assets/Editor/Scripts/FlowNode.cs | 2 ++ Assets/Editor/Scripts/FlowVisualElement.cs | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 0e2cb84..3e3c3ae 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -78,6 +78,7 @@ public void ApplyPosition() Undo.RecordObject(connectable, "Move Node"); connectable.FlowGraphNodePosition = layout.position; + EditorUtility.SetDirty(connectable); } public void ApplyTargetConnectors() @@ -94,6 +95,7 @@ public void ApplyTargetConnectors() .Where(x => x != default) .Select(x => x.ConnectableInfo.Connectable) .OfType(); + EditorUtility.SetDirty(connector); } private void AddParameters() diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 4b450c5..5006b24 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -1,4 +1,5 @@ using UnityEditor; +using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.UIElements; @@ -31,7 +32,7 @@ public void Initialize() } else { - AssetDatabase.SaveAssets(); + EditorSceneManager.SaveScene(Selection.activeGameObject.scene); } } From a20a19b9500f241465186b226b3ff622343b6607 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 31 Aug 2019 21:44:18 +0900 Subject: [PATCH 072/453] :beetle: Avoid NullReferenceException --- Assets/Editor/Scripts/FlowVisualElement.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 5006b24..c037b2b 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -30,7 +30,7 @@ public void Initialize() { PrefabUtility.SavePrefabAsset(Selection.activeGameObject); } - else + else if (Selection.activeGameObject != default) { EditorSceneManager.SaveScene(Selection.activeGameObject.scene); } From a53a0d43702a9b4f8c4cb045eed9be17c5287323 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 31 Aug 2019 22:08:07 +0900 Subject: [PATCH 073/453] :shirt: Tweak code position --- Assets/Editor/Scripts/FlowGraphView.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 98b6ae2..bc66125 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -38,17 +38,17 @@ public void Initialize() }; Insert(0, flowGridBackground); - viewTransformChanged = graphView => + SearchWindowProvider = ScriptableObject.CreateInstance(); + SearchWindowProvider.Initialize(this); + EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); + + viewTransformChanged += graphView => { FlowGraphParameters.instance.LatestPosition = graphView.viewTransform.position; FlowGraphParameters.instance.LatestScale = graphView.viewTransform.scale; }; - SearchWindowProvider = ScriptableObject.CreateInstance(); - SearchWindowProvider.Initialize(this); - EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); - - nodeCreationRequest = context => + nodeCreationRequest += context => { SearchWindowProvider.FlowPort = null; SearchWindow @@ -58,13 +58,8 @@ public void Initialize() ); }; - CreateNodesFromInstance(); - - CreateEdges(); - graphViewChanged += change => { - change.elementsToRemove?.ToList().ForEach(Debug.Log); change .elementsToRemove? .OfType() @@ -75,6 +70,10 @@ public void Initialize() return change; }; + CreateNodesFromInstance(); + + CreateEdges(); + RegisterCallback( (GeometryChangedEvent e) => { @@ -182,6 +181,7 @@ private void CreateNodeRecursive(IConnectable connectable, Vector2Int normalized NormalizedPositionDictionary[node] = normalizedPosition; RenderedNodes[connectable] = node; + // ReSharper disable once InvertIf if (DestinationConnectors.ContainsKey(connectable)) { foreach (var (targetConnectable, index) in DestinationConnectors[connectable].Select((v, i) => (v, i))) From 4af3410015a3a3837e5bde630826b62450fcdc8b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 31 Aug 2019 22:08:31 +0900 Subject: [PATCH 074/453] :sparkles: Implement keyboard shortcuts --- Assets/Editor/Scripts/FlowGraphView.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index bc66125..cd0c603 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -80,6 +80,23 @@ public void Initialize() Relocation(); } ); + RegisterCallback( + (KeyDownEvent e) => + { + // ReSharper disable once SwitchStatementMissingSomeCases + switch (e.keyCode) + { + case KeyCode.C: + SearchWindowProvider.FlowPort = null; + SearchWindow + .Open( + new SearchWindowContext(GUIUtility.GUIToScreenPoint(layout.position) + new Vector2(125.0f, 55.0f)), + SearchWindowProvider + ); + break; + } + } + ); } public void Relocation(bool forceReset = false) From f01d02b1c975828993b9a503d575b09a8afaa1c8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 31 Aug 2019 22:32:39 +0900 Subject: [PATCH 075/453] :beetle: Avoid `Undo object may not be null.` --- Assets/Editor/Scripts/FlowNode.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 3e3c3ae..89a3808 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -71,7 +71,7 @@ public Vector2 GetRecordedPosition() public void ApplyPosition() { - if (!(ConnectableInfo.Connectable is ConnectableBase connectable) || Mathf.Approximately(layout.position.magnitude, 0.0f)) + if (!(ConnectableInfo.Connectable is ConnectableBase connectable) || connectable == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) { return; } From d497d90f0cbce52c7af5dd4a76fcd40cdd4ae26c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 31 Aug 2019 23:12:47 +0900 Subject: [PATCH 076/453] :truck::name_badge: Move namespaces deeper --- Assets/Scripts/Connector/Controller.meta | 3 +++ Assets/Scripts/Connector/{ => Controller}/AnimatorTrigger.cs | 4 ++-- .../Connector/{ => Controller}/AnimatorTrigger.cs.meta | 0 Assets/Scripts/Connector/{ => Controller}/AudioController.cs | 4 ++-- .../Connector/{ => Controller}/AudioController.cs.meta | 0 .../Scripts/Connector/{ => Controller}/MoveParentTransform.cs | 4 ++-- .../Connector/{ => Controller}/MoveParentTransform.cs.meta | 0 .../Scripts/Connector/{ => Controller}/PlayableController.cs | 4 ++-- .../Connector/{ => Controller}/PlayableController.cs.meta | 0 .../Connector/{ => Controller}/RaycastTargetController.cs | 4 ++-- .../{ => Controller}/RaycastTargetController.cs.meta | 0 .../Scripts/Connector/{ => Controller}/RaycasterController.cs | 4 ++-- .../Connector/{ => Controller}/RaycasterController.cs.meta | 0 .../Connector/{ => Controller}/SimpleAnimationController.cs | 4 ++-- .../{ => Controller}/SimpleAnimationController.cs.meta | 0 .../Scripts/Connector/{ => Controller}/TimeScaleController.cs | 4 ++-- .../Connector/{ => Controller}/TimeScaleController.cs.meta | 0 Assets/Scripts/Connector/Event.meta | 3 +++ Assets/Scripts/Connector/{ => Event}/AnimationEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/AnimationEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/AudioEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/AudioEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/CameraEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/CameraEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/KeyEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/KeyEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/LifecycleEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/LifecycleEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/LoadSceneEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/LoadSceneEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/MouseEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/MouseEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/ParticleEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/ParticleEvent.cs.meta | 0 .../Scripts/Connector/{ => Event}/PhysicsCollision2DEvent.cs | 4 ++-- .../Connector/{ => Event}/PhysicsCollision2DEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/PhysicsCollisionEvent.cs | 4 ++-- .../Connector/{ => Event}/PhysicsCollisionEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/PhysicsTrigger2DEvent.cs | 4 ++-- .../Connector/{ => Event}/PhysicsTrigger2DEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/PhysicsTriggerEvent.cs | 4 ++-- .../Scripts/Connector/{ => Event}/PhysicsTriggerEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/RectTransformEvent.cs | 4 ++-- .../Scripts/Connector/{ => Event}/RectTransformEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/SimpleAnimationEvent.cs | 4 ++-- .../Connector/{ => Event}/SimpleAnimationEvent.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/TimelineSignal.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/TimelineSignal.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/TransformEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/TransformEvent.cs.meta | 0 .../Scripts/Connector/{ => Event}/UIBehaviourEventTrigger.cs | 4 ++-- .../Connector/{ => Event}/UIBehaviourEventTrigger.cs.meta | 0 Assets/Scripts/Connector/{ => Event}/UnloadSceneEvent.cs | 4 ++-- Assets/Scripts/Connector/{ => Event}/UnloadSceneEvent.cs.meta | 0 Assets/Scripts/Connector/Logic.meta | 3 +++ Assets/Scripts/Connector/{ => Logic}/Empty.cs | 4 ++-- Assets/Scripts/Connector/{ => Logic}/Empty.cs.meta | 0 Assets/Scripts/Connector/{ => Logic}/Interval.cs | 4 ++-- Assets/Scripts/Connector/{ => Logic}/Interval.cs.meta | 0 Assets/Scripts/Connector/{ => Logic}/Timer.cs | 4 ++-- Assets/Scripts/Connector/{ => Logic}/Timer.cs.meta | 0 Assets/Scripts/Message/AudioControllerEventData.cs | 1 + Assets/Scripts/Message/AudioEventData.cs | 1 + Assets/Scripts/Message/CameraEventData.cs | 1 + Assets/Scripts/Message/KeyEventData.cs | 1 + Assets/Scripts/Message/LifecycleEventData.cs | 1 + Assets/Scripts/Message/MouseEventData.cs | 1 + Assets/Scripts/Message/ParticleEventData.cs | 1 + Assets/Scripts/Message/PhysicsCollision2DEventData.cs | 1 + Assets/Scripts/Message/PhysicsCollisionEventData.cs | 1 + Assets/Scripts/Message/PhysicsTrigger2DEventData.cs | 1 + Assets/Scripts/Message/PhysicsTriggerEventData.cs | 1 + Assets/Scripts/Message/PlayableControllerEventData.cs | 1 + Assets/Scripts/Message/RaycastTargetControllerEventData.cs | 1 + Assets/Scripts/Message/RaycasterControllerEventData.cs | 1 + Assets/Scripts/Message/RectTransformEventData.cs | 1 + Assets/Scripts/Message/SimpleAnimationControllerEventData.cs | 1 + Assets/Scripts/Message/SimpleAnimationEventData.cs | 1 + Assets/Scripts/Message/TransformEventData.cs | 1 + Assets/Tests/Runtime/Scripts/AllTest.cs | 3 ++- Assets/Tests/Runtime/Scripts/AnimationEventTest.cs | 2 +- Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs | 2 +- Assets/Tests/Runtime/Scripts/AudioControllerTest.cs | 1 + Assets/Tests/Runtime/Scripts/AudioEventTest.cs | 1 + Assets/Tests/Runtime/Scripts/CameraEventTest.cs | 1 + Assets/Tests/Runtime/Scripts/IntervalTest.cs | 1 + Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs | 1 + Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs | 1 + Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs | 1 + Assets/Tests/Runtime/Scripts/TimerTest.cs | 1 + 90 files changed, 97 insertions(+), 61 deletions(-) create mode 100644 Assets/Scripts/Connector/Controller.meta rename Assets/Scripts/Connector/{ => Controller}/AnimatorTrigger.cs (91%) rename Assets/Scripts/Connector/{ => Controller}/AnimatorTrigger.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/AudioController.cs (92%) rename Assets/Scripts/Connector/{ => Controller}/AudioController.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/MoveParentTransform.cs (89%) rename Assets/Scripts/Connector/{ => Controller}/MoveParentTransform.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/PlayableController.cs (95%) rename Assets/Scripts/Connector/{ => Controller}/PlayableController.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/RaycastTargetController.cs (91%) rename Assets/Scripts/Connector/{ => Controller}/RaycastTargetController.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/RaycasterController.cs (89%) rename Assets/Scripts/Connector/{ => Controller}/RaycasterController.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/SimpleAnimationController.cs (94%) rename Assets/Scripts/Connector/{ => Controller}/SimpleAnimationController.cs.meta (100%) rename Assets/Scripts/Connector/{ => Controller}/TimeScaleController.cs (92%) rename Assets/Scripts/Connector/{ => Controller}/TimeScaleController.cs.meta (100%) create mode 100644 Assets/Scripts/Connector/Event.meta rename Assets/Scripts/Connector/{ => Event}/AnimationEvent.cs (96%) rename Assets/Scripts/Connector/{ => Event}/AnimationEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/AudioEvent.cs (94%) rename Assets/Scripts/Connector/{ => Event}/AudioEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/CameraEvent.cs (89%) rename Assets/Scripts/Connector/{ => Event}/CameraEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/KeyEvent.cs (90%) rename Assets/Scripts/Connector/{ => Event}/KeyEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/LifecycleEvent.cs (95%) rename Assets/Scripts/Connector/{ => Event}/LifecycleEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/LoadSceneEvent.cs (94%) rename Assets/Scripts/Connector/{ => Event}/LoadSceneEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/MouseEvent.cs (92%) rename Assets/Scripts/Connector/{ => Event}/MouseEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/ParticleEvent.cs (93%) rename Assets/Scripts/Connector/{ => Event}/ParticleEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/PhysicsCollision2DEvent.cs (90%) rename Assets/Scripts/Connector/{ => Event}/PhysicsCollision2DEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/PhysicsCollisionEvent.cs (92%) rename Assets/Scripts/Connector/{ => Event}/PhysicsCollisionEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/PhysicsTrigger2DEvent.cs (92%) rename Assets/Scripts/Connector/{ => Event}/PhysicsTrigger2DEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/PhysicsTriggerEvent.cs (90%) rename Assets/Scripts/Connector/{ => Event}/PhysicsTriggerEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/RectTransformEvent.cs (90%) rename Assets/Scripts/Connector/{ => Event}/RectTransformEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/SimpleAnimationEvent.cs (94%) rename Assets/Scripts/Connector/{ => Event}/SimpleAnimationEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/TimelineSignal.cs (92%) rename Assets/Scripts/Connector/{ => Event}/TimelineSignal.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/TransformEvent.cs (90%) rename Assets/Scripts/Connector/{ => Event}/TransformEvent.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/UIBehaviourEventTrigger.cs (95%) rename Assets/Scripts/Connector/{ => Event}/UIBehaviourEventTrigger.cs.meta (100%) rename Assets/Scripts/Connector/{ => Event}/UnloadSceneEvent.cs (94%) rename Assets/Scripts/Connector/{ => Event}/UnloadSceneEvent.cs.meta (100%) create mode 100644 Assets/Scripts/Connector/Logic.meta rename Assets/Scripts/Connector/{ => Logic}/Empty.cs (70%) rename Assets/Scripts/Connector/{ => Logic}/Empty.cs.meta (100%) rename Assets/Scripts/Connector/{ => Logic}/Interval.cs (86%) rename Assets/Scripts/Connector/{ => Logic}/Interval.cs.meta (100%) rename Assets/Scripts/Connector/{ => Logic}/Timer.cs (89%) rename Assets/Scripts/Connector/{ => Logic}/Timer.cs.meta (100%) diff --git a/Assets/Scripts/Connector/Controller.meta b/Assets/Scripts/Connector/Controller.meta new file mode 100644 index 0000000..2d7dd02 --- /dev/null +++ b/Assets/Scripts/Connector/Controller.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 475ae112d7c244e68f088ad2ccf34fff +timeCreated: 1567260047 \ No newline at end of file diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs similarity index 91% rename from Assets/Scripts/Connector/AnimatorTrigger.cs rename to Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 56bd382..7de48ca 100644 --- a/Assets/Scripts/Connector/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -4,9 +4,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] + [AddComponentMenu("UniFlow/Controller/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] public class AnimatorTrigger : ConnectorBase { [SerializeField] diff --git a/Assets/Scripts/Connector/AnimatorTrigger.cs.meta b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs.meta similarity index 100% rename from Assets/Scripts/Connector/AnimatorTrigger.cs.meta rename to Assets/Scripts/Connector/Controller/AnimatorTrigger.cs.meta diff --git a/Assets/Scripts/Connector/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs similarity index 92% rename from Assets/Scripts/Connector/AudioController.cs rename to Assets/Scripts/Connector/Controller/AudioController.cs index 1e8d301..9222521 100644 --- a/Assets/Scripts/Connector/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -4,9 +4,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/AudioController", (int) ConnectorType.AudioController)] + [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] public class AudioController : ConnectorBase { [SerializeField] private AudioControlMethod audioControlMethod = (AudioControlMethod) (-1); diff --git a/Assets/Scripts/Connector/AudioController.cs.meta b/Assets/Scripts/Connector/Controller/AudioController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/AudioController.cs.meta rename to Assets/Scripts/Connector/Controller/AudioController.cs.meta diff --git a/Assets/Scripts/Connector/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs similarity index 89% rename from Assets/Scripts/Connector/MoveParentTransform.cs rename to Assets/Scripts/Connector/Controller/MoveParentTransform.cs index d644223..a0121c4 100644 --- a/Assets/Scripts/Connector/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -4,9 +4,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/MoveParentTransform", (int) ConnectorType.MoveParentTransform)] + [AddComponentMenu("UniFlow/Controller/MoveParentTransform", (int) ConnectorType.MoveParentTransform)] public class MoveParentTransform : ConnectorBase { // ReSharper disable once InconsistentNaming diff --git a/Assets/Scripts/Connector/MoveParentTransform.cs.meta b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs.meta similarity index 100% rename from Assets/Scripts/Connector/MoveParentTransform.cs.meta rename to Assets/Scripts/Connector/Controller/MoveParentTransform.cs.meta diff --git a/Assets/Scripts/Connector/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs similarity index 95% rename from Assets/Scripts/Connector/PlayableController.cs rename to Assets/Scripts/Connector/Controller/PlayableController.cs index 139907e..b564d29 100644 --- a/Assets/Scripts/Connector/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -6,9 +6,9 @@ using UnityEngine.Playables; using UnityEngine.Timeline; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/PlayableController", (int) ConnectorType.PlayableController)] + [AddComponentMenu("UniFlow/Controller/PlayableController", (int) ConnectorType.PlayableController)] public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = (PlayableControlMethod) (-1); diff --git a/Assets/Scripts/Connector/PlayableController.cs.meta b/Assets/Scripts/Connector/Controller/PlayableController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/PlayableController.cs.meta rename to Assets/Scripts/Connector/Controller/PlayableController.cs.meta diff --git a/Assets/Scripts/Connector/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs similarity index 91% rename from Assets/Scripts/Connector/RaycastTargetController.cs rename to Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 422b08d..b53e04f 100644 --- a/Assets/Scripts/Connector/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -7,9 +7,9 @@ using UnityEngine; using UnityEngine.UI; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] + [AddComponentMenu("UniFlow/Controller/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] public class RaycastTargetController : ConnectorBase { [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = (RaycastTargetControlMethod) (-1); diff --git a/Assets/Scripts/Connector/RaycastTargetController.cs.meta b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/RaycastTargetController.cs.meta rename to Assets/Scripts/Connector/Controller/RaycastTargetController.cs.meta diff --git a/Assets/Scripts/Connector/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs similarity index 89% rename from Assets/Scripts/Connector/RaycasterController.cs rename to Assets/Scripts/Connector/Controller/RaycasterController.cs index d3a0856..7f0a670 100644 --- a/Assets/Scripts/Connector/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -7,9 +7,9 @@ using UnityEngine; using UnityEngine.EventSystems; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/RaycasterController", (int) ConnectorType.RaycasterController)] + [AddComponentMenu("UniFlow/Controller/RaycasterController", (int) ConnectorType.RaycasterController)] public class RaycasterController : ConnectorBase { [SerializeField] private RaycasterControlMethod raycasterControlMethod = (RaycasterControlMethod) (-1); diff --git a/Assets/Scripts/Connector/RaycasterController.cs.meta b/Assets/Scripts/Connector/Controller/RaycasterController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/RaycasterController.cs.meta rename to Assets/Scripts/Connector/Controller/RaycasterController.cs.meta diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs similarity index 94% rename from Assets/Scripts/Connector/SimpleAnimationController.cs rename to Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index f9416c4..3a3f7e8 100644 --- a/Assets/Scripts/Connector/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -5,9 +5,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] + [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] public class SimpleAnimationController : ConnectorBase { [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = (SimpleAnimationControlMethod) (-1); diff --git a/Assets/Scripts/Connector/SimpleAnimationController.cs.meta b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/SimpleAnimationController.cs.meta rename to Assets/Scripts/Connector/Controller/SimpleAnimationController.cs.meta diff --git a/Assets/Scripts/Connector/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs similarity index 92% rename from Assets/Scripts/Connector/TimeScaleController.cs rename to Assets/Scripts/Connector/Controller/TimeScaleController.cs index 4dfb50b..06b7e9d 100644 --- a/Assets/Scripts/Connector/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -3,9 +3,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/TimeScaleController", (int) ConnectorType.TimeScaleController)] + [AddComponentMenu("UniFlow/Controller/TimeScaleController", (int) ConnectorType.TimeScaleController)] public class TimeScaleController : ConnectorBase { [SerializeField] private float timeScale = default; diff --git a/Assets/Scripts/Connector/TimeScaleController.cs.meta b/Assets/Scripts/Connector/Controller/TimeScaleController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/TimeScaleController.cs.meta rename to Assets/Scripts/Connector/Controller/TimeScaleController.cs.meta diff --git a/Assets/Scripts/Connector/Event.meta b/Assets/Scripts/Connector/Event.meta new file mode 100644 index 0000000..e6ebe74 --- /dev/null +++ b/Assets/Scripts/Connector/Event.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0a477956e4fa4360a70470e06a0a1082 +timeCreated: 1567259943 \ No newline at end of file diff --git a/Assets/Scripts/Connector/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs similarity index 96% rename from Assets/Scripts/Connector/AnimationEvent.cs rename to Assets/Scripts/Connector/Event/AnimationEvent.cs index d421169..2c7006b 100644 --- a/Assets/Scripts/Connector/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -4,9 +4,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/AnimationEvent", (int) ConnectorType.AnimationEvent)] + [AddComponentMenu("UniFlow/Event/AnimationEvent", (int) ConnectorType.AnimationEvent)] public class AnimationEvent : ConnectorBase { [SerializeField] diff --git a/Assets/Scripts/Connector/AnimationEvent.cs.meta b/Assets/Scripts/Connector/Event/AnimationEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/AnimationEvent.cs.meta rename to Assets/Scripts/Connector/Event/AnimationEvent.cs.meta diff --git a/Assets/Scripts/Connector/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs similarity index 94% rename from Assets/Scripts/Connector/AudioEvent.cs rename to Assets/Scripts/Connector/Event/AudioEvent.cs index ce08326..cf3b644 100644 --- a/Assets/Scripts/Connector/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -4,9 +4,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/AudioEvent", (int) ConnectorType.AudioEvent)] + [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] public class AudioEvent : ConnectorBase { [SerializeField] private AudioEventType audioEventType = (AudioEventType) (-1); diff --git a/Assets/Scripts/Connector/AudioEvent.cs.meta b/Assets/Scripts/Connector/Event/AudioEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/AudioEvent.cs.meta rename to Assets/Scripts/Connector/Event/AudioEvent.cs.meta diff --git a/Assets/Scripts/Connector/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs similarity index 89% rename from Assets/Scripts/Connector/CameraEvent.cs rename to Assets/Scripts/Connector/Event/CameraEvent.cs index 5d4e4b6..0ac11e9 100644 --- a/Assets/Scripts/Connector/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/CameraEvent", (int) ConnectorType.CameraEvent)] + [AddComponentMenu("UniFlow/Event/CameraEvent", (int) ConnectorType.CameraEvent)] public class CameraEvent : ConnectorBase { [SerializeField] private CameraEventType cameraEventType = (CameraEventType) (-1); diff --git a/Assets/Scripts/Connector/CameraEvent.cs.meta b/Assets/Scripts/Connector/Event/CameraEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/CameraEvent.cs.meta rename to Assets/Scripts/Connector/Event/CameraEvent.cs.meta diff --git a/Assets/Scripts/Connector/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs similarity index 90% rename from Assets/Scripts/Connector/KeyEvent.cs rename to Assets/Scripts/Connector/Event/KeyEvent.cs index a3b5a63..418c7b7 100644 --- a/Assets/Scripts/Connector/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -4,9 +4,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/KeyEvent", (int) ConnectorType.KeyEvent)] + [AddComponentMenu("UniFlow/Event/KeyEvent", (int) ConnectorType.KeyEvent)] public class KeyEvent : ConnectorBase { [SerializeField] private KeyEventType keyEventType = (KeyEventType) (-1); diff --git a/Assets/Scripts/Connector/KeyEvent.cs.meta b/Assets/Scripts/Connector/Event/KeyEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/KeyEvent.cs.meta rename to Assets/Scripts/Connector/Event/KeyEvent.cs.meta diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs similarity index 95% rename from Assets/Scripts/Connector/LifecycleEvent.cs rename to Assets/Scripts/Connector/Event/LifecycleEvent.cs index 22b8128..a3e56ae 100644 --- a/Assets/Scripts/Connector/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/LifecycleEvent", (int) ConnectorType.LifecycleEvent)] + [AddComponentMenu("UniFlow/Event/LifecycleEvent", (int) ConnectorType.LifecycleEvent)] public class LifecycleEvent : ConnectorBase { [SerializeField] private LifecycleEventType lifecycleEventType = (LifecycleEventType) (-1); diff --git a/Assets/Scripts/Connector/LifecycleEvent.cs.meta b/Assets/Scripts/Connector/Event/LifecycleEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/LifecycleEvent.cs.meta rename to Assets/Scripts/Connector/Event/LifecycleEvent.cs.meta diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs similarity index 94% rename from Assets/Scripts/Connector/LoadSceneEvent.cs rename to Assets/Scripts/Connector/Event/LoadSceneEvent.cs index e91f71b..7e78b55 100644 --- a/Assets/Scripts/Connector/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs @@ -9,7 +9,7 @@ using UnityEngine.SceneManagement; using Zenject; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { public abstract class LoadSceneEventBase : ConnectorBase { @@ -32,7 +32,7 @@ private async UniTask LoadScenes() } } - [AddComponentMenu("UniFlow/LoadScene", (int) ConnectorType.LoadScene)] + [AddComponentMenu("UniFlow/Event/LoadScene", (int) ConnectorType.LoadScene)] public class LoadSceneEvent : LoadSceneEventBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/LoadSceneEvent.cs.meta b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/LoadSceneEvent.cs.meta rename to Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta diff --git a/Assets/Scripts/Connector/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs similarity index 92% rename from Assets/Scripts/Connector/MouseEvent.cs rename to Assets/Scripts/Connector/Event/MouseEvent.cs index 944f914..76684b5 100644 --- a/Assets/Scripts/Connector/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/MouseEvent", (int) ConnectorType.MouseEvent)] + [AddComponentMenu("UniFlow/Event/MouseEvent", (int) ConnectorType.MouseEvent)] public class MouseEvent : ConnectorBase { [SerializeField] private MouseEventType mouseEventType = (MouseEventType) (-1); diff --git a/Assets/Scripts/Connector/MouseEvent.cs.meta b/Assets/Scripts/Connector/Event/MouseEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/MouseEvent.cs.meta rename to Assets/Scripts/Connector/Event/MouseEvent.cs.meta diff --git a/Assets/Scripts/Connector/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs similarity index 93% rename from Assets/Scripts/Connector/ParticleEvent.cs rename to Assets/Scripts/Connector/Event/ParticleEvent.cs index 296d342..697a676 100644 --- a/Assets/Scripts/Connector/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/ParticleEvent", (int) ConnectorType.ParticleEvent)] + [AddComponentMenu("UniFlow/Event/ParticleEvent", (int) ConnectorType.ParticleEvent)] public class ParticleEvent : ConnectorBase { [SerializeField] private ParticleEventType particleEventType = (ParticleEventType) (-1); diff --git a/Assets/Scripts/Connector/ParticleEvent.cs.meta b/Assets/Scripts/Connector/Event/ParticleEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ParticleEvent.cs.meta rename to Assets/Scripts/Connector/Event/ParticleEvent.cs.meta diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs similarity index 90% rename from Assets/Scripts/Connector/PhysicsCollision2DEvent.cs rename to Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index d574abf..53cb095 100644 --- a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/PhyticsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] + [AddComponentMenu("UniFlow/Event/PhyticsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = (PhysicsCollision2DEventType) (-1); diff --git a/Assets/Scripts/Connector/PhysicsCollision2DEvent.cs.meta b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/PhysicsCollision2DEvent.cs.meta rename to Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs.meta diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs similarity index 92% rename from Assets/Scripts/Connector/PhysicsCollisionEvent.cs rename to Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index 2676462..b1967f8 100644 --- a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] + [AddComponentMenu("UniFlow/Event/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] public class PhysicsCollisionEvent : ConnectorBase { [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = (PhysicsCollisionEventType) (-1); diff --git a/Assets/Scripts/Connector/PhysicsCollisionEvent.cs.meta b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/PhysicsCollisionEvent.cs.meta rename to Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs.meta diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs similarity index 92% rename from Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs rename to Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 2045a60..6cd1650 100644 --- a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] + [AddComponentMenu("UniFlow/Event/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] public class PhysicsTrigger2DEvent : ConnectorBase { [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = (PhysicsTrigger2DEventType) (-1); diff --git a/Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs.meta b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/PhysicsTrigger2DEvent.cs.meta rename to Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs.meta diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs similarity index 90% rename from Assets/Scripts/Connector/PhysicsTriggerEvent.cs rename to Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index a87c6d0..5a78ced 100644 --- a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/PhyticsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] + [AddComponentMenu("UniFlow/Event/PhyticsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = (PhysicsTriggerEventType) (-1); diff --git a/Assets/Scripts/Connector/PhysicsTriggerEvent.cs.meta b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/PhysicsTriggerEvent.cs.meta rename to Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs.meta diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs similarity index 90% rename from Assets/Scripts/Connector/RectTransformEvent.cs rename to Assets/Scripts/Connector/Event/RectTransformEvent.cs index 0ac7c70..f89696d 100644 --- a/Assets/Scripts/Connector/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] + [AddComponentMenu("UniFlow/Event/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] public class RectTransformEvent : ConnectorBase { [SerializeField] private RectTransformEventType rectTransformEventType = (RectTransformEventType) (-1); diff --git a/Assets/Scripts/Connector/RectTransformEvent.cs.meta b/Assets/Scripts/Connector/Event/RectTransformEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/RectTransformEvent.cs.meta rename to Assets/Scripts/Connector/Event/RectTransformEvent.cs.meta diff --git a/Assets/Scripts/Connector/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs similarity index 94% rename from Assets/Scripts/Connector/SimpleAnimationEvent.cs rename to Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 4d1cda9..de71443 100644 --- a/Assets/Scripts/Connector/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -4,9 +4,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] + [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] public class SimpleAnimationEvent : ConnectorBase { [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = (SimpleAnimationEventType) (-1); diff --git a/Assets/Scripts/Connector/SimpleAnimationEvent.cs.meta b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/SimpleAnimationEvent.cs.meta rename to Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs.meta diff --git a/Assets/Scripts/Connector/TimelineSignal.cs b/Assets/Scripts/Connector/Event/TimelineSignal.cs similarity index 92% rename from Assets/Scripts/Connector/TimelineSignal.cs rename to Assets/Scripts/Connector/Event/TimelineSignal.cs index 51d93c1..3c99f02 100644 --- a/Assets/Scripts/Connector/TimelineSignal.cs +++ b/Assets/Scripts/Connector/Event/TimelineSignal.cs @@ -5,11 +5,11 @@ using UnityEngine; using Object = UnityEngine.Object; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { // Timeline SignalReceiver cannot serialize [Serializable] class // So I provide overloads to construct TimelineEventData - [AddComponentMenu("UniFlow/TimelineSignal", (int) ConnectorType.TimelineSignal)] + [AddComponentMenu("UniFlow/Event/TimelineSignal", (int) ConnectorType.TimelineSignal)] public class TimelineSignal : ConnectorBase { private ISubject Subject { get; } = new Subject(); diff --git a/Assets/Scripts/Connector/TimelineSignal.cs.meta b/Assets/Scripts/Connector/Event/TimelineSignal.cs.meta similarity index 100% rename from Assets/Scripts/Connector/TimelineSignal.cs.meta rename to Assets/Scripts/Connector/Event/TimelineSignal.cs.meta diff --git a/Assets/Scripts/Connector/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs similarity index 90% rename from Assets/Scripts/Connector/TransformEvent.cs rename to Assets/Scripts/Connector/Event/TransformEvent.cs index 554b923..65df0ff 100644 --- a/Assets/Scripts/Connector/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -5,9 +5,9 @@ using UniRx.Triggers; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/TransformEvent", (int) ConnectorType.TransformEvent)] + [AddComponentMenu("UniFlow/Event/TransformEvent", (int) ConnectorType.TransformEvent)] public class TransformEvent : ConnectorBase { [SerializeField] private TransformEventType transformEventType = (TransformEventType) (-1); diff --git a/Assets/Scripts/Connector/TransformEvent.cs.meta b/Assets/Scripts/Connector/Event/TransformEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/TransformEvent.cs.meta rename to Assets/Scripts/Connector/Event/TransformEvent.cs.meta diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs similarity index 95% rename from Assets/Scripts/Connector/UIBehaviourEventTrigger.cs rename to Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 489c660..15ccd2f 100644 --- a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -5,9 +5,9 @@ using UnityEngine; using UnityEngine.EventSystems; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] + [AddComponentMenu("UniFlow/Event/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = (EventTriggerType) (-1); diff --git a/Assets/Scripts/Connector/UIBehaviourEventTrigger.cs.meta b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs.meta similarity index 100% rename from Assets/Scripts/Connector/UIBehaviourEventTrigger.cs.meta rename to Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs.meta diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs similarity index 94% rename from Assets/Scripts/Connector/UnloadSceneEvent.cs rename to Assets/Scripts/Connector/Event/UnloadSceneEvent.cs index c09f83e..d784fc9 100644 --- a/Assets/Scripts/Connector/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs @@ -9,7 +9,7 @@ using UnityEngine.SceneManagement; using Zenject; -namespace UniFlow.Connector +namespace UniFlow.Connector.Event { public abstract class UnloadSceneEventBase : ConnectorBase { @@ -32,7 +32,7 @@ private async UniTask UnloadScenes() } } - [AddComponentMenu("UniFlow/UnloadScene", (int) ConnectorType.UnloadScene)] + [AddComponentMenu("UniFlow/Event/UnloadScene", (int) ConnectorType.UnloadScene)] public class UnloadSceneEvent : UnloadSceneEventBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/UnloadSceneEvent.cs.meta b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/UnloadSceneEvent.cs.meta rename to Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta diff --git a/Assets/Scripts/Connector/Logic.meta b/Assets/Scripts/Connector/Logic.meta new file mode 100644 index 0000000..5f8cb41 --- /dev/null +++ b/Assets/Scripts/Connector/Logic.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7c45d5f01cd44fc5bb48d6cc72ae9df1 +timeCreated: 1567260030 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Empty.cs b/Assets/Scripts/Connector/Logic/Empty.cs similarity index 70% rename from Assets/Scripts/Connector/Empty.cs rename to Assets/Scripts/Connector/Logic/Empty.cs index 66ffeec..06dc13a 100644 --- a/Assets/Scripts/Connector/Empty.cs +++ b/Assets/Scripts/Connector/Logic/Empty.cs @@ -2,9 +2,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Logic { - [AddComponentMenu("UniFlow/Empty", (int) ConnectorType.Empty)] + [AddComponentMenu("UniFlow/Logic/Empty", (int) ConnectorType.Empty)] public class Empty : ConnectorBase { public override IObservable OnConnectAsObservable() => diff --git a/Assets/Scripts/Connector/Empty.cs.meta b/Assets/Scripts/Connector/Logic/Empty.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Empty.cs.meta rename to Assets/Scripts/Connector/Logic/Empty.cs.meta diff --git a/Assets/Scripts/Connector/Interval.cs b/Assets/Scripts/Connector/Logic/Interval.cs similarity index 86% rename from Assets/Scripts/Connector/Interval.cs rename to Assets/Scripts/Connector/Logic/Interval.cs index 483865f..e79d9e2 100644 --- a/Assets/Scripts/Connector/Interval.cs +++ b/Assets/Scripts/Connector/Logic/Interval.cs @@ -3,9 +3,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Logic { - [AddComponentMenu("UniFlow/Interval", (int) ConnectorType.Interval)] + [AddComponentMenu("UniFlow/Logic/Interval", (int) ConnectorType.Interval)] public class Interval : ConnectorBase { [SerializeField] private float seconds = default; diff --git a/Assets/Scripts/Connector/Interval.cs.meta b/Assets/Scripts/Connector/Logic/Interval.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Interval.cs.meta rename to Assets/Scripts/Connector/Logic/Interval.cs.meta diff --git a/Assets/Scripts/Connector/Timer.cs b/Assets/Scripts/Connector/Logic/Timer.cs similarity index 89% rename from Assets/Scripts/Connector/Timer.cs rename to Assets/Scripts/Connector/Logic/Timer.cs index 72b0f98..12f3181 100644 --- a/Assets/Scripts/Connector/Timer.cs +++ b/Assets/Scripts/Connector/Logic/Timer.cs @@ -3,9 +3,9 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Logic { - [AddComponentMenu("UniFlow/Timer", (int) ConnectorType.Timer)] + [AddComponentMenu("UniFlow/Logic/Timer", (int) ConnectorType.Timer)] public class Timer : ConnectorBase { [SerializeField] private float seconds = default; diff --git a/Assets/Scripts/Connector/Timer.cs.meta b/Assets/Scripts/Connector/Logic/Timer.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Timer.cs.meta rename to Assets/Scripts/Connector/Logic/Timer.cs.meta diff --git a/Assets/Scripts/Message/AudioControllerEventData.cs b/Assets/Scripts/Message/AudioControllerEventData.cs index 97a2995..f9f890b 100644 --- a/Assets/Scripts/Message/AudioControllerEventData.cs +++ b/Assets/Scripts/Message/AudioControllerEventData.cs @@ -1,4 +1,5 @@ using UniFlow.Connector; +using UniFlow.Connector.Controller; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/AudioEventData.cs b/Assets/Scripts/Message/AudioEventData.cs index da1637d..948e07c 100644 --- a/Assets/Scripts/Message/AudioEventData.cs +++ b/Assets/Scripts/Message/AudioEventData.cs @@ -1,4 +1,5 @@ using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/CameraEventData.cs b/Assets/Scripts/Message/CameraEventData.cs index 2c403db..7e2f654 100644 --- a/Assets/Scripts/Message/CameraEventData.cs +++ b/Assets/Scripts/Message/CameraEventData.cs @@ -1,4 +1,5 @@ using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/KeyEventData.cs b/Assets/Scripts/Message/KeyEventData.cs index 804f7a5..bee5de0 100644 --- a/Assets/Scripts/Message/KeyEventData.cs +++ b/Assets/Scripts/Message/KeyEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; using UnityEngine; namespace UniFlow.Message diff --git a/Assets/Scripts/Message/LifecycleEventData.cs b/Assets/Scripts/Message/LifecycleEventData.cs index 3d8edf0..83e63e7 100644 --- a/Assets/Scripts/Message/LifecycleEventData.cs +++ b/Assets/Scripts/Message/LifecycleEventData.cs @@ -1,6 +1,7 @@ using System; using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/MouseEventData.cs b/Assets/Scripts/Message/MouseEventData.cs index c53ea6e..19d131e 100644 --- a/Assets/Scripts/Message/MouseEventData.cs +++ b/Assets/Scripts/Message/MouseEventData.cs @@ -1,4 +1,5 @@ using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/ParticleEventData.cs b/Assets/Scripts/Message/ParticleEventData.cs index fa9aa4c..f78ac7d 100644 --- a/Assets/Scripts/Message/ParticleEventData.cs +++ b/Assets/Scripts/Message/ParticleEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; using UnityEngine; namespace UniFlow.Message diff --git a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs b/Assets/Scripts/Message/PhysicsCollision2DEventData.cs index 4a03226..ccf3c1a 100644 --- a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs +++ b/Assets/Scripts/Message/PhysicsCollision2DEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; using UnityEngine; namespace UniFlow.Message diff --git a/Assets/Scripts/Message/PhysicsCollisionEventData.cs b/Assets/Scripts/Message/PhysicsCollisionEventData.cs index e54887f..3c3166f 100644 --- a/Assets/Scripts/Message/PhysicsCollisionEventData.cs +++ b/Assets/Scripts/Message/PhysicsCollisionEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; using UnityEngine; namespace UniFlow.Message diff --git a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs b/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs index 27f807a..e74cb92 100644 --- a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs +++ b/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; using UnityEngine; namespace UniFlow.Message diff --git a/Assets/Scripts/Message/PhysicsTriggerEventData.cs b/Assets/Scripts/Message/PhysicsTriggerEventData.cs index 26599df..a2a98c4 100644 --- a/Assets/Scripts/Message/PhysicsTriggerEventData.cs +++ b/Assets/Scripts/Message/PhysicsTriggerEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; using UnityEngine; namespace UniFlow.Message diff --git a/Assets/Scripts/Message/PlayableControllerEventData.cs b/Assets/Scripts/Message/PlayableControllerEventData.cs index 7476033..768f16c 100644 --- a/Assets/Scripts/Message/PlayableControllerEventData.cs +++ b/Assets/Scripts/Message/PlayableControllerEventData.cs @@ -1,4 +1,5 @@ using UniFlow.Connector; +using UniFlow.Connector.Controller; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs index 02859eb..6c1309b 100644 --- a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs +++ b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Controller; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/RaycasterControllerEventData.cs b/Assets/Scripts/Message/RaycasterControllerEventData.cs index a55b3e3..2105154 100644 --- a/Assets/Scripts/Message/RaycasterControllerEventData.cs +++ b/Assets/Scripts/Message/RaycasterControllerEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Controller; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/RectTransformEventData.cs b/Assets/Scripts/Message/RectTransformEventData.cs index 0d3a3d2..3a71781 100644 --- a/Assets/Scripts/Message/RectTransformEventData.cs +++ b/Assets/Scripts/Message/RectTransformEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs index e455493..b257d9f 100644 --- a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs +++ b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Controller; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/SimpleAnimationEventData.cs b/Assets/Scripts/Message/SimpleAnimationEventData.cs index c35e240..33607c6 100644 --- a/Assets/Scripts/Message/SimpleAnimationEventData.cs +++ b/Assets/Scripts/Message/SimpleAnimationEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Scripts/Message/TransformEventData.cs b/Assets/Scripts/Message/TransformEventData.cs index 043ed70..a314b6e 100644 --- a/Assets/Scripts/Message/TransformEventData.cs +++ b/Assets/Scripts/Message/TransformEventData.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using UniFlow.Connector; +using UniFlow.Connector.Event; namespace UniFlow.Message { diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index d23e3c9..7efa04d 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -1,6 +1,7 @@ using System.Collections; using NUnit.Framework; using UniFlow.Connector; +using UniFlow.Connector.Event; using UniFlow.Message; using UniRx.Triggers; using UnityEngine; @@ -8,7 +9,7 @@ using UnityEngine.Playables; using UnityEngine.TestTools; using UnityEngine.UI; -using AnimationEvent = UniFlow.Connector.AnimationEvent; +using AnimationEvent = UniFlow.Connector.Event.AnimationEvent; namespace UniFlow.Tests.Runtime { diff --git a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs index c95e4d7..dce3f51 100644 --- a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs @@ -2,7 +2,7 @@ using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; -using AnimationEvent = UniFlow.Connector.AnimationEvent; +using AnimationEvent = UniFlow.Connector.Event.AnimationEvent; namespace UniFlow.Tests.Runtime { diff --git a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs index 36919a4..6073613 100644 --- a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs @@ -3,7 +3,7 @@ using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; -using AnimationEvent = UniFlow.Connector.AnimationEvent; +using AnimationEvent = UniFlow.Connector.Event.AnimationEvent; namespace UniFlow.Tests.Runtime { diff --git a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs index 08d309d..e3f4834 100644 --- a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs @@ -4,6 +4,7 @@ using UniFlow.Connector; using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Controller; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs index 3ccb80f..3f10fec 100644 --- a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs @@ -4,6 +4,7 @@ using UniFlow.Connector; using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Event; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs index ccdf6ff..53f136a 100644 --- a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs @@ -4,6 +4,7 @@ using UniFlow.Connector; using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Event; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/Assets/Tests/Runtime/Scripts/IntervalTest.cs b/Assets/Tests/Runtime/Scripts/IntervalTest.cs index 1d19378..6bc68c1 100644 --- a/Assets/Tests/Runtime/Scripts/IntervalTest.cs +++ b/Assets/Tests/Runtime/Scripts/IntervalTest.cs @@ -1,6 +1,7 @@ using System.Collections; using UniFlow.Connector; using NUnit.Framework; +using UniFlow.Connector.Logic; using UnityEngine.TestTools; namespace UniFlow.Tests.Runtime diff --git a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs index 1cabda8..650e084 100644 --- a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs @@ -4,6 +4,7 @@ using UniFlow.Connector; using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Event; using UniRx; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index 2639aa8..5133eba 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -2,6 +2,7 @@ using UniFlow.Connector; using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Event; using UnityEngine.Playables; using UnityEngine.TestTools; diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 717434c..0b852bb 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -2,6 +2,7 @@ using UniFlow.Connector; using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Event; using UnityEngine.TestTools; namespace UniFlow.Tests.Runtime diff --git a/Assets/Tests/Runtime/Scripts/TimerTest.cs b/Assets/Tests/Runtime/Scripts/TimerTest.cs index 6fc0d87..946a0e6 100644 --- a/Assets/Tests/Runtime/Scripts/TimerTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimerTest.cs @@ -1,6 +1,7 @@ using System.Collections; using UniFlow.Connector; using NUnit.Framework; +using UniFlow.Connector.Logic; using UnityEngine.TestTools; namespace UniFlow.Tests.Runtime From e305594424ce826e38c2351f920091bff5bad6d5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 1 Sep 2019 01:10:14 +0900 Subject: [PATCH 077/453] :sparkles: Support nested menu for SearchWindow --- Assets/Editor/Scripts/SearchWindowProvider.cs | 53 +++++++++++++++---- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 9bca93b..2f9501d 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using UnityEditor; using UnityEditor.Experimental.GraphView; using UnityEditor.UIElements; @@ -19,6 +20,8 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider public FlowPort FlowPort { get; set; } + private IDictionary SearchTreeGroupEntries { get; } = new Dictionary(); + public void Initialize(FlowGraphView flowGraphView) { FlowGraphView = flowGraphView; @@ -31,16 +34,46 @@ public void Initialize(FlowGraphView flowGraphView) { new SearchTreeGroupEntry(new GUIContent("Add Node")) }; - SearchTreeEntries - .AddRange( - AppDomain - .CurrentDomain - .GetAssemblies() - .SelectMany(x => x.GetTypes()) - .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectableBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) - .OrderBy(x => ((AddComponentMenu) x.GetCustomAttributes(false).FirstOrDefault())?.componentOrder) - .Select(x => new SearchTreeEntry(new GUIContent(x.Name, DummyIcon)) {level = 1, userData = x}) - .ToList() + + AppDomain + .CurrentDomain + .GetAssemblies() + .SelectMany(x => x.GetTypes()) + .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectableBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) + .Where(x => x.GetCustomAttributes(typeof(AddComponentMenu), false).Any()) + .Select(x => (menu: x.GetCustomAttributes(typeof(AddComponentMenu), false).OfType().First(), type: x)) + .OrderBy(x => x.menu.componentMenu) + .ToList() + .ForEach( + item => + { + var (menu, type) = item; + var componentMenuEntries = menu + .componentMenu + .Split('/') + // Ignore first entry `UniFlow` + .Skip(1) + .ToArray(); + var fullPath = new StringBuilder(); + foreach (var (componentMenuEntry, index) in componentMenuEntries.Select((x, i) => (x, i))) + { + fullPath.Append($"/{componentMenuEntry}"); + if (index == componentMenuEntries.Length - 1) + { + break; + } + + if (SearchTreeGroupEntries.ContainsKey(fullPath.ToString())) + { + continue; + } + + SearchTreeGroupEntries[fullPath.ToString()] = new SearchTreeGroupEntry(new GUIContent(componentMenuEntry)) {level = index + 1}; + SearchTreeEntries.Add(SearchTreeGroupEntries[fullPath.ToString()]); + } + + SearchTreeEntries.Add(new SearchTreeEntry(new GUIContent(componentMenuEntries.Last(), DummyIcon)) {level = componentMenuEntries.Length, userData = type}); + } ); } From 6f03f5d56c8cd29581e22f3293a501ac76e42275 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 31 Aug 2019 22:32:02 +0900 Subject: [PATCH 078/453] :white_check_mark: Fix test fixtures * PlayableController --- Assets/Tests/Runtime/Scenes/Basic/All.unity | 16 +++++++++++++--- .../Scenes/Basic/PlayableController.unity | 8 +++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Assets/Tests/Runtime/Scenes/Basic/All.unity b/Assets/Tests/Runtime/Scenes/Basic/All.unity index 12a79af..0a4ebcb 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/All.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/All.unity @@ -310,10 +310,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4c15fc42dc5482199932c4a3305f962, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 1100, y: 50} targetComponents: - {fileID: 2024507135} targetIds: [] actAsTrigger: 0 + playableControlMethod: 0 + timelineAsset: {fileID: 0} playableDirector: {fileID: 2024507138} --- !u!4 &578503983 Transform: @@ -459,6 +462,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 986c65454dfa4cf6a69ff9328f793990, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 50, y: 50} targetComponents: - {fileID: 1565437862} targetIds: [] @@ -631,6 +635,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 13ea2beab68d4b9695c5913d711525ca, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 400, y: 50} targetComponents: - {fileID: 1729537389} targetIds: [] @@ -681,10 +686,16 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 79d730e2e15e4d688fab6e1a6d9f5e56, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 750, y: 50} targetComponents: - {fileID: 578503981} targetIds: [] actAsTrigger: 0 + animationClip: {fileID: 0} + cullingMode: 0 + updateMode: 0 + animator: {fileID: 0} + simpleAnimation: {fileID: 0} --- !u!95 &1729537390 Animator: serializedVersion: 3 @@ -750,6 +761,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7897bf78af8d443e83a6786b2e4fdfda, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 1450, y: 50} targetComponents: - {fileID: 2070612652} targetIds: [] @@ -852,9 +864,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetComponents: [] - targetIds: [] - actAsTrigger: 0 + flowGraphNodePosition: {x: 1800, y: 50} --- !u!4 &2070612653 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity b/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity index 5a6ea46..c7ccd35 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/PlayableController.unity @@ -315,6 +315,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7897bf78af8d443e83a6786b2e4fdfda, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 400, y: 50} targetComponents: - {fileID: 951080161} targetIds: [] @@ -418,10 +419,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c4c15fc42dc5482199932c4a3305f962, type: 3} m_Name: m_EditorClassIdentifier: + flowGraphNodePosition: {x: 50, y: 50} targetComponents: - {fileID: 951080155} targetIds: [] actAsTrigger: 1 + playableControlMethod: 0 + timelineAsset: {fileID: 0} playableDirector: {fileID: 0} --- !u!114 &951080161 MonoBehaviour: @@ -435,9 +439,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: - targetComponents: [] - targetIds: [] - actAsTrigger: 0 + flowGraphNodePosition: {x: 750, y: 50} --- !u!1 &2126485662 GameObject: m_ObjectHideFlags: 0 From 260bce249a1725e5bb09e2e191e27eb4d069691b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 1 Sep 2019 01:30:08 +0900 Subject: [PATCH 079/453] :new: Add IObservableReceiver --- Assets/Scripts/IObservableReceiver.cs | 9 +++++++++ Assets/Scripts/IObservableReceiver.cs.meta | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 Assets/Scripts/IObservableReceiver.cs create mode 100644 Assets/Scripts/IObservableReceiver.cs.meta diff --git a/Assets/Scripts/IObservableReceiver.cs b/Assets/Scripts/IObservableReceiver.cs new file mode 100644 index 0000000..b66c683 --- /dev/null +++ b/Assets/Scripts/IObservableReceiver.cs @@ -0,0 +1,9 @@ +using System; + +namespace UniFlow +{ + public interface IObservableReceiver : IReceiver + { + IObservable OnReceiveAsObservable(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/IObservableReceiver.cs.meta b/Assets/Scripts/IObservableReceiver.cs.meta new file mode 100644 index 0000000..56e5f6a --- /dev/null +++ b/Assets/Scripts/IObservableReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0caf9d28748d46c89a8d899f9681d870 +timeCreated: 1567268582 \ No newline at end of file From 4aa3a293c7fdb437f4a196c64bae6f8f0af00015 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 1 Sep 2019 01:30:32 +0900 Subject: [PATCH 080/453] :sparkles: Implement IObservableReceiver with ObservableReceiverBase --- Assets/Scripts/Receiver/ObservableReceiverBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Receiver/ObservableReceiverBase.cs b/Assets/Scripts/Receiver/ObservableReceiverBase.cs index 4ef4f7b..d103a2f 100644 --- a/Assets/Scripts/Receiver/ObservableReceiverBase.cs +++ b/Assets/Scripts/Receiver/ObservableReceiverBase.cs @@ -3,11 +3,11 @@ namespace UniFlow.Receiver { - public abstract class ObservableReceiverBase : ReceiverBase + public abstract class ObservableReceiverBase : ReceiverBase, IObservableReceiver { private ISubject OnReceiveSubject { get; } = new Subject(); - protected IObservable OnReceiveAsObservable() + IObservable IObservableReceiver.OnReceiveAsObservable() { return OnReceiveSubject; } From 8403ea1dad2242bbc11fe37c56b60895ef1060e6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 10:42:24 +0900 Subject: [PATCH 081/453] :clipboard: Bump up v0.1.0-preview.11 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 4bdac10..fc2bb49 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.10", + "version": "0.1.0-preview.11", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 404157fb4d3497553f4334a1bc5f7388eed3a95e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 10:42:43 +0900 Subject: [PATCH 082/453] :sparkles: Support choice using shared instance for AudioSource --- Assets/Scripts/Connector/Controller/AudioController.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 9222521..5920628 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -14,6 +14,7 @@ public class AudioController : ConnectorBase [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; [SerializeField] private AudioSource audioSource = default; + [SerializeField] private bool useSharedInstance = true; [UsedImplicitly] public AudioControlMethod AudioControlMethod { @@ -31,11 +32,16 @@ [UsedImplicitly] public AudioSource AudioSource audioSource != default ? audioSource : audioSource = - GetComponent() != default + UseSharedInstance && GetComponent() != default ? GetComponent() : gameObject.AddComponent(); set => audioSource = value; } + [UsedImplicitly] public bool UseSharedInstance + { + get => useSharedInstance; + set => useSharedInstance = value; + } private IDisposable Disposable { get; } = new CompositeDisposable(); From fe218b336736438945ccf667723896db9791c352 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 10:55:00 +0900 Subject: [PATCH 083/453] :fire: Remove shortcut key setting in MenuItem --- Assets/Editor/Scripts/FlowEditorWindow.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 47049e7..1dce74f 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -41,18 +41,17 @@ internal static FlowEditorWindow Window } [SerializeField] private List connectableInfoList = new List(); + [SerializeField] [UsedImplicitly] private int counter = default; public IList ConnectableInfoList => connectableInfoList; - [MenuItem("Window/UniFlow/Open UniFlow Graph %#u")] + [MenuItem("Window/UniFlow/Open UniFlow Graph")] public static void Open() { window = GetWindow(); window.titleContent = new GUIContent("UniFlow Graph"); } - [SerializeField] [UsedImplicitly] private int counter; - public void ForceRegisterUndo() { counter++; From f03ba629bfe3a201f893708efca5ddcf72e11bcf Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 11:07:07 +0900 Subject: [PATCH 084/453] :clipboard: Update README, CHANGELOG --- Assets/CHANGELOG.md | 25 +++++++++++++++++++++++++ Assets/README.md | 6 ++++++ 2 files changed, 31 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 65504b8..3bb2374 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,30 @@ # Changelog +## [0.1.0-preview.12] - 2019-09-02 + +Tweak + +### Fixes + +* Remove debug code + * Remove shortcut key +* Update README.md + +## [0.1.0-preview.11] - 2019-09-02 + +Implement UniFlow Graph + +### Features + +* UniFlow Graph + * Display connectables in Graph View + * Edit connectables +* Add `IObservableReceiver` + +### Fixes + +* SimpleAnimationEvent has been destroyed but still trying to access + ## [0.1.0-preview.10] - 2019-08-22 Tweak diff --git a/Assets/README.md b/Assets/README.md index 7228277..c2c5e7e 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -59,6 +59,12 @@ Set true to allow to act as the entry point of events. Individual parameters can be specified for each component. +### UniFlow Graph + +![image](https://user-images.githubusercontent.com/838945/64085909-463dd780-cd70-11e9-9192-77972dbcebce.png) + +UniFlow provides GraphView to view/edit connectables in scenes/prefabs + ## Components what inherits `ConnectorBase` ### Messaging from traditional callback From 61ff0b4a51906e2e596fe80796d36c83089fb5f2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 11:07:19 +0900 Subject: [PATCH 085/453] :clipboard: Bump up v0.1.0-preview.12 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index fc2bb49..e3eb72f 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.11", + "version": "0.1.0-preview.12", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From fb2127cd27442648b8c6bd2ca618d6ae2fb6ac26 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:38:16 +0900 Subject: [PATCH 086/453] :beetle: Fix observable subscription --- Assets/Scripts/ConnectorBase.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 3b88fbf..83d0e88 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -65,7 +65,8 @@ void IConnector.Connect(IObservable source) eventMessages => (this as IConnector) .OnConnectAsObservable() .Select(x => (eventMessages ?? EventMessages.Create()).Append(x)) - ); + ) + .Share(); TargetConnectors .OfType() .ToList() From 422188edee52cc75918af2f59ff645ecd76d4023 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:39:31 +0900 Subject: [PATCH 087/453] :fire: Remove unnecessary set --- Assets/Scripts/Connector/Event/AudioEvent.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index cf3b644..58a6475 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -45,14 +45,6 @@ public override IObservable OnConnectAsObservable() .Select(x => EventMessage.Create(ConnectorType.AudioEvent, AudioSource, AudioEventData.Create(x))); } - private void Awake() - { - if (AudioClip != default) - { - AudioSource.clip = AudioClip; - } - } - private IObservable OnAudioEventAsObservable() { TimePair = AudioSource From ee4b6edbcf1b422256cce97daeab98bea431fd30 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:40:14 +0900 Subject: [PATCH 088/453] :fire: Omit property `UseSharedInstance' --- Assets/Scripts/Connector/Controller/AudioController.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 5920628..9222521 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -14,7 +14,6 @@ public class AudioController : ConnectorBase [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; [SerializeField] private AudioSource audioSource = default; - [SerializeField] private bool useSharedInstance = true; [UsedImplicitly] public AudioControlMethod AudioControlMethod { @@ -32,16 +31,11 @@ [UsedImplicitly] public AudioSource AudioSource audioSource != default ? audioSource : audioSource = - UseSharedInstance && GetComponent() != default + GetComponent() != default ? GetComponent() : gameObject.AddComponent(); set => audioSource = value; } - [UsedImplicitly] public bool UseSharedInstance - { - get => useSharedInstance; - set => useSharedInstance = value; - } private IDisposable Disposable { get; } = new CompositeDisposable(); From dda57947eba6f829f7094d43c00b83ed2dcd8090 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:40:46 +0900 Subject: [PATCH 089/453] :beetle: Check AudioClip --- Assets/Scripts/Connector/Event/AudioEvent.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 58a6475..4e4494f 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -59,10 +59,12 @@ private IObservable OnAudioEventAsObservable() case AudioEventType.UnPause: return AudioSource .ObserveEveryValueChanged(x => x.isPlaying) + .Where(_ => AudioClip == default || AudioClip == AudioSource.clip) .Select(x => DetectAudioEventType(x, AudioSource.clip)) .Where(x => AudioEventType == x); case AudioEventType.Loop: return TimePair + .Where(_ => AudioClip == default || AudioClip == AudioSource.clip) .Where(xs => AudioSource.isPlaying && xs.Current < xs.Previous && xs.Previous > 0.0f) .Select(_ => AudioEventType.Loop); default: From 1871aed599d8df70b4dc75bd722c1971885023ca Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:41:11 +0900 Subject: [PATCH 090/453] :sparkles: Defer to set AudioClip --- Assets/Scripts/Connector/Controller/AudioController.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 9222521..a152fe9 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -52,16 +52,13 @@ public override IObservable OnConnectAsObservable() ); } - private void Awake() + private void InvokeAudioSourceMethod() { if (AudioClip != default) { AudioSource.clip = AudioClip; } - } - private void InvokeAudioSourceMethod() - { switch (AudioControlMethod) { case AudioControlMethod.Play: From 5d85e8835f723608b658f3bff6813f59a01acc81 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:44:57 +0900 Subject: [PATCH 091/453] :truck: Move Load/Unload Scene --- .../Scripts/Connector/{Event => Controller}/LoadSceneEvent.cs | 4 ++-- .../Connector/{Event => Controller}/LoadSceneEvent.cs.meta | 0 .../Connector/{Event => Controller}/UnloadSceneEvent.cs | 4 ++-- .../Connector/{Event => Controller}/UnloadSceneEvent.cs.meta | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename Assets/Scripts/Connector/{Event => Controller}/LoadSceneEvent.cs (94%) rename Assets/Scripts/Connector/{Event => Controller}/LoadSceneEvent.cs.meta (100%) rename Assets/Scripts/Connector/{Event => Controller}/UnloadSceneEvent.cs (93%) rename Assets/Scripts/Connector/{Event => Controller}/UnloadSceneEvent.cs.meta (100%) diff --git a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs b/Assets/Scripts/Connector/Controller/LoadSceneEvent.cs similarity index 94% rename from Assets/Scripts/Connector/Event/LoadSceneEvent.cs rename to Assets/Scripts/Connector/Controller/LoadSceneEvent.cs index 7e78b55..ba2d588 100644 --- a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/Controller/LoadSceneEvent.cs @@ -9,7 +9,7 @@ using UnityEngine.SceneManagement; using Zenject; -namespace UniFlow.Connector.Event +namespace UniFlow.Connector.Controller { public abstract class LoadSceneEventBase : ConnectorBase { @@ -32,7 +32,7 @@ private async UniTask LoadScenes() } } - [AddComponentMenu("UniFlow/Event/LoadScene", (int) ConnectorType.LoadScene)] + [AddComponentMenu("UniFlow/Controller//LoadScene", (int) ConnectorType.LoadScene)] public class LoadSceneEvent : LoadSceneEventBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta b/Assets/Scripts/Connector/Controller/LoadSceneEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta rename to Assets/Scripts/Connector/Controller/LoadSceneEvent.cs.meta diff --git a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs b/Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs similarity index 93% rename from Assets/Scripts/Connector/Event/UnloadSceneEvent.cs rename to Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs index d784fc9..d0526ce 100644 --- a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs @@ -9,7 +9,7 @@ using UnityEngine.SceneManagement; using Zenject; -namespace UniFlow.Connector.Event +namespace UniFlow.Connector.Controller { public abstract class UnloadSceneEventBase : ConnectorBase { @@ -32,7 +32,7 @@ private async UniTask UnloadScenes() } } - [AddComponentMenu("UniFlow/Event/UnloadScene", (int) ConnectorType.UnloadScene)] + [AddComponentMenu("UniFlow/Controller//UnloadScene", (int) ConnectorType.UnloadScene)] public class UnloadSceneEvent : UnloadSceneEventBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta b/Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta rename to Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs.meta From 7d8d8eed9e96b42764a35403b1a03926d3ae5448 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 2 Sep 2019 15:46:56 +0900 Subject: [PATCH 092/453] :name_badge: Rename Load/Unload scenes --- .../Controller/{LoadSceneEvent.cs => LoadScene.cs} | 6 +++--- .../{LoadSceneEvent.cs.meta => LoadScene.cs.meta} | 0 .../Controller/{UnloadSceneEvent.cs => UnloadScene.cs} | 6 +++--- .../{UnloadSceneEvent.cs.meta => UnloadScene.cs.meta} | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename Assets/Scripts/Connector/Controller/{LoadSceneEvent.cs => LoadScene.cs} (89%) rename Assets/Scripts/Connector/Controller/{LoadSceneEvent.cs.meta => LoadScene.cs.meta} (100%) rename Assets/Scripts/Connector/Controller/{UnloadSceneEvent.cs => UnloadScene.cs} (89%) rename Assets/Scripts/Connector/Controller/{UnloadSceneEvent.cs.meta => UnloadScene.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/Controller/LoadSceneEvent.cs b/Assets/Scripts/Connector/Controller/LoadScene.cs similarity index 89% rename from Assets/Scripts/Connector/Controller/LoadSceneEvent.cs rename to Assets/Scripts/Connector/Controller/LoadScene.cs index ba2d588..1ef6560 100644 --- a/Assets/Scripts/Connector/Controller/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/Controller/LoadScene.cs @@ -11,7 +11,7 @@ namespace UniFlow.Connector.Controller { - public abstract class LoadSceneEventBase : ConnectorBase + public abstract class LoadSceneBase : ConnectorBase { [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } @@ -33,7 +33,7 @@ private async UniTask LoadScenes() } [AddComponentMenu("UniFlow/Controller//LoadScene", (int) ConnectorType.LoadScene)] - public class LoadSceneEvent : LoadSceneEventBase + public class LoadScene : LoadSceneBase { [SerializeField] private List sceneNames = default; @@ -44,7 +44,7 @@ [UsedImplicitly] public override IEnumerable SceneNames } } - public abstract class LoadSceneEvent : LoadSceneEventBase where TSceneName : Enum + public abstract class LoadScene : LoadSceneBase where TSceneName : Enum { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/Controller/LoadSceneEvent.cs.meta b/Assets/Scripts/Connector/Controller/LoadScene.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Controller/LoadSceneEvent.cs.meta rename to Assets/Scripts/Connector/Controller/LoadScene.cs.meta diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs b/Assets/Scripts/Connector/Controller/UnloadScene.cs similarity index 89% rename from Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs rename to Assets/Scripts/Connector/Controller/UnloadScene.cs index d0526ce..d149a70 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/Controller/UnloadScene.cs @@ -11,7 +11,7 @@ namespace UniFlow.Connector.Controller { - public abstract class UnloadSceneEventBase : ConnectorBase + public abstract class UnloadSceneBase : ConnectorBase { [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } @@ -33,7 +33,7 @@ private async UniTask UnloadScenes() } [AddComponentMenu("UniFlow/Controller//UnloadScene", (int) ConnectorType.UnloadScene)] - public class UnloadSceneEvent : UnloadSceneEventBase + public class UnloadScene : UnloadSceneBase { [SerializeField] private List sceneNames = default; @@ -44,7 +44,7 @@ [UsedImplicitly] public override IEnumerable SceneNames } } - public abstract class UnloadSceneEvent : UnloadSceneEventBase where TSceneName : Enum + public abstract class UnloadScene : UnloadSceneBase where TSceneName : Enum { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs.meta b/Assets/Scripts/Connector/Controller/UnloadScene.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Controller/UnloadSceneEvent.cs.meta rename to Assets/Scripts/Connector/Controller/UnloadScene.cs.meta From def4e4e89c59f2158e97c90b9b281f4ca6493027 Mon Sep 17 00:00:00 2001 From: lycoris102 Date: Fri, 6 Sep 2019 10:06:53 +0900 Subject: [PATCH 093/453] Define platform in MouseEvent to disable mobile platform --- Assets/Scripts/Connector/Event/MouseEvent.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 76684b5..ea8cd7e 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -30,6 +30,7 @@ public override IObservable OnConnectAsObservable() => private IObservable OnEventAsObservable() { +#if !(UNITY_IOS || UNITY_ANDROID || UNITY_METRO) switch (MouseEventType) { case MouseEventType.MouseDown: @@ -49,6 +50,9 @@ private IObservable OnEventAsObservable() default: throw new ArgumentOutOfRangeException(); } +#else + throw new PlatformNotSupportedException("MouseEvent does not support mobile platform"); +#endif } } From 1ab76deae2cc775ed061a039f40f3422ecaa74dc Mon Sep 17 00:00:00 2001 From: lycoris102 Date: Fri, 6 Sep 2019 10:37:26 +0900 Subject: [PATCH 094/453] Bump up v0.1.0-preview.13 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index e3eb72f..510640b 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.12", + "version": "0.1.0-preview.13", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 2ce8784c9da3ee97d1c67878f8ff74dbdf21e062 Mon Sep 17 00:00:00 2001 From: lycoris102 Date: Fri, 6 Sep 2019 10:49:00 +0900 Subject: [PATCH 095/453] Bump up v0.1.0-preview.14 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 510640b..75ed73f 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.13", + "version": "0.1.0-preview.14", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From d8e88c61caeb3e19ef13a52268e9d58ccc4fdd65 Mon Sep 17 00:00:00 2001 From: lycoris102 Date: Fri, 6 Sep 2019 10:56:51 +0900 Subject: [PATCH 096/453] Reefactor: Delete space in MouseEvent --- Assets/Scripts/Connector/Event/MouseEvent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index ea8cd7e..772073d 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -30,7 +30,7 @@ public override IObservable OnConnectAsObservable() => private IObservable OnEventAsObservable() { -#if !(UNITY_IOS || UNITY_ANDROID || UNITY_METRO) +#if !(UNITY_IOS || UNITY_ANDROID || UNITY_METRO) switch (MouseEventType) { case MouseEventType.MouseDown: From f065f3dacbbad140bbba17ce8d08b35754501f15 Mon Sep 17 00:00:00 2001 From: lycoris102 Date: Fri, 6 Sep 2019 11:56:53 +0900 Subject: [PATCH 097/453] Fix platform in asmdef of editor --- Assets/Editor/UniFlow.Editor.asmdef | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/UniFlow.Editor.asmdef b/Assets/Editor/UniFlow.Editor.asmdef index eefea85..a264c8d 100644 --- a/Assets/Editor/UniFlow.Editor.asmdef +++ b/Assets/Editor/UniFlow.Editor.asmdef @@ -3,7 +3,9 @@ "references": [ "GUID:04f82f1ff3df44e29a1b2cce70510c34" ], - "includePlatforms": [], + "includePlatforms": [ + "Editor" + ], "excludePlatforms": [], "allowUnsafeCode": false, "overrideReferences": false, From 81e2f36fe3512b8d536a52fffe221ea2dc64ab83 Mon Sep 17 00:00:00 2001 From: lycoris102 Date: Fri, 6 Sep 2019 12:06:52 +0900 Subject: [PATCH 098/453] Bump up v0.1.0-preview.15 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 75ed73f..b22dc1b 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.14", + "version": "0.1.0-preview.15", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 5348791ade0ff36fe86279913168f75ba65eac32 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 3 Sep 2019 17:56:57 +0900 Subject: [PATCH 099/453] :wrench: Tweak menu name --- Assets/Scripts/Connector/Controller/LoadScene.cs | 2 +- Assets/Scripts/Connector/Controller/UnloadScene.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/LoadScene.cs b/Assets/Scripts/Connector/Controller/LoadScene.cs index 1ef6560..8a9008f 100644 --- a/Assets/Scripts/Connector/Controller/LoadScene.cs +++ b/Assets/Scripts/Connector/Controller/LoadScene.cs @@ -32,7 +32,7 @@ private async UniTask LoadScenes() } } - [AddComponentMenu("UniFlow/Controller//LoadScene", (int) ConnectorType.LoadScene)] + [AddComponentMenu("UniFlow/Controller/LoadScene", (int) ConnectorType.LoadScene)] public class LoadScene : LoadSceneBase { [SerializeField] private List sceneNames = default; diff --git a/Assets/Scripts/Connector/Controller/UnloadScene.cs b/Assets/Scripts/Connector/Controller/UnloadScene.cs index d149a70..2472e80 100644 --- a/Assets/Scripts/Connector/Controller/UnloadScene.cs +++ b/Assets/Scripts/Connector/Controller/UnloadScene.cs @@ -32,7 +32,7 @@ private async UniTask UnloadScenes() } } - [AddComponentMenu("UniFlow/Controller//UnloadScene", (int) ConnectorType.UnloadScene)] + [AddComponentMenu("UniFlow/Controller/UnloadScene", (int) ConnectorType.UnloadScene)] public class UnloadScene : UnloadSceneBase { [SerializeField] private List sceneNames = default; From 45ca44d3d071f8ab067820c3488730ac65ec7cd1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:30:07 +0900 Subject: [PATCH 100/453] :beetle: Avoid NullReferenceException --- Assets/Editor/Scripts/FlowEditorWindow.cs | 22 +++++----------------- Assets/Editor/Scripts/FlowGraphView.cs | 5 +++++ Assets/Editor/Scripts/FlowVisualElement.cs | 7 +++++-- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 1dce74f..799dd97 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -25,20 +25,7 @@ internal Vector3 LatestScale public class FlowEditorWindow : EditorWindow { - private static FlowEditorWindow window = default; - - internal static FlowEditorWindow Window - { - get - { - if (window == default) - { - window = GetWindow(); - } - - return window; - } - } + internal static FlowEditorWindow Window { get; private set; } = default; [SerializeField] private List connectableInfoList = new List(); [SerializeField] [UsedImplicitly] private int counter = default; @@ -48,8 +35,8 @@ internal static FlowEditorWindow Window [MenuItem("Window/UniFlow/Open UniFlow Graph")] public static void Open() { - window = GetWindow(); - window.titleContent = new GUIContent("UniFlow Graph"); + GetWindow(); + Window.titleContent = new GUIContent("UniFlow Graph"); } public void ForceRegisterUndo() @@ -75,6 +62,7 @@ private void Reload() private void OnEnable() { + Window = this; Undo.undoRedoPerformed += Reload; Reload(); } @@ -87,7 +75,7 @@ private void OnDisable() private void OnDestroy() { - window = null; + Window = null; } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index cd0c603..ff99847 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -170,6 +170,11 @@ private void CreateNodesFromInstance() foreach (var targetConnector in connector.TargetComponents) { + if (targetConnector == default) + { + continue; + } + if (!SourceConnectors.ContainsKey(targetConnector)) { SourceConnectors[targetConnector] = new List(); diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index c037b2b..d03e782 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -16,8 +16,11 @@ public void Initialize() Selection.selectionChanged += () => { - Remove(Content); - Load(); + if (FlowEditorWindow.Window != default) + { + Remove(Content); + Load(); + } }; var toolbar = new IMGUIContainer( From 8116caf8de0b35b22c8a31a3e2dd13c946067c3f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:30:29 +0900 Subject: [PATCH 101/453] :sparkles: Add ActivationController / DestroyInstance --- .../Controller/ActivationController.cs | 55 +++++++++++++++++++ .../Controller/ActivationController.cs.meta | 3 + .../Connector/Controller/DestroyInstance.cs | 49 +++++++++++++++++ .../Controller/DestroyInstance.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 4 +- .../Message/ActivationControllerEventData.cs | 17 ++++++ .../ActivationControllerEventData.cs.meta | 3 + .../Message/DestroyInstanceEventData.cs | 14 +++++ .../Message/DestroyInstanceEventData.cs.meta | 3 + 9 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 Assets/Scripts/Connector/Controller/ActivationController.cs create mode 100644 Assets/Scripts/Connector/Controller/ActivationController.cs.meta create mode 100644 Assets/Scripts/Connector/Controller/DestroyInstance.cs create mode 100644 Assets/Scripts/Connector/Controller/DestroyInstance.cs.meta create mode 100644 Assets/Scripts/Message/ActivationControllerEventData.cs create mode 100644 Assets/Scripts/Message/ActivationControllerEventData.cs.meta create mode 100644 Assets/Scripts/Message/DestroyInstanceEventData.cs create mode 100644 Assets/Scripts/Message/DestroyInstanceEventData.cs.meta diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs new file mode 100644 index 0000000..ef49b7f --- /dev/null +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/ActivationController", (int) ConnectorType.LoadScene)] + public class ActivationController : ConnectorBase + { + [SerializeField] private List targetMonoBehaviours = default; + [SerializeField] private List targetGameObjects = default; + [SerializeField] private bool activated = default; + + [UsedImplicitly] public IEnumerable MonoBehaviours + { + get => targetMonoBehaviours; + set => targetMonoBehaviours = value.ToList(); + } + [UsedImplicitly] public IEnumerable GameObjects + { + get => targetGameObjects; + set => targetGameObjects = value.ToList(); + } + [UsedImplicitly] public bool Activated + { + get => activated; + set => activated = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + return Observable + .Create( + observer => + { + MonoBehaviours.ToList().ForEach(x => x.enabled = Activated); + GameObjects.ToList().ForEach(x => x.SetActive(Activated)); + observer.OnNext(EventMessage.Create(ConnectorType.ActivationController, this, ActivationControllerEventData.Create(Activated))); + return Disposable; + } + ); + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs.meta b/Assets/Scripts/Connector/Controller/ActivationController.cs.meta new file mode 100644 index 0000000..b022e7b --- /dev/null +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d5dc990cbe0e4a4fbdff5998e2bcffad +timeCreated: 1567400525 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs new file mode 100644 index 0000000..e0817e5 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Message; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/DestroyInstance", (int) ConnectorType.LoadScene)] + public class DestroyInstance : ConnectorBase + { + [SerializeField] private List targetComponents = default; + [SerializeField] private List targetGameObjects = default; + + [UsedImplicitly] public IEnumerable Components + { + get => targetComponents; + set => targetComponents = value.ToList(); + } + [UsedImplicitly] public IEnumerable GameObjects + { + get => targetGameObjects; + set => targetGameObjects = value.ToList(); + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + return Observable + .Create( + observer => + { + Components.ToList().ForEach(Destroy); + GameObjects.ToList().ForEach(Destroy); + observer.OnNext(EventMessage.Create(ConnectorType.DestroyInstance, this, DestroyInstanceEventData.Create())); + return Disposable; + } + ); + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs.meta b/Assets/Scripts/Connector/Controller/DestroyInstance.cs.meta new file mode 100644 index 0000000..d395eeb --- /dev/null +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9a5167253986443d8edd6044e4750f02 +timeCreated: 1567400626 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 25abd11..12baa08 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -18,7 +18,9 @@ public enum ConnectorType PhysicsTriggerEvent, PhysicsTrigger2DEvent, - SimpleAnimationController = 300, + ActivationController = 300, + DestroyInstance, + SimpleAnimationController, SimpleAnimationEvent, AnimatorTrigger, AnimationEvent, diff --git a/Assets/Scripts/Message/ActivationControllerEventData.cs b/Assets/Scripts/Message/ActivationControllerEventData.cs new file mode 100644 index 0000000..8717449 --- /dev/null +++ b/Assets/Scripts/Message/ActivationControllerEventData.cs @@ -0,0 +1,17 @@ +namespace UniFlow.Message +{ + public class ActivationControllerEventData + { + private ActivationControllerEventData(bool activated) + { + Activated = activated; + } + + public bool Activated { get; } + + public static ActivationControllerEventData Create(bool activated) + { + return new ActivationControllerEventData(activated); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/ActivationControllerEventData.cs.meta b/Assets/Scripts/Message/ActivationControllerEventData.cs.meta new file mode 100644 index 0000000..7182b9d --- /dev/null +++ b/Assets/Scripts/Message/ActivationControllerEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 136a71e942d6476abfb12523c02b47b3 +timeCreated: 1567402131 \ No newline at end of file diff --git a/Assets/Scripts/Message/DestroyInstanceEventData.cs b/Assets/Scripts/Message/DestroyInstanceEventData.cs new file mode 100644 index 0000000..28110c7 --- /dev/null +++ b/Assets/Scripts/Message/DestroyInstanceEventData.cs @@ -0,0 +1,14 @@ +namespace UniFlow.Message +{ + public class DestroyInstanceEventData + { + private DestroyInstanceEventData() + { + } + + public static DestroyInstanceEventData Create() + { + return new DestroyInstanceEventData(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/DestroyInstanceEventData.cs.meta b/Assets/Scripts/Message/DestroyInstanceEventData.cs.meta new file mode 100644 index 0000000..cb54869 --- /dev/null +++ b/Assets/Scripts/Message/DestroyInstanceEventData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a158e5781d704c62a7142dadc42e3e82 +timeCreated: 1567402064 \ No newline at end of file From 4476857013616f8eb7be56b44dd18cdfc3086b77 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:30:47 +0900 Subject: [PATCH 102/453] :sparkles: Support to render List using PropertyField --- Assets/Editor/Scripts/FlowNode.cs | 60 +++++++++++++++++-- Assets/Editor/Scripts/SearchWindowProvider.cs | 4 -- 2 files changed, 55 insertions(+), 9 deletions(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 89a3808..4a06b21 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -33,6 +33,16 @@ public void Initialize() Capabilities.Ascendable | Capabilities.Renamable; + if (ConnectableInfo.GameObject == default) + { + ConnectableInfo.GameObject = DeterminateGameObject(); + } + + if (ConnectableInfo.Connectable == default) + { + ConnectableInfo.Connectable = Undo.AddComponent(ConnectableInfo.GameObject, ConnectableInfo.Type) as IConnectable; + } + AddParameters(); AddPorts(); RegisterCallback((GeometryChangedEvent e) => ApplyPosition()); @@ -44,7 +54,9 @@ public void Initialize() private ConnectableInfo ConnectableInfo { get; } private IEdgeConnectorListener EdgeConnectorListener { get; } - private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> + private const string DefaultTargetGameObjectName = "UniFlowController"; + + private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> { {typeof(string), CreateBindableElement}, {typeof(int), CreateBindableElement}, @@ -135,6 +147,11 @@ private void AddParameters() EditorUtility.SetDirty(x.newValue); } + if (x.previousValue != default && x.previousValue is GameObject previousGameObject && previousGameObject.name == "Dummy") + { + Object.Destroy(previousGameObject); + } + Undo.CollapseUndoOperations(groupId); } ); @@ -159,8 +176,22 @@ private void AddParameters() contentsElement.Add(parametersElement); } - private static BindableElement CreateField(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) + private static VisualElement CreateField(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) { + // List field only be rendered by PropertyField + if (parameter.Type.IsGenericType && typeof(List<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition())) + { + if (connectableInfo.GameObject == default || connectableInfo.Connectable == default) + { + return null; + } + + var serializedObject = new SerializedObject(connectableInfo.Connectable as Component); + var field = new PropertyField(serializedObject.FindProperty(parameter.Name), ToDisplayName(parameter.Name)); + field.Bind(serializedObject); + return field; + } + // EnumField does not work unless the initial value is given to the second argument if (parameter.Type.IsEnum) { @@ -184,16 +215,19 @@ private static BindableElement CreateField(ConnectableInfo connectableInfo, Conn fieldType = typeof(Object); } - return CreateFieldFunctions[fieldType](parameter); + return CreateFieldFunctions[fieldType](connectableInfo, parameter); } - private static BindableElement CreateBindableElement(ConnectableInfo.Parameter parameter) where TResult : BaseField, new() + private static BindableElement CreateBindableElement(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) where TResult : BaseField, new() { var field = new TResult { label = ToDisplayName(parameter.Name), - value = (TValue) parameter.Value, }; + if (parameter.Value != default) + { + field.value = (TValue) parameter.Value; + } if (field is INotifyValueChanged notifyValueChanged) { @@ -203,6 +237,7 @@ private static BindableElement CreateField(ConnectableInfo connectableInfo, Conn // 直接 Component 監視させちゃう? Undo.RecordObject(FlowEditorWindow.Window, "Change Value"); parameter.Value = x.newValue; + connectableInfo.ApplyParameter(parameter); FlowEditorWindow.Window.ForceRegisterUndo(); } ); @@ -218,6 +253,21 @@ private static BindableElement CreateField(ConnectableInfo connectableInfo, Conn return field; } + private static GameObject DeterminateGameObject() + { + if (Selection.activeGameObject != default) + { + return Selection.activeGameObject; + } + + if (GameObject.Find(DefaultTargetGameObjectName) != default) + { + return GameObject.Find(DefaultTargetGameObjectName); + } + + return new GameObject(DefaultTargetGameObjectName); + } + private void AddPorts() { if (typeof(IConnector).IsAssignableFrom(ConnectableInfo.Type)) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 2f9501d..a56c55b 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -2,11 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using UnityEditor; using UnityEditor.Experimental.GraphView; -using UnityEditor.UIElements; using UnityEngine; -using UnityEngine.UIElements; namespace UniFlow.Editor { @@ -90,7 +87,6 @@ bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, Search } var node = FlowGraphView.AddNode((Type) searchTreeEntry.userData, null, FlowGraphView.NormalizeMousePosition(context.screenMousePosition)); - node.Query().Build().First().value = Selection.activeGameObject; if (FlowPort != default) { From 90a8cbfa1a098d2ddb9419fb23a3912ad45b16c3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:31:37 +0900 Subject: [PATCH 103/453] :clipboard: Upgrade Unity 2019.2.4f1 --- ProjectSettings/ProjectVersion.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index f18539f..dbb1604 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.3f1 -m_EditorVersionWithRevision: 2019.2.3f1 (8e55c27a4621) +m_EditorVersion: 2019.2.4f1 +m_EditorVersionWithRevision: 2019.2.4f1 (c63b2af89a85) From 4382860d861920057caaf278e84248fe7b60507d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:34:43 +0900 Subject: [PATCH 104/453] :clipboard: Bump up version to v0.1.0-preview.16 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index b22dc1b..96fe017 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.15", + "version": "0.1.0-preview.16", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 42f21766aabbd9e4cf90b6419c5b63a49c4c6611 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:44:50 +0900 Subject: [PATCH 105/453] :sparkles: Register undo stack --- Assets/Editor/Scripts/FlowNode.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 4a06b21..a270227 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -265,7 +265,9 @@ private static GameObject DeterminateGameObject() return GameObject.Find(DefaultTargetGameObjectName); } - return new GameObject(DefaultTargetGameObjectName); + var go = new GameObject(DefaultTargetGameObjectName); + Undo.RegisterCreatedObjectUndo(go, "New UniFlowController"); + return go; } private void AddPorts() From 682c741b36979b95bc1f441512e64eaf232636df Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 14:45:22 +0900 Subject: [PATCH 106/453] :clipboard: Bump up version to v0.1.0-preview.17 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 96fe017..5079044 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.16", + "version": "0.1.0-preview.17", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From a255e2649369455656e07370c85906f3d11159e2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 15:22:22 +0900 Subject: [PATCH 107/453] :name_badge: Rename enum --- Assets/Scripts/ConnectorType.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 12baa08..8f3598a 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -18,7 +18,7 @@ public enum ConnectorType PhysicsTriggerEvent, PhysicsTrigger2DEvent, - ActivationController = 300, + ActivationController = 300, DestroyInstance, SimpleAnimationController, SimpleAnimationEvent, @@ -42,7 +42,7 @@ public enum ConnectorType TimeScaleController, Empty, - Bundle = 10000, + Preset = 10000, Receiver = 20000, From 1d05078eb259b7aa0989e4c875040a6110977e2e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 15:48:38 +0900 Subject: [PATCH 108/453] :memo: Update CHANGELOG, README --- Assets/CHANGELOG.md | 42 ++++++++++++++++++++++++++++++++++++ Assets/README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 3bb2374..47b2e28 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,47 @@ # Changelog +## [0.1.0-preview.17] - 2019-09-09 + +Fix undo + +### Fixes + +* Register GameObject creation event to undo stack + +## [0.1.0-preview.16] - 2019-09-09 + +Fix error in FlowGraph + +### Fixes + +* Fix NullReferenceException in FlowGraph +* Support to render `List` + +## [0.1.0-preview.15] - 2019-09-06 + +Fix build issue + +### Fixes + +* Avoid compile error on build + +## [0.1.0-preview.14] - 2019-09-02 + +None + +## [0.1.0-preview.13] - 2019-09-02 + +Tweak + +### Changes + +* Rename connectables + +### Fixes + +* Omit shared components +* Fix `IObservable.Subscribe()` + ## [0.1.0-preview.12] - 2019-09-02 Tweak diff --git a/Assets/README.md b/Assets/README.md index c2c5e7e..83e36d5 100644 --- a/Assets/README.md +++ b/Assets/README.md @@ -173,6 +173,8 @@ Component supports below events to observe. * MouseOver * MouseDrag +Note: Do not notify on mobile platforms. + ### Messaging from Physics #### `PhysicsCollisionEvent` @@ -225,6 +227,26 @@ Component supports below events to observe. ### Messaging from time related components +#### `ActivationController` + +This component will control activation of `GameObject` and `MonoBehaviour`. + +Invoke `GameObject.SetActive(bool)` if `TargetGameObjects` field specified. + +Change `MonoBehaviour.enabled` field if `TargetMonoBaheviours` field specified. + +#### `DestroyInstance` + +This component will destroy instances. + +#### `SimpleAnimationController` + +This component will control [SimpleAnimation](https://github.com/Unity-Technologies/SimpleAnimation) components. + +#### `SimpleAnimationEvent` + +This component will observe event that triggered from [SimpleAnimation](https://github.com/Unity-Technologies/SimpleAnimation) components. + #### `AnimatorTrigger` This component will fire `Animator.SetTrigger()`. @@ -278,6 +300,36 @@ This component observes Timeline Signals emission. Specify `TimelineSignal.Dispatch()` in the destination method of the `UnityEngine.Timeline.SignalReceiver` component +#### `RaycasterController` + +This component controls some Raycaster such as `PhysicsRaycaster`, `Physics2DRaycaster` and `GraphicRaycaster`. + +#### `RaycastTargetController` + +This component controls raycastTarget such as `Collider.enabled`, `Graphic.raycastTarget`. + +#### `MoveParentTransform` + +This component changes parent transform. + +### Scene management + +#### `LoadScene` + +This component will load scene specified as string. + +#### `LoadScene` + +This component will load scene specified as enum. + +#### `UnloadScene` + +This component will unload scene specified as string. + +#### `UnloadScene` + +This component will unload scene specified as enum. + ### Other utilities #### `Timer` From f3a46d6ae5f5dafe59cb33ed7e671675aa8e7ef3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 16:15:09 +0900 Subject: [PATCH 109/453] :beetle: Avoid error on change scene --- Assets/Editor/Scripts/FlowVisualElement.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index d03e782..5fdefbf 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -18,7 +18,10 @@ public void Initialize() { if (FlowEditorWindow.Window != default) { - Remove(Content); + if (Contains(Content)) + { + Remove(Content); + } Load(); } }; @@ -77,4 +80,4 @@ private void Load() Add(Content); } } -} \ No newline at end of file +} From 603ee3c27405b1e4cad9cd2ee731d96c92b0090c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 9 Sep 2019 16:16:10 +0900 Subject: [PATCH 110/453] :clipboard: Bump up version to v0.1.0-preview.18 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 5079044..3c00b3c 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.17", + "version": "0.1.0-preview.18", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From cf265291022555640208ffdec7197896bc1478ac Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 10 Sep 2019 14:58:52 +0900 Subject: [PATCH 111/453] :beetle: Avoid NullReferenceException --- Assets/Editor/Scripts/FlowGraphView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index ff99847..12c6341 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -163,7 +163,7 @@ private void CreateNodesFromInstance() } var connector = connectable as ConnectorBase; - if (connector == default) + if (connector == default || connector.TargetComponents == null) { continue; } From 1a08c3de0994542c320066e406e62a9bbc0cbe09 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 10 Sep 2019 14:59:06 +0900 Subject: [PATCH 112/453] :sparkles: Set TargetComponents on select from search window --- Assets/Editor/Scripts/FlowNode.cs | 3 ++- Assets/Editor/Scripts/SearchWindowProvider.cs | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index a270227..ed8d7bc 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -51,7 +51,8 @@ public void Initialize() public Port InputPort { get; private set; } public Port OutputPort { get; private set; } - private ConnectableInfo ConnectableInfo { get; } + internal ConnectableInfo ConnectableInfo { get; } + private IEdgeConnectorListener EdgeConnectorListener { get; } private const string DefaultTargetGameObjectName = "UniFlowController"; diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index a56c55b..0a07afa 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -91,6 +91,10 @@ bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, Search if (FlowPort != default) { FlowGraphView.AddEdge(FlowPort, (FlowPort) node.InputPort); + if (FlowPort.node is FlowNode targetFlowNode && targetFlowNode.ConnectableInfo.Connectable is ConnectorBase targetConnector) + { + targetConnector.TargetComponents = new List {node.ConnectableInfo.Connectable as ConnectableBase}; + } } return true; From 8b9fa8c6aa494b0627f79a48277ca73027a239a6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 10 Sep 2019 21:56:47 +0900 Subject: [PATCH 113/453] :sparkles: Automatic handling for ActAsTrigger --- Assets/Editor/Scripts/FlowEditorWindow.cs | 5 ++- Assets/Editor/Scripts/FlowGraphView.cs | 41 +++++++++++++++++-- Assets/Editor/Scripts/FlowNode.cs | 14 +++++-- Assets/Editor/Scripts/FlowVisualElement.cs | 2 +- Assets/Editor/Scripts/SearchWindowProvider.cs | 3 +- 5 files changed, 56 insertions(+), 9 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 799dd97..f3c00bc 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -27,6 +27,8 @@ public class FlowEditorWindow : EditorWindow { internal static FlowEditorWindow Window { get; private set; } = default; + internal FlowGraphView FlowGraphView { get; private set; } + [SerializeField] private List connectableInfoList = new List(); [SerializeField] [UsedImplicitly] private int counter = default; @@ -56,6 +58,7 @@ private void Reload() }; flowVisualElement.Initialize(); rootVisualElement.Add(flowVisualElement); + FlowGraphView = flowVisualElement.FlowGraphView; Repaint(); } @@ -78,4 +81,4 @@ private void OnDestroy() Window = null; } } -} \ No newline at end of file +} diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 12c6341..4f4a2d9 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -58,6 +58,23 @@ public void Initialize() ); }; + deleteSelection += (operationName, user) => + { + DeleteSelection(); + SetupActAsTrigger(); + }; + + elementsRemovedFromStackNode += (stackNode, removedGraphElements) => + { + removedGraphElements.ToList().ForEach(Debug.Log); + SetupActAsTrigger(); + }; + elementsRemovedFromGroup += (group, removedGraphElements) => + { + removedGraphElements.ToList().ForEach(Debug.Log); + SetupActAsTrigger(); + }; + graphViewChanged += change => { change @@ -67,6 +84,7 @@ public void Initialize() .ForEach( x => x.RemoveFromGraphView() ); + SetupActAsTrigger(); return change; }; @@ -149,11 +167,27 @@ internal Vector2 NormalizeMousePosition(Vector2 mousePosition) ); } + internal void SetupActAsTrigger() + { + this.Query() + .Children() + .Where(x => x.ConnectableInfo.Connectable is ConnectorBase) + .ForEach(x => ((ConnectorBase) x.ConnectableInfo.Connectable).ActAsTrigger = (x.InputPort.connections == null || !x.InputPort.connections.Any())); + } + private void CreateNodesFromInstance() { var connectables = Selection.activeGameObject == default || Selection.activeGameObject.scene.IsValid() - ? SceneManager.GetActiveScene().GetRootGameObjects().SelectMany(x => x.GetComponentsInChildren()).ToArray() - : Selection.activeGameObject.GetComponentsInChildren().ToArray(); + ? Enumerable + .Range(0, SceneManager.sceneCount) + .Select(SceneManager.GetSceneAt) + .SelectMany(x => x.GetRootGameObjects()) + .SelectMany(x => x.GetComponentsInChildren()) + .ToArray() + : Selection + .activeGameObject + .GetComponentsInChildren() + .ToArray(); foreach (var connectable in connectables) { @@ -257,6 +291,7 @@ public FlowEdge AddEdge(FlowPort outputPort, FlowPort inputPort) edge.output.Connect(edge); edge.input.Connect(edge); AddElement(edge); + SetupActAsTrigger(); return edge; } @@ -268,4 +303,4 @@ public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAd .ToList(); } } -} \ No newline at end of file +} diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index ed8d7bc..0c7ca43 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -21,6 +21,7 @@ public FlowNode(ConnectableInfo connectableInfo, IEdgeConnectorListener edgeConn public void Initialize() { + name = ConnectableInfo.Name; title = ConnectableInfo.Name; styleSheets.Add(AssetReferences.Instance.FlowNode); capabilities = @@ -75,6 +76,7 @@ void IRemovableElement.RemoveFromGraphView() } Undo.DestroyObjectImmediate(component); + FlowEditorWindow.Window.FlowGraphView.SetupActAsTrigger(); } public Vector2 GetRecordedPosition() @@ -179,8 +181,14 @@ private void AddParameters() private static VisualElement CreateField(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) { - // List field only be rendered by PropertyField - if (parameter.Type.IsGenericType && typeof(List<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition())) + // Generic types field only be rendered by PropertyField + if ( + parameter.Type.IsGenericType + && ( + typeof(List<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) + || typeof(ExposedReference<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) + ) + ) { if (connectableInfo.GameObject == default || connectableInfo.Connectable == default) { @@ -304,4 +312,4 @@ private static string ToDisplayName(string original) return original.Substring(0, 1).ToUpper() + Regex.Replace(original.Substring(1), "([A-Z]+[a-z])", " $1"); } } -} \ No newline at end of file +} diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 5fdefbf..8ce52d8 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -7,7 +7,7 @@ namespace UniFlow.Editor { public class FlowVisualElement : VisualElement { - private FlowGraphView FlowGraphView { get; set; } + internal FlowGraphView FlowGraphView { get; private set; } private VisualElement Content { get; set; } public void Initialize() diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 0a07afa..21c5ec3 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -96,8 +96,9 @@ bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, Search targetConnector.TargetComponents = new List {node.ConnectableInfo.Connectable as ConnectableBase}; } } + FlowGraphView.SetupActAsTrigger(); return true; } } -} \ No newline at end of file +} From ccfe01d56d0e7042114fc4b1fef915a034ce2d89 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 11 Sep 2019 01:38:49 +0900 Subject: [PATCH 114/453] :microscope: [WIP] Add interfaces --- .../Connector/Controller/CreateInstance.cs | 33 +++++++++++++++++++ .../Controller/CreateInstance.cs.meta | 3 ++ Assets/Scripts/EventMessage.cs | 16 +++++++-- Assets/Scripts/IEventMessage.cs | 12 +++++++ Assets/Scripts/IEventMessage.cs.meta | 3 ++ Assets/Scripts/IValueHolder.cs | 7 ++++ Assets/Scripts/IValueHolder.cs.meta | 3 ++ Assets/Scripts/IValuePublisher.cs | 7 ++++ Assets/Scripts/IValuePublisher.cs.meta | 3 ++ Assets/Scripts/IValueReceiver.cs | 7 ++++ Assets/Scripts/IValueReceiver.cs.meta | 3 ++ .../Scripts/Message/CreateInstanceMessage.cs | 22 +++++++++++++ .../Message/CreateInstanceMessage.cs.meta | 3 ++ 13 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 Assets/Scripts/Connector/Controller/CreateInstance.cs create mode 100644 Assets/Scripts/Connector/Controller/CreateInstance.cs.meta create mode 100644 Assets/Scripts/IEventMessage.cs create mode 100644 Assets/Scripts/IEventMessage.cs.meta create mode 100644 Assets/Scripts/IValueHolder.cs create mode 100644 Assets/Scripts/IValueHolder.cs.meta create mode 100644 Assets/Scripts/IValuePublisher.cs create mode 100644 Assets/Scripts/IValuePublisher.cs.meta create mode 100644 Assets/Scripts/IValueReceiver.cs create mode 100644 Assets/Scripts/IValueReceiver.cs.meta create mode 100644 Assets/Scripts/Message/CreateInstanceMessage.cs create mode 100644 Assets/Scripts/Message/CreateInstanceMessage.cs.meta diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs b/Assets/Scripts/Connector/Controller/CreateInstance.cs new file mode 100644 index 0000000..a448ed5 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/CreateInstance.cs @@ -0,0 +1,33 @@ +using System; +using UniFlow.Message; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + public class CreateInstance : ConnectorBase, IValuePublisher + { + [SerializeField] private GameObject source = default; + private GameObject Source => source == default ? gameObject : source; + + [SerializeField] private Transform parent = default; + private Transform Parent => parent == default ? transform : parent; + + public override IObservable OnConnectAsObservable() + { + return Observable + .Return( + EventMessage.Create( + ConnectorType.Custom, + this, + CreateInstanceMessage.Create(this) + ) + ); + } + + GameObject IValuePublisher.Publish() + { + return Instantiate(Source, Parent); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs.meta b/Assets/Scripts/Connector/Controller/CreateInstance.cs.meta new file mode 100644 index 0000000..871d0b0 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/CreateInstance.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9d96a435a8d74b1a8c60ffea57ac84fa +timeCreated: 1568130173 \ No newline at end of file diff --git a/Assets/Scripts/EventMessage.cs b/Assets/Scripts/EventMessage.cs index c8ccd39..cdba954 100644 --- a/Assets/Scripts/EventMessage.cs +++ b/Assets/Scripts/EventMessage.cs @@ -3,9 +3,9 @@ namespace UniFlow { [PublicAPI] - public struct EventMessage + public class EventMessage { - private EventMessage(ConnectorType connectorType, object sender, object data) + protected EventMessage(ConnectorType connectorType, object sender, object data) { ConnectorType = connectorType; Sender = sender; @@ -21,4 +21,16 @@ public static EventMessage Create(ConnectorType connectorType, object sender, ob return new EventMessage(connectorType, sender, data); } } + + public class EventMessage2 + { + protected EventMessage2(ConnectorType connectorType, TData data) + { + ConnectorType = connectorType; + Data = data; + } + + public ConnectorType ConnectorType { get; } + public TData Data { get; } + } } \ No newline at end of file diff --git a/Assets/Scripts/IEventMessage.cs b/Assets/Scripts/IEventMessage.cs new file mode 100644 index 0000000..f14f790 --- /dev/null +++ b/Assets/Scripts/IEventMessage.cs @@ -0,0 +1,12 @@ +namespace UniFlow +{ + public interface IEventMessage + { + ConnectorType ConnectorType { get; } + } + + public interface IEventMessage : IEventMessage + { + TSender Sender { get; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/IEventMessage.cs.meta b/Assets/Scripts/IEventMessage.cs.meta new file mode 100644 index 0000000..4f2035e --- /dev/null +++ b/Assets/Scripts/IEventMessage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6594216c22514e63a179b32769b4fb9f +timeCreated: 1568132989 \ No newline at end of file diff --git a/Assets/Scripts/IValueHolder.cs b/Assets/Scripts/IValueHolder.cs new file mode 100644 index 0000000..f4c81f6 --- /dev/null +++ b/Assets/Scripts/IValueHolder.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface IValueHolder + { + T Value { get; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/IValueHolder.cs.meta b/Assets/Scripts/IValueHolder.cs.meta new file mode 100644 index 0000000..294c458 --- /dev/null +++ b/Assets/Scripts/IValueHolder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9e7a4d8b6e5c4144aac3f37fed11858d +timeCreated: 1568130049 \ No newline at end of file diff --git a/Assets/Scripts/IValuePublisher.cs b/Assets/Scripts/IValuePublisher.cs new file mode 100644 index 0000000..25899f6 --- /dev/null +++ b/Assets/Scripts/IValuePublisher.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface IValuePublisher + { + T Publish(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/IValuePublisher.cs.meta b/Assets/Scripts/IValuePublisher.cs.meta new file mode 100644 index 0000000..e5c3c67 --- /dev/null +++ b/Assets/Scripts/IValuePublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f0e6c2e463aa4f218ef5d096d1bccad1 +timeCreated: 1568116028 \ No newline at end of file diff --git a/Assets/Scripts/IValueReceiver.cs b/Assets/Scripts/IValueReceiver.cs new file mode 100644 index 0000000..ef1b14d --- /dev/null +++ b/Assets/Scripts/IValueReceiver.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface IValueReceiver + { + void Receive(T value); + } +} \ No newline at end of file diff --git a/Assets/Scripts/IValueReceiver.cs.meta b/Assets/Scripts/IValueReceiver.cs.meta new file mode 100644 index 0000000..93635c8 --- /dev/null +++ b/Assets/Scripts/IValueReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 987e87340f6a4d09a45a717b16757c1c +timeCreated: 1568115991 \ No newline at end of file diff --git a/Assets/Scripts/Message/CreateInstanceMessage.cs b/Assets/Scripts/Message/CreateInstanceMessage.cs new file mode 100644 index 0000000..a5a6544 --- /dev/null +++ b/Assets/Scripts/Message/CreateInstanceMessage.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace UniFlow.Message +{ + public class CreateInstanceMessage : EventMessage2, IValueHolder + { + private CreateInstanceMessage(ConnectorType connectorType, GameObject data) : base(connectorType, data) + { + } + + GameObject IValueHolder.Value => Data; + + public static CreateInstanceMessage Create(object sender) + { + return new CreateInstanceMessage( + ConnectorType.Custom, + sender is IValuePublisher gameObjectPublisher ? gameObjectPublisher.Publish() : null + ); + } + + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/CreateInstanceMessage.cs.meta b/Assets/Scripts/Message/CreateInstanceMessage.cs.meta new file mode 100644 index 0000000..19d6ec5 --- /dev/null +++ b/Assets/Scripts/Message/CreateInstanceMessage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d304b52ab0f24f91a77a2ec33393db22 +timeCreated: 1568130260 \ No newline at end of file From 7cee65810430d8595808314c6baeb861be828b63 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 12 Sep 2019 02:05:01 +0900 Subject: [PATCH 115/453] :tada: Change connector interface * Pass previous message to `OnConnectAsObservable` * Tweak interface for message * Change message type to class instead of struct --- .../Controller/ActivationController.cs | 24 +++++-- .../Connector/Controller/AnimatorTrigger.cs | 14 +++- .../Connector/Controller/AudioController.cs | 15 +++-- .../Connector/Controller/CreateInstance.cs | 35 ++++++---- .../Connector/Controller/DestroyInstance.cs | 21 ++++-- .../Scripts/Connector/Controller/LoadScene.cs | 32 +++++++++- .../Controller/MoveParentTransform.cs | 15 +++-- .../Controller/PlayableController.cs | 15 +++-- .../Controller/RaycastTargetController.cs | 49 +++++++++++--- .../Controller/RaycasterController.cs | 26 ++++++-- .../Controller/SimpleAnimationController.cs | 38 +++++++++-- .../Controller/TimeScaleController.cs | 13 +++- .../Connector/Controller/UnloadScene.cs | 32 +++++++++- .../Scripts/Connector/Event/AnimationEvent.cs | 12 +++- Assets/Scripts/Connector/Event/AudioEvent.cs | 13 +++- Assets/Scripts/Connector/Event/CameraEvent.cs | 13 +++- Assets/Scripts/Connector/Event/KeyEvent.cs | 13 +++- .../Scripts/Connector/Event/LifecycleEvent.cs | 13 +++- Assets/Scripts/Connector/Event/MouseEvent.cs | 17 +++-- .../Scripts/Connector/Event/ParticleEvent.cs | 17 +++-- .../Event/PhysicsCollision2DEvent.cs | 13 +++- .../Connector/Event/PhysicsCollisionEvent.cs | 13 +++- .../Connector/Event/PhysicsTrigger2DEvent.cs | 13 +++- .../Connector/Event/PhysicsTriggerEvent.cs | 13 +++- .../Connector/Event/RectTransformEvent.cs | 13 +++- .../Connector/Event/SimpleAnimationEvent.cs | 13 +++- .../Scripts/Connector/Event/TimelineSignal.cs | 41 ++++++++---- .../Scripts/Connector/Event/TransformEvent.cs | 13 +++- .../Event/UIBehaviourEventTrigger.cs | 12 +++- Assets/Scripts/Connector/Logic/Empty.cs | 12 +++- Assets/Scripts/Connector/Logic/Interval.cs | 12 +++- Assets/Scripts/Connector/Logic/Timer.cs | 12 +++- Assets/Scripts/ConnectorBase.cs | 10 +-- Assets/Scripts/EventMessage.cs | 36 ----------- Assets/Scripts/EventMessages.cs | 30 --------- Assets/Scripts/IConnector.cs | 4 +- Assets/Scripts/IEventMessage.cs | 12 ---- Assets/Scripts/IMessage.cs | 25 ++++++++ ...IEventMessage.cs.meta => IMessage.cs.meta} | 0 Assets/Scripts/IObservableReceiver.cs | 2 +- Assets/Scripts/IReceiver.cs | 2 +- Assets/Scripts/IValuePublisher.cs | 7 -- Assets/Scripts/IValuePublisher.cs.meta | 3 - Assets/Scripts/IValueReceiver.cs | 7 -- Assets/Scripts/IValueReceiver.cs.meta | 3 - Assets/Scripts/Message.meta | 4 +- .../Message/ActivationControllerEventData.cs | 17 ----- .../ActivationControllerEventData.cs.meta | 3 - .../Message/AnimatorTriggerEventData.cs | 24 ------- .../Message/AnimatorTriggerEventData.cs.meta | 3 - .../Message/AudioControllerEventData.cs | 18 ------ .../Message/AudioControllerEventData.cs.meta | 3 - Assets/Scripts/Message/AudioEventData.cs | 18 ------ Assets/Scripts/Message/AudioEventData.cs.meta | 3 - Assets/Scripts/Message/CameraEventData.cs | 18 ------ .../Scripts/Message/CameraEventData.cs.meta | 3 - .../Scripts/Message/CreateInstanceMessage.cs | 22 ------- .../Message/CreateInstanceMessage.cs.meta | 3 - .../Message/DestroyInstanceEventData.cs | 14 ---- .../Message/DestroyInstanceEventData.cs.meta | 3 - Assets/Scripts/Message/Empty.cs | 7 ++ Assets/Scripts/Message/Empty.cs.meta | 3 + Assets/Scripts/Message/KeyEventData.cs | 25 -------- Assets/Scripts/Message/KeyEventData.cs.meta | 3 - Assets/Scripts/Message/LifecycleEventData.cs | 21 ------ .../Message/LifecycleEventData.cs.meta | 3 - Assets/Scripts/Message/MouseEventData.cs | 18 ------ Assets/Scripts/Message/MouseEventData.cs.meta | 3 - .../Message/MoveParentTransformEventData.cs | 21 ------ .../MoveParentTransformEventData.cs.meta | 3 - Assets/Scripts/Message/ParticleEventData.cs | 23 ------- .../Scripts/Message/ParticleEventData.cs.meta | 3 - .../Message/PhysicsCollision2DEventData.cs | 23 ------- .../PhysicsCollision2DEventData.cs.meta | 3 - .../Message/PhysicsCollisionEventData.cs | 23 ------- .../Message/PhysicsCollisionEventData.cs.meta | 3 - .../Message/PhysicsTrigger2DEventData.cs | 23 ------- .../Message/PhysicsTrigger2DEventData.cs.meta | 3 - .../Message/PhysicsTriggerEventData.cs | 23 ------- .../Message/PhysicsTriggerEventData.cs.meta | 3 - .../Message/PlayableControllerEventData.cs | 18 ------ .../PlayableControllerEventData.cs.meta | 3 - .../RaycastTargetControllerEventData.cs | 22 ------- .../RaycastTargetControllerEventData.cs.meta | 3 - .../Message/RaycasterControllerEventData.cs | 22 ------- .../RaycasterControllerEventData.cs.meta | 3 - .../Scripts/Message/RectTransformEventData.cs | 20 ------ .../Message/RectTransformEventData.cs.meta | 3 - .../SimpleAnimationControllerEventData.cs | 20 ------ ...SimpleAnimationControllerEventData.cs.meta | 3 - .../Message/SimpleAnimationEventData.cs | 22 ------- .../Message/SimpleAnimationEventData.cs.meta | 3 - Assets/Scripts/Message/TimelineEventData.cs | 40 ------------ .../Scripts/Message/TimelineEventData.cs.meta | 3 - Assets/Scripts/Message/TransformEventData.cs | 20 ------ .../Message/TransformEventData.cs.meta | 3 - Assets/Scripts/MessageBase.cs | 30 +++++++++ ...entMessage.cs.meta => MessageBase.cs.meta} | 0 Assets/Scripts/Messages.cs | 30 +++++++++ ...EventMessages.cs.meta => Messages.cs.meta} | 0 Assets/Scripts/Receiver/Empty.cs | 2 +- Assets/Scripts/Receiver/Log.cs | 12 ++-- .../Receiver/ObservableReceiverBase.cs | 8 +-- Assets/Scripts/ReceiverBase.cs | 2 +- Assets/Tests/Runtime/Scripts/AllTest.cs | 64 ++++++++++++------- .../Runtime/Scripts/AnimationEventTest.cs | 11 ++-- .../Runtime/Scripts/AnimatorTriggerTest.cs | 16 ++--- .../Runtime/Scripts/AudioControllerTest.cs | 18 +++--- .../Tests/Runtime/Scripts/AudioEventTest.cs | 25 ++++---- .../Tests/Runtime/Scripts/CameraEventTest.cs | 32 ++++------ Assets/Tests/Runtime/Scripts/IntervalTest.cs | 17 ++--- .../Runtime/Scripts/LifecycleEventTest.cs | 15 ++--- .../Runtime/Scripts/PlayableControllerTest.cs | 28 ++++---- Assets/Tests/Runtime/Scripts/TestReceiver.cs | 6 +- .../Runtime/Scripts/TimelineSignalTest.cs | 15 ++--- Assets/Tests/Runtime/Scripts/TimerTest.cs | 15 +++-- .../Runtime/Scripts/UIBehaviourEventTest.cs | 11 ++-- .../Tests/Runtime/Scripts/UniFlowTestBase.cs | 4 +- 118 files changed, 747 insertions(+), 963 deletions(-) delete mode 100644 Assets/Scripts/EventMessage.cs delete mode 100644 Assets/Scripts/EventMessages.cs delete mode 100644 Assets/Scripts/IEventMessage.cs create mode 100644 Assets/Scripts/IMessage.cs rename Assets/Scripts/{IEventMessage.cs.meta => IMessage.cs.meta} (100%) delete mode 100644 Assets/Scripts/IValuePublisher.cs delete mode 100644 Assets/Scripts/IValuePublisher.cs.meta delete mode 100644 Assets/Scripts/IValueReceiver.cs delete mode 100644 Assets/Scripts/IValueReceiver.cs.meta delete mode 100644 Assets/Scripts/Message/ActivationControllerEventData.cs delete mode 100644 Assets/Scripts/Message/ActivationControllerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/AnimatorTriggerEventData.cs delete mode 100644 Assets/Scripts/Message/AnimatorTriggerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/AudioControllerEventData.cs delete mode 100644 Assets/Scripts/Message/AudioControllerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/AudioEventData.cs delete mode 100644 Assets/Scripts/Message/AudioEventData.cs.meta delete mode 100644 Assets/Scripts/Message/CameraEventData.cs delete mode 100644 Assets/Scripts/Message/CameraEventData.cs.meta delete mode 100644 Assets/Scripts/Message/CreateInstanceMessage.cs delete mode 100644 Assets/Scripts/Message/CreateInstanceMessage.cs.meta delete mode 100644 Assets/Scripts/Message/DestroyInstanceEventData.cs delete mode 100644 Assets/Scripts/Message/DestroyInstanceEventData.cs.meta create mode 100644 Assets/Scripts/Message/Empty.cs create mode 100644 Assets/Scripts/Message/Empty.cs.meta delete mode 100644 Assets/Scripts/Message/KeyEventData.cs delete mode 100644 Assets/Scripts/Message/KeyEventData.cs.meta delete mode 100644 Assets/Scripts/Message/LifecycleEventData.cs delete mode 100644 Assets/Scripts/Message/LifecycleEventData.cs.meta delete mode 100644 Assets/Scripts/Message/MouseEventData.cs delete mode 100644 Assets/Scripts/Message/MouseEventData.cs.meta delete mode 100644 Assets/Scripts/Message/MoveParentTransformEventData.cs delete mode 100644 Assets/Scripts/Message/MoveParentTransformEventData.cs.meta delete mode 100644 Assets/Scripts/Message/ParticleEventData.cs delete mode 100644 Assets/Scripts/Message/ParticleEventData.cs.meta delete mode 100644 Assets/Scripts/Message/PhysicsCollision2DEventData.cs delete mode 100644 Assets/Scripts/Message/PhysicsCollision2DEventData.cs.meta delete mode 100644 Assets/Scripts/Message/PhysicsCollisionEventData.cs delete mode 100644 Assets/Scripts/Message/PhysicsCollisionEventData.cs.meta delete mode 100644 Assets/Scripts/Message/PhysicsTrigger2DEventData.cs delete mode 100644 Assets/Scripts/Message/PhysicsTrigger2DEventData.cs.meta delete mode 100644 Assets/Scripts/Message/PhysicsTriggerEventData.cs delete mode 100644 Assets/Scripts/Message/PhysicsTriggerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/PlayableControllerEventData.cs delete mode 100644 Assets/Scripts/Message/PlayableControllerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/RaycastTargetControllerEventData.cs delete mode 100644 Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/RaycasterControllerEventData.cs delete mode 100644 Assets/Scripts/Message/RaycasterControllerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/RectTransformEventData.cs delete mode 100644 Assets/Scripts/Message/RectTransformEventData.cs.meta delete mode 100644 Assets/Scripts/Message/SimpleAnimationControllerEventData.cs delete mode 100644 Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta delete mode 100644 Assets/Scripts/Message/SimpleAnimationEventData.cs delete mode 100644 Assets/Scripts/Message/SimpleAnimationEventData.cs.meta delete mode 100644 Assets/Scripts/Message/TimelineEventData.cs delete mode 100644 Assets/Scripts/Message/TimelineEventData.cs.meta delete mode 100644 Assets/Scripts/Message/TransformEventData.cs delete mode 100644 Assets/Scripts/Message/TransformEventData.cs.meta create mode 100644 Assets/Scripts/MessageBase.cs rename Assets/Scripts/{EventMessage.cs.meta => MessageBase.cs.meta} (100%) create mode 100644 Assets/Scripts/Messages.cs rename Assets/Scripts/{EventMessages.cs.meta => Messages.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index ef49b7f..2ca453e 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; @@ -33,15 +32,20 @@ [UsedImplicitly] public bool Activated private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { - MonoBehaviours.ToList().ForEach(x => x.enabled = Activated); - GameObjects.ToList().ForEach(x => x.SetActive(Activated)); - observer.OnNext(EventMessage.Create(ConnectorType.ActivationController, this, ActivationControllerEventData.Create(Activated))); + var count = 0; + var monoBehaviours = MonoBehaviours.ToList(); + count += monoBehaviours.Count; + monoBehaviours.ForEach(x => x.enabled = Activated); + var gameObjects = GameObjects.ToList(); + count += gameObjects.Count(); + gameObjects.ForEach(x => x.SetActive(Activated)); + observer.OnNext(Message.Create(this, count)); return Disposable; } ); @@ -51,5 +55,13 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(ActivationController sender, int count) + { + return Create(ConnectorType.ActivationController, sender, count); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 7de48ca..353674b 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -29,14 +29,14 @@ [UsedImplicitly] public string TriggerName private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { Animator.SetTrigger(TriggerId); - observer.OnNext(EventMessage.Create(ConnectorType.AnimatorTrigger, Animator, AnimatorTriggerEventData.Create(TriggerName))); + observer.OnNext(Message.Create(this)); return Disposable; } ); @@ -46,5 +46,13 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(AnimatorTrigger sender) + { + return Create(ConnectorType.AnimatorTrigger, sender); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index a152fe9..47ebcb9 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; @@ -39,14 +38,14 @@ [UsedImplicitly] public AudioSource AudioSource private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { InvokeAudioSourceMethod(); - observer.OnNext(EventMessage.Create(ConnectorType.AudioController, AudioSource, AudioControllerEventData.Create(AudioControlMethod))); + observer.OnNext(Message.Create(this)); return Disposable; } ); @@ -82,6 +81,14 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(AudioController sender) + { + return Create(ConnectorType.AudioController, sender); + } + } } public enum AudioControlMethod diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs b/Assets/Scripts/Connector/Controller/CreateInstance.cs index a448ed5..42284db 100644 --- a/Assets/Scripts/Connector/Controller/CreateInstance.cs +++ b/Assets/Scripts/Connector/Controller/CreateInstance.cs @@ -1,11 +1,11 @@ using System; -using UniFlow.Message; +using UniFlow.Connector.Attribute; using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller { - public class CreateInstance : ConnectorBase, IValuePublisher + public class CreateInstance : ConnectorBase { [SerializeField] private GameObject source = default; private GameObject Source => source == default ? gameObject : source; @@ -13,21 +13,34 @@ public class CreateInstance : ConnectorBase, IValuePublisher [SerializeField] private Transform parent = default; private Transform Parent => parent == default ? transform : parent; - public override IObservable OnConnectAsObservable() + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Return( - EventMessage.Create( - ConnectorType.Custom, - this, - CreateInstanceMessage.Create(this) - ) + .Create( + observer => + { + var go = Instantiate(Source, Parent); + observer.OnNext(Message.Create(this, go)); + return Disposable; + } ); } - GameObject IValuePublisher.Publish() + public class Message : MessageBase, IValueHolder + { + GameObject IValueHolder.Value => Data; + + public static Message Create(CreateInstance connectable, GameObject gameObject) + { + return Create(ConnectorType.Custom, connectable, gameObject); + } + } + + private void OnDestroy() { - return Instantiate(Source, Parent); + Disposable.Dispose(); } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs index e0817e5..d97aa7c 100644 --- a/Assets/Scripts/Connector/Controller/DestroyInstance.cs +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -2,9 +2,9 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; +using Object = UnityEngine.Object; namespace UniFlow.Connector.Controller { @@ -27,15 +27,16 @@ [UsedImplicitly] public IEnumerable GameObjects private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { - Components.ToList().ForEach(Destroy); - GameObjects.ToList().ForEach(Destroy); - observer.OnNext(EventMessage.Create(ConnectorType.DestroyInstance, this, DestroyInstanceEventData.Create())); + var targets = Components.Concat(GameObjects).ToList(); + var count = targets.Count; + targets.ToList().ForEach(Destroy); + observer.OnNext(Message.Create(this, count)); return Disposable; } ); @@ -45,5 +46,13 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(DestroyInstance sender, int count) + { + return Create(ConnectorType.DestroyInstance, sender, count); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/LoadScene.cs b/Assets/Scripts/Connector/Controller/LoadScene.cs index 8a9008f..fff7031 100644 --- a/Assets/Scripts/Connector/Controller/LoadScene.cs +++ b/Assets/Scripts/Connector/Controller/LoadScene.cs @@ -16,13 +16,15 @@ public abstract class LoadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return LoadScenes() .ToObservable() - .Select(_ => EventMessage.Create(ConnectorType.LoadScene, this, SceneNames)); + .Select(_ => CreateMessage()); } + protected abstract IMessage CreateMessage(); + private async UniTask LoadScenes() { foreach (var sceneName in SceneNames) @@ -42,6 +44,19 @@ [UsedImplicitly] public override IEnumerable SceneNames get => sceneNames; set => sceneNames = value.ToList(); } + + protected override IMessage CreateMessage() + { + return Message.Create(this); + } + + public class Message : MessageBase + { + public static Message Create(LoadScene sender) + { + return Create(ConnectorType.LoadScene, sender); + } + } } public abstract class LoadScene : LoadSceneBase where TSceneName : Enum @@ -63,5 +78,18 @@ [UsedImplicitly] public override IEnumerable SceneNames ) .ToList(); } + + protected override IMessage CreateMessage() + { + return Message.Create(this); + } + + public class Message : MessageBase> + { + public static Message Create(LoadScene sender) + { + return Create(ConnectorType.LoadScene_Enum, sender); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index a0121c4..9079ac9 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; @@ -34,14 +33,14 @@ [UsedImplicitly] public bool WorldPositionStays private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { Transform.SetParent(TargetTransform, WorldPositionStays); - observer.OnNext(EventMessage.Create(ConnectorType.MoveParentTransform, this, MoveParentTransformEventData.Create(TargetTransform))); + observer.OnNext(Message.Create(this, Transform)); return Disposable; } ); @@ -51,5 +50,13 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(MoveParentTransform sender, Transform movedTransform) + { + return Create(ConnectorType.MoveParentTransform, sender, movedTransform); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index b564d29..6e4fd48 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; using UnityEngine.Playables; @@ -40,14 +39,14 @@ [UsedImplicitly] public PlayableDirector PlayableDirector private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { InvokePlayableDirectorMethod(); - observer.OnNext(EventMessage.Create(ConnectorType.PlayableController, PlayableDirector, PlayableControllerEventData.Create(PlayableControlMethod))); + observer.OnNext(Message.Create(this)); return Disposable; } ); @@ -83,6 +82,14 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(PlayableController sender) + { + return Create(ConnectorType.PlayableController, sender); + } + } } public enum PlayableControlMethod diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index b53e04f..7d4fdca 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; using UnityEngine.UI; @@ -40,24 +39,56 @@ [UsedImplicitly] public IEnumerable Collider2Ds private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { - HandleActivation(); - observer.OnNext(EventMessage.Create(ConnectorType.RaycasterController, this, RaycastTargetControllerEventData.Create(RaycastTargetControlMethod))); + var count = HandleActivation(); + observer.OnNext(Message.Create(this, count)); return Disposable; } ); } - private void HandleActivation() + private int HandleActivation() { - Graphics.ToList().ForEach(x => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate); - Colliders.ToList().ForEach(x => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate); - Collider2Ds.ToList().ForEach(x => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate); + var handleTargets = new Action[0] + .Concat( + Graphics + .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + Colliders + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + Collider2Ds + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .ToList(); + var count = handleTargets.Count; + handleTargets.ForEach(x => x.Invoke()); + return count; + } + + public class Message : MessageBase, IValueHolder + { + int IValueHolder.Value => Data; + + public static Message Create(RaycastTargetController sender, int count) + { + return Create(ConnectorType.RaycastTargetController, sender, count); + } + } + + private void OnDestroy() + { + Disposable.Dispose(); } } diff --git a/Assets/Scripts/Connector/Controller/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs index 7f0a670..5647410 100644 --- a/Assets/Scripts/Connector/Controller/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; using UnityEngine.EventSystems; @@ -28,22 +27,35 @@ [UsedImplicitly] private IEnumerable Raycasters private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable - .Create( + .Create( observer => { - HandleActivation(); - observer.OnNext(EventMessage.Create(ConnectorType.RaycasterController, this, RaycasterControllerEventData.Create(RaycasterControlMethod))); + var count = HandleActivation(); + observer.OnNext(Message.Create(this, count)); return Disposable; } ); } - private void HandleActivation() + private int HandleActivation() { - Raycasters.ToList().ForEach(x => x.enabled = RaycasterControlMethod == RaycasterControlMethod.Activate); + var targets = Raycasters.Where(x => x.enabled != (RaycasterControlMethod == RaycasterControlMethod.Activate)).ToList(); + var count = targets.Count; + targets.ForEach(x => x.enabled = RaycasterControlMethod == RaycasterControlMethod.Activate); + return count; + } + + public class Message : MessageBase, IValueHolder + { + public static Message Create(RaycasterController sender, int count) + { + return Create(ConnectorType.RaycasterController, sender, count); + } + + public int Value => Data; } } diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 3a3f7e8..d653e67 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -1,7 +1,7 @@ using System; +using System.Diagnostics.CodeAnalysis; using System.Linq; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; @@ -65,14 +65,36 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + [SuppressMessage("ReSharper", "SuspiciousTypeConversion.Global")] + [SuppressMessage("ReSharper", "ConvertIfStatementToSwitchStatement")] + public override IObservable OnConnectAsObservable(IMessage latestMessage) { +// if (latestMessage is IValueHolder simpleAnimationControlMethodHolder) +// { +// SimpleAnimationControlMethod = simpleAnimationControlMethodHolder.Value; +// } +// +// if (latestMessage is IValueHolder animationClipHolder) +// { +// AnimationClip = animationClipHolder.Value; +// } +// +// if (latestMessage is IValueHolder animatorCullingModeHolder) +// { +// CullingMode = animatorCullingModeHolder.Value; +// } +// +// if (latestMessage is IValueHolder animatorUpdateModeHolder) +// { +// UpdateMode = animatorUpdateModeHolder.Value; +// } + return Observable - .Create( + .Create( observer => { InvokeSimpleAnimationMethod(); - observer.OnNext(EventMessage.Create(ConnectorType.SimpleAnimationController, SimpleAnimation, SimpleAnimationControllerEventData.Create(SimpleAnimationControlMethod))); + observer.OnNext(Message.Create(this)); return Disposable; } ); @@ -126,6 +148,14 @@ private void OnDestroy() { Disposable.Dispose(); } + + public class Message : MessageBase + { + public static Message Create(SimpleAnimationController sender) + { + return Create(ConnectorType.SimpleAnimationController, sender); + } + } } public enum SimpleAnimationControlMethod diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 06b7e9d..5a6a5a4 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Message; using UniRx; using UnityEngine; @@ -30,10 +31,10 @@ [UsedImplicitly] private ObservableTween.EaseType EaseType private ISubject OnCompleteTweenSubject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { ChangeTimeScale(); - return OnCompleteTweenSubject.Select(_ => EventMessage.Create(ConnectorType.TimeScaleController, this)); + return OnCompleteTweenSubject.Select(_ => Message.Create(this)); } private void ChangeTimeScale() @@ -57,5 +58,13 @@ private void ChangeTimeScale() ) .Subscribe(x => Time.timeScale = x); } + + public class Message : MessageBase + { + public static Message Create(TimeScaleController sender) + { + return Create(ConnectorType.TimeScaleController, sender); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/UnloadScene.cs b/Assets/Scripts/Connector/Controller/UnloadScene.cs index 2472e80..9f6b1f6 100644 --- a/Assets/Scripts/Connector/Controller/UnloadScene.cs +++ b/Assets/Scripts/Connector/Controller/UnloadScene.cs @@ -16,13 +16,15 @@ public abstract class UnloadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return UnloadScenes() .ToObservable() - .Select(_ => EventMessage.Create(ConnectorType.UnloadScene, this, SceneNames)); + .Select(_ => CreateMessage()); } + protected abstract IMessage CreateMessage(); + private async UniTask UnloadScenes() { foreach (var sceneName in SceneNames) @@ -42,6 +44,19 @@ [UsedImplicitly] public override IEnumerable SceneNames get => sceneNames; set => sceneNames = value.ToList(); } + + protected override IMessage CreateMessage() + { + return Message.Create(this); + } + + public class Message : MessageBase + { + public static Message Create(UnloadScene sender) + { + return Create(ConnectorType.UnloadScene, sender); + } + } } public abstract class UnloadScene : UnloadSceneBase where TSceneName : Enum @@ -63,5 +78,18 @@ [UsedImplicitly] public override IEnumerable SceneNames ) .ToList(); } + + protected override IMessage CreateMessage() + { + return Message.Create(this); + } + + public class Message : MessageBase> + { + public static Message Create(UnloadScene sender) + { + return Create(ConnectorType.UnloadScene_Enum, sender); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 2c7006b..4227f9f 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -58,7 +58,7 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { if (AnimationClip != default && GetComponent() == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) { @@ -68,7 +68,7 @@ public override IObservable OnConnectAsObservable() return Subject // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) - .Select(x => EventMessage.Create(ConnectorType.AnimationEvent, this, x)); + .Select(x => Message.Create(this, x)); } /// @@ -92,5 +92,13 @@ private void Awake() Animator.updateMode = UpdateMode; } } + + public class Message : MessageBase + { + public static Message Create(AnimationEvent sender, UnityEngine.AnimationEvent data) + { + return Create(ConnectorType.AnimationEvent, sender, data); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 4e4494f..d997b2c 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; @@ -39,10 +38,10 @@ [UsedImplicitly] public AudioSource AudioSource private IReadOnlyReactiveProperty> TimePair { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnAudioEventAsObservable() - .Select(x => EventMessage.Create(ConnectorType.AudioEvent, AudioSource, AudioEventData.Create(x))); + .Select(x => Message.Create(this)); } private IObservable OnAudioEventAsObservable() @@ -101,6 +100,14 @@ private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) return (AudioEventType) -1; } + + public class Message : MessageBase + { + public static Message Create(AudioEvent sender) + { + return Create(ConnectorType.AudioEvent, sender); + } + } } public enum AudioEventType diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 0ac11e9..d928631 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventAsObservable() - .Select(_ => EventMessage.Create(ConnectorType.CameraEvent, Component, CameraEventData.Create(CameraEventType))); + .Select(_ => Message.Create(this)); } private IObservable OnEventAsObservable() @@ -42,6 +41,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(CameraEvent sender) + { + return Create(ConnectorType.CameraEvent, sender); + } + } } public enum CameraEventType diff --git a/Assets/Scripts/Connector/Event/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs index 418c7b7..1e9775d 100644 --- a/Assets/Scripts/Connector/Event/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -1,5 +1,4 @@ using System; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -15,9 +14,9 @@ public class KeyEvent : ConnectorBase private KeyEventType KeyEventType => keyEventType; private KeyCode KeyCode => keyCode; - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return KeyEventAsObservable().Select(_ => EventMessage.Create(ConnectorType.KeyEvent, this, KeyEventData.Create(KeyCode, KeyEventType))); + return KeyEventAsObservable().Select(_ => Message.Create(this)); } private IObservable KeyEventAsObservable() @@ -43,6 +42,14 @@ private IObservable KeyEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(KeyEvent sender) + { + return Create(ConnectorType.KeyEvent, sender); + } + } } public enum KeyEventType diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index a3e56ae..e32541c 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -27,10 +26,10 @@ [UsedImplicitly] public Component Component private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventAsObservable() - .Select(_ => EventMessage.Create(ConnectorType.LifecycleEvent, Component, LifecycleEventData.Create(LifecycleEventType))); + .Select(_ => Message.Create(this)); } private void Awake() @@ -78,6 +77,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(LifecycleEvent sender) + { + return Create(ConnectorType.LifecycleEvent, sender); + } + } } public enum LifecycleEventType diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 772073d..6418fe6 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,9 +23,11 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() - .Select(_ => EventMessage.Create(ConnectorType.MouseEvent, Component, MouseEventData.Create(MouseEventType))); + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return OnEventAsObservable() + .Select(_ => Message.Create(this)); + } private IObservable OnEventAsObservable() { @@ -54,6 +55,14 @@ private IObservable OnEventAsObservable() throw new PlatformNotSupportedException("MouseEvent does not support mobile platform"); #endif } + + public class Message : MessageBase + { + public static Message Create(MouseEvent sender) + { + return Create(ConnectorType.MouseEvent, sender); + } + } } public enum MouseEventType diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index 697a676..5cb90da 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,9 +23,11 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() => - OnEventAsObservable() - .Select(x => EventMessage.Create(ConnectorType.ParticleEvent, Component, ParticleEventData.Create(ParticleEventType, x))); + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return OnEventAsObservable() + .Select(x => Message.Create(this)); + } private IObservable OnEventAsObservable() { @@ -43,6 +44,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(ParticleEvent sender) + { + return Create(ConnectorType.ParticleEvent, sender); + } + } } public enum ParticleEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 53cb095..fb44c7c 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,9 +23,9 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() => + public override IObservable OnConnectAsObservable(IMessage latestMessage) => OnEventAsObservable() - .Select(x => EventMessage.Create(ConnectorType.PhysicsCollision2DEvent, Component, PhysicsCollision2DEventData.Create(PhysicsCollision2DEventType, x))); + .Select(x => Message.Create(this, x)); private IObservable OnEventAsObservable() { @@ -42,6 +41,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(PhysicsCollision2DEvent sender, Collision2D collision2D) + { + return Create(ConnectorType.PhysicsCollision2DEvent, sender, collision2D); + } + } } public enum PhysicsCollision2DEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index b1967f8..c1c897e 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,9 +23,9 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() => + public override IObservable OnConnectAsObservable(IMessage latestMessage) => OnEventAsObservable() - .Select(x => EventMessage.Create(ConnectorType.PhysicsCollisionEvent, Component, PhysicsCollisionEventData.Create(PhysicsCollisionEventType, x))); + .Select(x => Message.Create(this, x)); private IObservable OnEventAsObservable() { @@ -42,6 +41,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(PhysicsCollisionEvent sender, Collision collision) + { + return Create(ConnectorType.PhysicsCollisionEvent, sender, collision); + } + } } public enum PhysicsCollisionEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 6cd1650..7663849 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventAsObservable() - .Select(x => EventMessage.Create(ConnectorType.PhysicsTrigger2DEvent, Component, PhysicsTrigger2DEventData.Create(PhysicsTrigger2DEventType, x))); + .Select(x => Message.Create(this, x)); } private IObservable OnEventAsObservable() @@ -44,6 +43,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(PhysicsTrigger2DEvent sender, Collider2D collider2D) + { + return Create(ConnectorType.PhysicsTrigger2DEvent, sender, collider2D); + } + } } public enum PhysicsTrigger2DEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 5a78ced..3cced32 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventAsObservable() - .Select(x => EventMessage.Create(ConnectorType.PhysicsTriggerEvent, Component, PhysicsTriggerEventData.Create(PhysicsTriggerEventType, x))); + .Select(x => Message.Create(this, x)); } private IObservable OnEventAsObservable() @@ -44,6 +43,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(PhysicsTriggerEvent sender, Collider collider) + { + return Create(ConnectorType.PhysicsTriggerEvent, sender, collider); + } + } } public enum PhysicsTriggerEventType diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index f89696d..f5779ac 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventAsObservable() - .Select(_ => EventMessage.Create(ConnectorType.RectTransformEvent, Component, RectTransformEventData.Create(RectTransformEventType))); + .Select(_ => Message.Create(this)); } private IObservable OnEventAsObservable() @@ -44,6 +43,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(RectTransformEvent sender) + { + return Create(ConnectorType.RectTransformEvent, sender); + } + } } public enum RectTransformEventType diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index de71443..6de3c16 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; @@ -58,11 +57,11 @@ protected override void Start() ObserveSimpleAnimation(); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return CurrentStateSubject .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) - .Select(_ => EventMessage.Create(ConnectorType.SimpleAnimationEvent, this, SimpleAnimationEventData.Create(SimpleAnimationEventType))); + .Select(_ => Message.Create(this)); } private void ObserveSimpleAnimation() @@ -92,6 +91,14 @@ private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTim CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); } } + + public class Message : MessageBase + { + public static Message Create(SimpleAnimationEvent sender) + { + return Create(ConnectorType.SimpleAnimationEvent, sender); + } + } } public enum SimpleAnimationEventType diff --git a/Assets/Scripts/Connector/Event/TimelineSignal.cs b/Assets/Scripts/Connector/Event/TimelineSignal.cs index 3c99f02..8355f58 100644 --- a/Assets/Scripts/Connector/Event/TimelineSignal.cs +++ b/Assets/Scripts/Connector/Event/TimelineSignal.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; using Object = UnityEngine.Object; @@ -12,44 +11,64 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/TimelineSignal", (int) ConnectorType.TimelineSignal)] public class TimelineSignal : ConnectorBase { - private ISubject Subject { get; } = new Subject(); + private ISubject<(int intParameter, float floatParameter, string stringParameter, Object objectParameter)> Subject { get; } = new Subject<(int intParameter, float floatParameter, string stringParameter, Object objectParameter)>(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Subject // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) - .Select(x => EventMessage.Create(ConnectorType.TimelineSignal, this, x)); + .Select(x => Message.Create(this, x)); } [UsedImplicitly] public void Dispatch() { - Subject.OnNext(new TimelineEventData()); + Subject.OnNext((default, default, default, default)); } [UsedImplicitly] - public void Dispatch(float floatParameter) + public void Dispatch(int intParameter) { - Subject.OnNext(new TimelineEventData(floatParameter)); + Subject.OnNext((intParameter, default, default, default)); } [UsedImplicitly] - public void Dispatch(int intParameter) + public void Dispatch(float floatParameter) { - Subject.OnNext(new TimelineEventData(intParameter)); + Subject.OnNext((default, floatParameter, default, default)); } [UsedImplicitly] public void Dispatch(string stringParameter) { - Subject.OnNext(new TimelineEventData(stringParameter)); + Subject.OnNext((default, default, stringParameter, default)); } [UsedImplicitly] public void Dispatch(Object objectReferenceParameter) { - Subject.OnNext(new TimelineEventData(objectReferenceParameter)); + Subject.OnNext((default, default, default, objectReferenceParameter)); + } + + public class Message : MessageBase, + IValueHolder, + IValueHolder, + IValueHolder, + IValueHolder + { + public static Message Create(TimelineSignal sender, (int, float, string, Object) data) + { + return Create(ConnectorType.TimelineSignal, sender, data); + } + + int IValueHolder.Value => Data.intParameter; + + float IValueHolder.Value => Data.floatParameter; + + string IValueHolder.Value => Data.stringParameter; + + Object IValueHolder.Value => Data.objectParameter; } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 65df0ff..69daab7 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -24,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventAsObservable() - .Select(_ => EventMessage.Create(ConnectorType.TransformEvent, Component, TransformEventData.Create(TransformEventType))); + .Select(_ => Message.Create(this)); } private IObservable OnEventAsObservable() @@ -44,6 +43,14 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(TransformEvent sender) + { + return Create(ConnectorType.TransformEvent, sender); + } + } } public enum TransformEventType diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 15ccd2f..cecc3e7 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -24,10 +24,10 @@ [UsedImplicitly] public UIBehaviour UIBehaviour set => uiBehaviour = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return OnEventTriggerAsObservable() - .Select(x => EventMessage.Create(ConnectorType.UIBehaviourEventTrigger, UIBehaviour, x)); + .Select(x => Message.Create(this, x)); } private IObservable OnEventTriggerAsObservable() @@ -72,5 +72,13 @@ private IObservable OnEventTriggerAsObservable() throw new ArgumentOutOfRangeException(); } } + + public class Message : MessageBase + { + public static Message Create(UIBehaviourEventTrigger sender, BaseEventData baseEventData) + { + return Create(ConnectorType.UIBehaviourEventTrigger, sender, baseEventData); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Logic/Empty.cs b/Assets/Scripts/Connector/Logic/Empty.cs index 06dc13a..6c35b41 100644 --- a/Assets/Scripts/Connector/Logic/Empty.cs +++ b/Assets/Scripts/Connector/Logic/Empty.cs @@ -7,7 +7,15 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/Empty", (int) ConnectorType.Empty)] public class Empty : ConnectorBase { - public override IObservable OnConnectAsObservable() => - Observable.Return(EventMessage.Create(ConnectorType.Empty, this)); + public override IObservable OnConnectAsObservable(IMessage latestMessage) => + Observable.Return(Message.Create(this)); + + public class Message : MessageBase + { + public static Message Create(Empty sender) + { + return Create(ConnectorType.Empty, sender); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Logic/Interval.cs b/Assets/Scripts/Connector/Logic/Interval.cs index e79d9e2..8eba08d 100644 --- a/Assets/Scripts/Connector/Logic/Interval.cs +++ b/Assets/Scripts/Connector/Logic/Interval.cs @@ -22,11 +22,19 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable .Interval(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) - .Select(_ => EventMessage.Create(ConnectorType.Interval, this, Seconds)); + .Select(_ => Message.Create(this)); + } + + public class Message : MessageBase + { + public static Message Create(Interval sender) + { + return Create(ConnectorType.Interval, sender); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Logic/Timer.cs b/Assets/Scripts/Connector/Logic/Timer.cs index 12f3181..488d292 100644 --- a/Assets/Scripts/Connector/Logic/Timer.cs +++ b/Assets/Scripts/Connector/Logic/Timer.cs @@ -22,11 +22,19 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable .Timer(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) - .Select(_ => EventMessage.Create(ConnectorType.Timer, this, Seconds)); + .Select(_ => Message.Create(this)); + } + + public class Message : MessageBase + { + public static Message Create(Timer sender) + { + return Create(ConnectorType.Timer, sender); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 83d0e88..dcad8b8 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -54,17 +54,17 @@ protected virtual void Start() { if (ActAsTrigger) { - ((IConnector) this).Connect(Observable.Return(default)); + ((IConnector) this).Connect(Observable.Return(default)); } } - void IConnector.Connect(IObservable source) + void IConnector.Connect(IObservable source) { var observable = source .SelectMany( eventMessages => (this as IConnector) - .OnConnectAsObservable() - .Select(x => (eventMessages ?? EventMessages.Create()).Append(x)) + .OnConnectAsObservable(eventMessages?.LastOrDefault()) + .Select(x => (eventMessages ?? Messages.Create()).Append(x)) ) .Share(); TargetConnectors @@ -82,7 +82,7 @@ void IConnector.Connect(IObservable source) } } - public abstract IObservable OnConnectAsObservable(); + public abstract IObservable OnConnectAsObservable(IMessage latestMessage); [PublicAPI] public void AddConnectable(ConnectableBase connectable) diff --git a/Assets/Scripts/EventMessage.cs b/Assets/Scripts/EventMessage.cs deleted file mode 100644 index cdba954..0000000 --- a/Assets/Scripts/EventMessage.cs +++ /dev/null @@ -1,36 +0,0 @@ -using JetBrains.Annotations; - -namespace UniFlow -{ - [PublicAPI] - public class EventMessage - { - protected EventMessage(ConnectorType connectorType, object sender, object data) - { - ConnectorType = connectorType; - Sender = sender; - Data = data; - } - - public ConnectorType ConnectorType { get; } - public object Sender { get; } - public object Data { get; } - - public static EventMessage Create(ConnectorType connectorType, object sender, object data = default) - { - return new EventMessage(connectorType, sender, data); - } - } - - public class EventMessage2 - { - protected EventMessage2(ConnectorType connectorType, TData data) - { - ConnectorType = connectorType; - Data = data; - } - - public ConnectorType ConnectorType { get; } - public TData Data { get; } - } -} \ No newline at end of file diff --git a/Assets/Scripts/EventMessages.cs b/Assets/Scripts/EventMessages.cs deleted file mode 100644 index 8ee7ab1..0000000 --- a/Assets/Scripts/EventMessages.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using JetBrains.Annotations; - -namespace UniFlow -{ - [PublicAPI] - public class EventMessages : List - { - private EventMessages() - { - } - - public EventMessages Append(EventMessage eventMessage) - { - Add(eventMessage); - return this; - } - - public EventMessages AppendRange(IEnumerable eventMessages) - { - AddRange(eventMessages); - return this; - } - - public static EventMessages Create() - { - return new EventMessages(); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index f726959..a3eac48 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -4,7 +4,7 @@ namespace UniFlow { public interface IConnector : IConnectable { - IObservable OnConnectAsObservable(); - void Connect(IObservable source); + IObservable OnConnectAsObservable(IMessage previousMessage); + void Connect(IObservable source); } } \ No newline at end of file diff --git a/Assets/Scripts/IEventMessage.cs b/Assets/Scripts/IEventMessage.cs deleted file mode 100644 index f14f790..0000000 --- a/Assets/Scripts/IEventMessage.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace UniFlow -{ - public interface IEventMessage - { - ConnectorType ConnectorType { get; } - } - - public interface IEventMessage : IEventMessage - { - TSender Sender { get; } - } -} \ No newline at end of file diff --git a/Assets/Scripts/IMessage.cs b/Assets/Scripts/IMessage.cs new file mode 100644 index 0000000..297e291 --- /dev/null +++ b/Assets/Scripts/IMessage.cs @@ -0,0 +1,25 @@ +namespace UniFlow +{ + public interface IMessage + { + ConnectorType ConnectorType { get; } + } + + public interface IMessage : IMessage + { + TSender Sender { get; } + } + + public static class MessageExtensions + { + public static bool Is(this IMessage message) where TSender : IMessage + { + return message is TSender; + } + + public static TSender As(this IMessage message) where TSender : class, IMessage + { + return message as TSender; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/IEventMessage.cs.meta b/Assets/Scripts/IMessage.cs.meta similarity index 100% rename from Assets/Scripts/IEventMessage.cs.meta rename to Assets/Scripts/IMessage.cs.meta diff --git a/Assets/Scripts/IObservableReceiver.cs b/Assets/Scripts/IObservableReceiver.cs index b66c683..b4cfec7 100644 --- a/Assets/Scripts/IObservableReceiver.cs +++ b/Assets/Scripts/IObservableReceiver.cs @@ -4,6 +4,6 @@ namespace UniFlow { public interface IObservableReceiver : IReceiver { - IObservable OnReceiveAsObservable(); + IObservable OnReceiveAsObservable(); } } \ No newline at end of file diff --git a/Assets/Scripts/IReceiver.cs b/Assets/Scripts/IReceiver.cs index 101d511..a7ebc76 100644 --- a/Assets/Scripts/IReceiver.cs +++ b/Assets/Scripts/IReceiver.cs @@ -2,6 +2,6 @@ namespace UniFlow { public interface IReceiver : IConnectable { - void OnReceive(EventMessages eventMessages); + void OnReceive(Messages messages); } } \ No newline at end of file diff --git a/Assets/Scripts/IValuePublisher.cs b/Assets/Scripts/IValuePublisher.cs deleted file mode 100644 index 25899f6..0000000 --- a/Assets/Scripts/IValuePublisher.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow -{ - public interface IValuePublisher - { - T Publish(); - } -} \ No newline at end of file diff --git a/Assets/Scripts/IValuePublisher.cs.meta b/Assets/Scripts/IValuePublisher.cs.meta deleted file mode 100644 index e5c3c67..0000000 --- a/Assets/Scripts/IValuePublisher.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f0e6c2e463aa4f218ef5d096d1bccad1 -timeCreated: 1568116028 \ No newline at end of file diff --git a/Assets/Scripts/IValueReceiver.cs b/Assets/Scripts/IValueReceiver.cs deleted file mode 100644 index ef1b14d..0000000 --- a/Assets/Scripts/IValueReceiver.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow -{ - public interface IValueReceiver - { - void Receive(T value); - } -} \ No newline at end of file diff --git a/Assets/Scripts/IValueReceiver.cs.meta b/Assets/Scripts/IValueReceiver.cs.meta deleted file mode 100644 index 93635c8..0000000 --- a/Assets/Scripts/IValueReceiver.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 987e87340f6a4d09a45a717b16757c1c -timeCreated: 1568115991 \ No newline at end of file diff --git a/Assets/Scripts/Message.meta b/Assets/Scripts/Message.meta index 58785e8..b8bc0e9 100644 --- a/Assets/Scripts/Message.meta +++ b/Assets/Scripts/Message.meta @@ -1,3 +1,3 @@ fileFormatVersion: 2 -guid: ad2c669cffa84928b8249bc156935388 -timeCreated: 1562831729 \ No newline at end of file +guid: 29f29381ab994724bdec985218c01a05 +timeCreated: 1568219322 \ No newline at end of file diff --git a/Assets/Scripts/Message/ActivationControllerEventData.cs b/Assets/Scripts/Message/ActivationControllerEventData.cs deleted file mode 100644 index 8717449..0000000 --- a/Assets/Scripts/Message/ActivationControllerEventData.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace UniFlow.Message -{ - public class ActivationControllerEventData - { - private ActivationControllerEventData(bool activated) - { - Activated = activated; - } - - public bool Activated { get; } - - public static ActivationControllerEventData Create(bool activated) - { - return new ActivationControllerEventData(activated); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/ActivationControllerEventData.cs.meta b/Assets/Scripts/Message/ActivationControllerEventData.cs.meta deleted file mode 100644 index 7182b9d..0000000 --- a/Assets/Scripts/Message/ActivationControllerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 136a71e942d6476abfb12523c02b47b3 -timeCreated: 1567402131 \ No newline at end of file diff --git a/Assets/Scripts/Message/AnimatorTriggerEventData.cs b/Assets/Scripts/Message/AnimatorTriggerEventData.cs deleted file mode 100644 index 6b4f409..0000000 --- a/Assets/Scripts/Message/AnimatorTriggerEventData.cs +++ /dev/null @@ -1,24 +0,0 @@ -using JetBrains.Annotations; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class AnimatorTriggerEventData - { - private AnimatorTriggerEventData(int triggerId, string triggerName) - { - TriggerId = triggerId; - TriggerName = triggerName; - } - - public int TriggerId { get; } - public string TriggerName { get; } - - public static AnimatorTriggerEventData Create(int triggerId, string triggerName) => - new AnimatorTriggerEventData(triggerId, triggerName); - - public static AnimatorTriggerEventData Create(string triggerName) => - new AnimatorTriggerEventData(Animator.StringToHash(triggerName), triggerName); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/AnimatorTriggerEventData.cs.meta b/Assets/Scripts/Message/AnimatorTriggerEventData.cs.meta deleted file mode 100644 index 72f475b..0000000 --- a/Assets/Scripts/Message/AnimatorTriggerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 46d1f2ee10d2498e82eb1ca1c7e496fe -timeCreated: 1562839912 \ No newline at end of file diff --git a/Assets/Scripts/Message/AudioControllerEventData.cs b/Assets/Scripts/Message/AudioControllerEventData.cs deleted file mode 100644 index f9f890b..0000000 --- a/Assets/Scripts/Message/AudioControllerEventData.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UniFlow.Connector; -using UniFlow.Connector.Controller; - -namespace UniFlow.Message -{ - public struct AudioControllerEventData - { - private AudioControllerEventData(AudioControlMethod audioControlMethod) - { - AudioControlMethod = audioControlMethod; - } - - public AudioControlMethod AudioControlMethod { get; } - - public static AudioControllerEventData Create(AudioControlMethod audioControlMethod) => - new AudioControllerEventData(audioControlMethod); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/AudioControllerEventData.cs.meta b/Assets/Scripts/Message/AudioControllerEventData.cs.meta deleted file mode 100644 index 07387e4..0000000 --- a/Assets/Scripts/Message/AudioControllerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4ee25aed1d3b43a59a9150fda0beac50 -timeCreated: 1565094847 \ No newline at end of file diff --git a/Assets/Scripts/Message/AudioEventData.cs b/Assets/Scripts/Message/AudioEventData.cs deleted file mode 100644 index 948e07c..0000000 --- a/Assets/Scripts/Message/AudioEventData.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - public struct AudioEventData - { - private AudioEventData(AudioEventType audioEventType) - { - EventType = audioEventType; - } - - public AudioEventType EventType { get; } - - public static AudioEventData Create(AudioEventType audioEventType) => - new AudioEventData(audioEventType); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/AudioEventData.cs.meta b/Assets/Scripts/Message/AudioEventData.cs.meta deleted file mode 100644 index 2bf9d97..0000000 --- a/Assets/Scripts/Message/AudioEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 69da189c99e54ca1afad81fac77e9cc5 -timeCreated: 1565086657 \ No newline at end of file diff --git a/Assets/Scripts/Message/CameraEventData.cs b/Assets/Scripts/Message/CameraEventData.cs deleted file mode 100644 index 7e2f654..0000000 --- a/Assets/Scripts/Message/CameraEventData.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - public class CameraEventData - { - private CameraEventData(CameraEventType eventType) - { - EventType = eventType; - } - - public CameraEventType EventType { get; } - - public static CameraEventData Create(CameraEventType eventType) => - new CameraEventData(eventType); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/CameraEventData.cs.meta b/Assets/Scripts/Message/CameraEventData.cs.meta deleted file mode 100644 index f995a33..0000000 --- a/Assets/Scripts/Message/CameraEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 81d19bc1e99049c698def60aba9f297a -timeCreated: 1563243897 \ No newline at end of file diff --git a/Assets/Scripts/Message/CreateInstanceMessage.cs b/Assets/Scripts/Message/CreateInstanceMessage.cs deleted file mode 100644 index a5a6544..0000000 --- a/Assets/Scripts/Message/CreateInstanceMessage.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UnityEngine; - -namespace UniFlow.Message -{ - public class CreateInstanceMessage : EventMessage2, IValueHolder - { - private CreateInstanceMessage(ConnectorType connectorType, GameObject data) : base(connectorType, data) - { - } - - GameObject IValueHolder.Value => Data; - - public static CreateInstanceMessage Create(object sender) - { - return new CreateInstanceMessage( - ConnectorType.Custom, - sender is IValuePublisher gameObjectPublisher ? gameObjectPublisher.Publish() : null - ); - } - - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/CreateInstanceMessage.cs.meta b/Assets/Scripts/Message/CreateInstanceMessage.cs.meta deleted file mode 100644 index 19d6ec5..0000000 --- a/Assets/Scripts/Message/CreateInstanceMessage.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d304b52ab0f24f91a77a2ec33393db22 -timeCreated: 1568130260 \ No newline at end of file diff --git a/Assets/Scripts/Message/DestroyInstanceEventData.cs b/Assets/Scripts/Message/DestroyInstanceEventData.cs deleted file mode 100644 index 28110c7..0000000 --- a/Assets/Scripts/Message/DestroyInstanceEventData.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace UniFlow.Message -{ - public class DestroyInstanceEventData - { - private DestroyInstanceEventData() - { - } - - public static DestroyInstanceEventData Create() - { - return new DestroyInstanceEventData(); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/DestroyInstanceEventData.cs.meta b/Assets/Scripts/Message/DestroyInstanceEventData.cs.meta deleted file mode 100644 index cb54869..0000000 --- a/Assets/Scripts/Message/DestroyInstanceEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: a158e5781d704c62a7142dadc42e3e82 -timeCreated: 1567402064 \ No newline at end of file diff --git a/Assets/Scripts/Message/Empty.cs b/Assets/Scripts/Message/Empty.cs new file mode 100644 index 0000000..ca542a2 --- /dev/null +++ b/Assets/Scripts/Message/Empty.cs @@ -0,0 +1,7 @@ +namespace UniFlow.Message +{ + public struct Empty + { + public static Empty Default = default; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Message/Empty.cs.meta b/Assets/Scripts/Message/Empty.cs.meta new file mode 100644 index 0000000..062ec9d --- /dev/null +++ b/Assets/Scripts/Message/Empty.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dc0f660d15bb4e5983a9fba3867397b8 +timeCreated: 1568219322 \ No newline at end of file diff --git a/Assets/Scripts/Message/KeyEventData.cs b/Assets/Scripts/Message/KeyEventData.cs deleted file mode 100644 index bee5de0..0000000 --- a/Assets/Scripts/Message/KeyEventData.cs +++ /dev/null @@ -1,25 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class KeyEventData - { - private KeyEventData(KeyCode keyCode, KeyEventType keyEventType) - { - KeyCode = keyCode; - KeyEventType = keyEventType; - } - - public KeyCode KeyCode { get; } - public KeyEventType KeyEventType { get; } - - public static KeyEventData Create(KeyCode keyCode, KeyEventType keyEventType) - { - return new KeyEventData(keyCode, keyEventType); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/KeyEventData.cs.meta b/Assets/Scripts/Message/KeyEventData.cs.meta deleted file mode 100644 index 4e3f9da..0000000 --- a/Assets/Scripts/Message/KeyEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 97be247201f14f61b5cb573b4aad6392 -timeCreated: 1565693944 \ No newline at end of file diff --git a/Assets/Scripts/Message/LifecycleEventData.cs b/Assets/Scripts/Message/LifecycleEventData.cs deleted file mode 100644 index 83e63e7..0000000 --- a/Assets/Scripts/Message/LifecycleEventData.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - [Serializable][PublicAPI] - public class LifecycleEventData - { - private LifecycleEventData(LifecycleEventType eventType) - { - EventType = eventType; - } - - public LifecycleEventType EventType { get; } - - public static LifecycleEventData Create(LifecycleEventType lifecycleEventType) => - new LifecycleEventData(lifecycleEventType); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/LifecycleEventData.cs.meta b/Assets/Scripts/Message/LifecycleEventData.cs.meta deleted file mode 100644 index d7d6c70..0000000 --- a/Assets/Scripts/Message/LifecycleEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3bdde5cf4d3f405aa48422a067da4551 -timeCreated: 1562934668 \ No newline at end of file diff --git a/Assets/Scripts/Message/MouseEventData.cs b/Assets/Scripts/Message/MouseEventData.cs deleted file mode 100644 index 19d131e..0000000 --- a/Assets/Scripts/Message/MouseEventData.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - public class MouseEventData - { - private MouseEventData(MouseEventType eventType) - { - EventType = eventType; - } - - public MouseEventType EventType { get; } - - public static MouseEventData Create(MouseEventType eventType) => - new MouseEventData(eventType); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/MouseEventData.cs.meta b/Assets/Scripts/Message/MouseEventData.cs.meta deleted file mode 100644 index 1fd9506..0000000 --- a/Assets/Scripts/Message/MouseEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: bfec1eabb47b4446bbaaea32df253a8f -timeCreated: 1563256095 \ No newline at end of file diff --git a/Assets/Scripts/Message/MoveParentTransformEventData.cs b/Assets/Scripts/Message/MoveParentTransformEventData.cs deleted file mode 100644 index fa1e234..0000000 --- a/Assets/Scripts/Message/MoveParentTransformEventData.cs +++ /dev/null @@ -1,21 +0,0 @@ -using JetBrains.Annotations; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class MoveParentTransformEventData - { - private MoveParentTransformEventData(Transform targetTransform) - { - TargetTransform = targetTransform; - } - - public Transform TargetTransform { get; } - - public static MoveParentTransformEventData Create(Transform targetTransform) - { - return new MoveParentTransformEventData(targetTransform); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/MoveParentTransformEventData.cs.meta b/Assets/Scripts/Message/MoveParentTransformEventData.cs.meta deleted file mode 100644 index 2c75a6b..0000000 --- a/Assets/Scripts/Message/MoveParentTransformEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 45beb06348e0486b806b77ca24d064ed -timeCreated: 1566463494 \ No newline at end of file diff --git a/Assets/Scripts/Message/ParticleEventData.cs b/Assets/Scripts/Message/ParticleEventData.cs deleted file mode 100644 index f78ac7d..0000000 --- a/Assets/Scripts/Message/ParticleEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class ParticleEventData - { - private ParticleEventData(ParticleEventType eventType, GameObject gameObject) - { - EventType = eventType; - GameObject = gameObject; - } - - public ParticleEventType EventType { get; } - public GameObject GameObject { get; } - - public static ParticleEventData Create(ParticleEventType eventType, GameObject gameObject) => - new ParticleEventData(eventType, gameObject); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/ParticleEventData.cs.meta b/Assets/Scripts/Message/ParticleEventData.cs.meta deleted file mode 100644 index 61f1671..0000000 --- a/Assets/Scripts/Message/ParticleEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5ebdda4e42744f339a218d8d8b81161e -timeCreated: 1563260816 \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs b/Assets/Scripts/Message/PhysicsCollision2DEventData.cs deleted file mode 100644 index ccf3c1a..0000000 --- a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class PhysicsCollision2DEventData - { - private PhysicsCollision2DEventData(PhysicsCollision2DEventType eventType, Collision2D collision2D) - { - EventType = eventType; - Collision2D = collision2D; - } - - public PhysicsCollision2DEventType EventType { get; } - public Collision2D Collision2D { get; } - - public static PhysicsCollision2DEventData Create(PhysicsCollision2DEventType eventType, Collision2D collision2D) => - new PhysicsCollision2DEventData(eventType, collision2D); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs.meta b/Assets/Scripts/Message/PhysicsCollision2DEventData.cs.meta deleted file mode 100644 index fbdf435..0000000 --- a/Assets/Scripts/Message/PhysicsCollision2DEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1faf6f0253ec44968d97185134bf26db -timeCreated: 1563255207 \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsCollisionEventData.cs b/Assets/Scripts/Message/PhysicsCollisionEventData.cs deleted file mode 100644 index 3c3166f..0000000 --- a/Assets/Scripts/Message/PhysicsCollisionEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class PhysicsCollisionEventData - { - private PhysicsCollisionEventData(PhysicsCollisionEventType eventType, Collision collision) - { - EventType = eventType; - Collision = collision; - } - - public PhysicsCollisionEventType EventType { get; } - public Collision Collision { get; } - - public static PhysicsCollisionEventData Create(PhysicsCollisionEventType eventType, Collision collision) => - new PhysicsCollisionEventData(eventType, collision); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsCollisionEventData.cs.meta b/Assets/Scripts/Message/PhysicsCollisionEventData.cs.meta deleted file mode 100644 index 824cb48..0000000 --- a/Assets/Scripts/Message/PhysicsCollisionEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: c302f45d90064f4bb537fd7fc412e55e -timeCreated: 1563245854 \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs b/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs deleted file mode 100644 index e74cb92..0000000 --- a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class PhysicsTrigger2DEventData - { - private PhysicsTrigger2DEventData(PhysicsTrigger2DEventType eventType, Collider2D collider2D) - { - EventType = eventType; - Collider2D = collider2D; - } - - public PhysicsTrigger2DEventType EventType { get; } - public Collider2D Collider2D { get; } - - public static PhysicsTrigger2DEventData Create(PhysicsTrigger2DEventType eventType, Collider2D collider2D) => - new PhysicsTrigger2DEventData(eventType, collider2D); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs.meta b/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs.meta deleted file mode 100644 index 491e0c4..0000000 --- a/Assets/Scripts/Message/PhysicsTrigger2DEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4136daf408aa4aa78f72c328c9b8f93f -timeCreated: 1563255198 \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsTriggerEventData.cs b/Assets/Scripts/Message/PhysicsTriggerEventData.cs deleted file mode 100644 index a2a98c4..0000000 --- a/Assets/Scripts/Message/PhysicsTriggerEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; -using UnityEngine; - -namespace UniFlow.Message -{ - [PublicAPI] - public class PhysicsTriggerEventData - { - private PhysicsTriggerEventData(PhysicsTriggerEventType eventType, Collider collider) - { - EventType = eventType; - Collider = collider; - } - - public PhysicsTriggerEventType EventType { get; } - public Collider Collider { get; } - - public static PhysicsTriggerEventData Create(PhysicsTriggerEventType eventType, Collider collider) => - new PhysicsTriggerEventData(eventType, collider); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/PhysicsTriggerEventData.cs.meta b/Assets/Scripts/Message/PhysicsTriggerEventData.cs.meta deleted file mode 100644 index 17ac283..0000000 --- a/Assets/Scripts/Message/PhysicsTriggerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1f78155e10194efa95b4aaf648c9e5ea -timeCreated: 1563255185 \ No newline at end of file diff --git a/Assets/Scripts/Message/PlayableControllerEventData.cs b/Assets/Scripts/Message/PlayableControllerEventData.cs deleted file mode 100644 index 768f16c..0000000 --- a/Assets/Scripts/Message/PlayableControllerEventData.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UniFlow.Connector; -using UniFlow.Connector.Controller; - -namespace UniFlow.Message -{ - public class PlayableControllerEventData - { - private PlayableControllerEventData(PlayableControlMethod playableControlMethod) - { - PlayableControlMethod = playableControlMethod; - } - - public PlayableControlMethod PlayableControlMethod { get; } - - public static PlayableControllerEventData Create(PlayableControlMethod playableControlMethod) => - new PlayableControllerEventData(playableControlMethod); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/PlayableControllerEventData.cs.meta b/Assets/Scripts/Message/PlayableControllerEventData.cs.meta deleted file mode 100644 index ed106eb..0000000 --- a/Assets/Scripts/Message/PlayableControllerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 049e9e77cf6f4b74b7b85b48b39e5712 -timeCreated: 1562857068 \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs deleted file mode 100644 index 6c1309b..0000000 --- a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Controller; - -namespace UniFlow.Message -{ - [PublicAPI] - public class RaycastTargetControllerEventData - { - private RaycastTargetControllerEventData(RaycastTargetControlMethod raycastTargetControlMethod) - { - RaycastTargetControlMethod = raycastTargetControlMethod; - } - - public RaycastTargetControlMethod RaycastTargetControlMethod { get; } - - public static RaycastTargetControllerEventData Create(RaycastTargetControlMethod raycastTargetControlMethod) - { - return new RaycastTargetControllerEventData(raycastTargetControlMethod); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta b/Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta deleted file mode 100644 index a02c545..0000000 --- a/Assets/Scripts/Message/RaycastTargetControllerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6de275d3c07b446f92c4252b99762c02 -timeCreated: 1566464955 \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycasterControllerEventData.cs b/Assets/Scripts/Message/RaycasterControllerEventData.cs deleted file mode 100644 index 2105154..0000000 --- a/Assets/Scripts/Message/RaycasterControllerEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Controller; - -namespace UniFlow.Message -{ - [PublicAPI] - public class RaycasterControllerEventData - { - private RaycasterControllerEventData(RaycasterControlMethod raycasterControlMethod) - { - RaycasterControlMethod = raycasterControlMethod; - } - - public RaycasterControlMethod RaycasterControlMethod { get; } - - public static RaycasterControllerEventData Create(RaycasterControlMethod raycasterControlMethod) - { - return new RaycasterControllerEventData(raycasterControlMethod); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/RaycasterControllerEventData.cs.meta b/Assets/Scripts/Message/RaycasterControllerEventData.cs.meta deleted file mode 100644 index e2b3200..0000000 --- a/Assets/Scripts/Message/RaycasterControllerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 95377b16823742ea92366fb102cd62cd -timeCreated: 1566217154 \ No newline at end of file diff --git a/Assets/Scripts/Message/RectTransformEventData.cs b/Assets/Scripts/Message/RectTransformEventData.cs deleted file mode 100644 index 3a71781..0000000 --- a/Assets/Scripts/Message/RectTransformEventData.cs +++ /dev/null @@ -1,20 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - [PublicAPI] - public class RectTransformEventData - { - private RectTransformEventData(RectTransformEventType eventType) - { - EventType = eventType; - } - - public RectTransformEventType EventType { get; } - - public static RectTransformEventData Create(RectTransformEventType eventType) => - new RectTransformEventData(eventType); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/RectTransformEventData.cs.meta b/Assets/Scripts/Message/RectTransformEventData.cs.meta deleted file mode 100644 index dd33e71..0000000 --- a/Assets/Scripts/Message/RectTransformEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1af088cd06584b21a0ec9f4e6bfa49e2 -timeCreated: 1563262890 \ No newline at end of file diff --git a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs deleted file mode 100644 index b257d9f..0000000 --- a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs +++ /dev/null @@ -1,20 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Controller; - -namespace UniFlow.Message -{ - [PublicAPI] - public struct SimpleAnimationControllerEventData - { - private SimpleAnimationControllerEventData(SimpleAnimationControlMethod simpleAnimationControlMethod) - { - SimpleAnimationControlMethod = simpleAnimationControlMethod; - } - - public SimpleAnimationControlMethod SimpleAnimationControlMethod { get; } - - public static SimpleAnimationControllerEventData Create(SimpleAnimationControlMethod audioControlMethod) => - new SimpleAnimationControllerEventData(audioControlMethod); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta b/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta deleted file mode 100644 index 30ce8ed..0000000 --- a/Assets/Scripts/Message/SimpleAnimationControllerEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9d46cd952af74c3983c8a5533fa019ea -timeCreated: 1565255846 \ No newline at end of file diff --git a/Assets/Scripts/Message/SimpleAnimationEventData.cs b/Assets/Scripts/Message/SimpleAnimationEventData.cs deleted file mode 100644 index 33607c6..0000000 --- a/Assets/Scripts/Message/SimpleAnimationEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - [PublicAPI] - public class SimpleAnimationEventData - { - private SimpleAnimationEventData(SimpleAnimationEventType eventType) - { - EventType = eventType; - } - - public SimpleAnimationEventType EventType { get; } - - public static SimpleAnimationEventData Create(SimpleAnimationEventType eventType) - { - return new SimpleAnimationEventData(eventType); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/SimpleAnimationEventData.cs.meta b/Assets/Scripts/Message/SimpleAnimationEventData.cs.meta deleted file mode 100644 index 35b2f02..0000000 --- a/Assets/Scripts/Message/SimpleAnimationEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8bb6f0d83a6443f4875b3263485f65b3 -timeCreated: 1566462143 \ No newline at end of file diff --git a/Assets/Scripts/Message/TimelineEventData.cs b/Assets/Scripts/Message/TimelineEventData.cs deleted file mode 100644 index 78d6eaf..0000000 --- a/Assets/Scripts/Message/TimelineEventData.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using JetBrains.Annotations; -using UnityEngine; -using Object = UnityEngine.Object; - -namespace UniFlow.Message -{ - [Serializable][PublicAPI] - public class TimelineEventData - { - [SerializeField] private int intParameter = default; - [SerializeField] private float floatParameter = default; - [SerializeField] private string stringParameter = default; - [SerializeField] private Object objectReferenceParameter = default; - public int IntParameter => intParameter; - public float FloatParameter => floatParameter; - public string StringParameter => stringParameter; - public Object ObjectReferenceParameter => objectReferenceParameter; - - public TimelineEventData(float floatValue) : this(default, floatValue) - { - } - - public TimelineEventData(string stringValue) : this(default, default, stringValue) - { - } - - public TimelineEventData(Object objectValue) : this(default, default, default, objectValue) - { - } - - public TimelineEventData(int intParameter = default, float floatParameter = default, string stringParameter = default, Object objectReferenceParameter = default) - { - this.intParameter = intParameter; - this.floatParameter = floatParameter; - this.stringParameter = stringParameter; - this.objectReferenceParameter = objectReferenceParameter; - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/TimelineEventData.cs.meta b/Assets/Scripts/Message/TimelineEventData.cs.meta deleted file mode 100644 index 1dced08..0000000 --- a/Assets/Scripts/Message/TimelineEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 20501c40f9894284b01b4f118fb62184 -timeCreated: 1562831729 \ No newline at end of file diff --git a/Assets/Scripts/Message/TransformEventData.cs b/Assets/Scripts/Message/TransformEventData.cs deleted file mode 100644 index a314b6e..0000000 --- a/Assets/Scripts/Message/TransformEventData.cs +++ /dev/null @@ -1,20 +0,0 @@ -using JetBrains.Annotations; -using UniFlow.Connector; -using UniFlow.Connector.Event; - -namespace UniFlow.Message -{ - [PublicAPI] - public class TransformEventData - { - private TransformEventData(TransformEventType eventType) - { - EventType = eventType; - } - - public TransformEventType EventType { get; } - - public static TransformEventData Create(TransformEventType eventType) => - new TransformEventData(eventType); - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/TransformEventData.cs.meta b/Assets/Scripts/Message/TransformEventData.cs.meta deleted file mode 100644 index ecb6cea..0000000 --- a/Assets/Scripts/Message/TransformEventData.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2cb9662b293f4e6b8d53957073d8c712 -timeCreated: 1563262873 \ No newline at end of file diff --git a/Assets/Scripts/MessageBase.cs b/Assets/Scripts/MessageBase.cs new file mode 100644 index 0000000..5c4aa41 --- /dev/null +++ b/Assets/Scripts/MessageBase.cs @@ -0,0 +1,30 @@ +using UniFlow.Message; + +namespace UniFlow +{ + public class MessageBase : IMessage where TSender : IConnectable + { + public ConnectorType ConnectorType { get; private set; } + public TSender Sender { get; private set; } + public TData Data { get; private set; } + + protected static TResult Create(ConnectorType connectorType, TSender sender, TData data) where TResult : MessageBase, new() + { + return new TResult + { + ConnectorType = connectorType, + Sender = sender, + Data = data, + }; + } + } + + public class MessageBase : MessageBase where TSender : IConnectable + { + + protected static TResult Create(ConnectorType connectorType, TSender sender) where TResult : MessageBase, new() + { + return Create(connectorType, sender, Empty.Default); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/EventMessage.cs.meta b/Assets/Scripts/MessageBase.cs.meta similarity index 100% rename from Assets/Scripts/EventMessage.cs.meta rename to Assets/Scripts/MessageBase.cs.meta diff --git a/Assets/Scripts/Messages.cs b/Assets/Scripts/Messages.cs new file mode 100644 index 0000000..4449b6f --- /dev/null +++ b/Assets/Scripts/Messages.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace UniFlow +{ + [PublicAPI] + public class Messages : List + { + private Messages() + { + } + + public Messages Append(IMessage message) + { + Add(message); + return this; + } + + public Messages AppendRange(IEnumerable messages) + { + AddRange(messages); + return this; + } + + public static Messages Create() + { + return new Messages(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/EventMessages.cs.meta b/Assets/Scripts/Messages.cs.meta similarity index 100% rename from Assets/Scripts/EventMessages.cs.meta rename to Assets/Scripts/Messages.cs.meta diff --git a/Assets/Scripts/Receiver/Empty.cs b/Assets/Scripts/Receiver/Empty.cs index 30b39af..797cad3 100644 --- a/Assets/Scripts/Receiver/Empty.cs +++ b/Assets/Scripts/Receiver/Empty.cs @@ -5,7 +5,7 @@ namespace UniFlow.Receiver [AddComponentMenu("UniFlow/Receiver/Empty", (int) ConnectorType.Receiver)] public class Empty : ReceiverBase { - public override void OnReceive(EventMessages eventMessages) + public override void OnReceive(Messages messages) { // Do nothing. } diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index dec8b6a..a2a7526 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -6,18 +6,18 @@ namespace UniFlow.Receiver [AddComponentMenu("UniFlow/Receiver/Log", (int) ConnectorType.Receiver)] public class Log : ReceiverBase { - public override void OnReceive(EventMessages eventMessages) + public override void OnReceive(Messages messages) { var sb = new StringBuilder(); - sb.AppendLine($"EventCount: {eventMessages.Count}"); - sb.AppendLine("EventMessages:"); + sb.AppendLine($"EventCount: {messages.Count}"); + sb.AppendLine("Messages:"); var index = 0; - foreach (var eventMessage in eventMessages) + foreach (var eventMessage in messages) { sb.AppendLine($" {index}"); sb.AppendLine($" Type:\n {eventMessage.ConnectorType}"); - sb.AppendLine($" Sender:\n {eventMessage.Sender?.ToString().Replace("\n", "\n ")}"); - sb.AppendLine($" Data:\n {eventMessage.Data?.ToString().Replace("\n", "\n ")}"); + // TODO: データの送り方を考える +// sb.AppendLine($" Data:\n {eventMessage.Data?.ToString().Replace("\n", "\n ")}"); index++; } Debug.Log(sb.ToString()); diff --git a/Assets/Scripts/Receiver/ObservableReceiverBase.cs b/Assets/Scripts/Receiver/ObservableReceiverBase.cs index d103a2f..e163444 100644 --- a/Assets/Scripts/Receiver/ObservableReceiverBase.cs +++ b/Assets/Scripts/Receiver/ObservableReceiverBase.cs @@ -5,16 +5,16 @@ namespace UniFlow.Receiver { public abstract class ObservableReceiverBase : ReceiverBase, IObservableReceiver { - private ISubject OnReceiveSubject { get; } = new Subject(); + private ISubject OnReceiveSubject { get; } = new Subject(); - IObservable IObservableReceiver.OnReceiveAsObservable() + IObservable IObservableReceiver.OnReceiveAsObservable() { return OnReceiveSubject; } - public override void OnReceive(EventMessages eventMessages) + public override void OnReceive(Messages messages) { - OnReceiveSubject.OnNext(eventMessages); + OnReceiveSubject.OnNext(messages); } } } \ No newline at end of file diff --git a/Assets/Scripts/ReceiverBase.cs b/Assets/Scripts/ReceiverBase.cs index 0715041..f560d79 100644 --- a/Assets/Scripts/ReceiverBase.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -2,6 +2,6 @@ namespace UniFlow { public abstract class ReceiverBase : ConnectableBase, IReceiver { - public abstract void OnReceive(EventMessages eventMessages); + public abstract void OnReceive(Messages messages); } } \ No newline at end of file diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index 7efa04d..77635a8 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -1,8 +1,7 @@ using System.Collections; using NUnit.Framework; -using UniFlow.Connector; +using UniFlow.Connector.Controller; using UniFlow.Connector.Event; -using UniFlow.Message; using UniRx.Triggers; using UnityEngine; using UnityEngine.EventSystems; @@ -46,34 +45,51 @@ public IEnumerator Multiple() ); } - private void AssertAll(EventMessages eventMessages) + private void AssertAll(Messages messages) { - Assert.AreEqual(5, eventMessages.Count); + Assert.AreEqual(5, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + { + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.AreEqual(message.ConnectorType, ConnectorType.UIBehaviourEventTrigger); + Assert.IsInstanceOf(message.Sender.UIBehaviour); + Assert.IsInstanceOf(message.Data); + } - Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].Data); + { + Assert.True(messages[1].Is()); + var message = messages[1].As(); + Assert.IsInstanceOf(message.Sender.Animator); + } - Assert.IsInstanceOf(eventMessages[2].Sender); - Assert.IsInstanceOf(eventMessages[2].Data); - var animationEvent = eventMessages[2].Data as UnityEngine.AnimationEvent; - Assert.NotNull(animationEvent); - Assert.AreEqual(222.2f, animationEvent.floatParameter); - Assert.AreEqual(333, animationEvent.intParameter); - Assert.AreEqual("444", animationEvent.stringParameter); - Assert.IsInstanceOf(animationEvent.objectReferenceParameter); - Assert.AreEqual("All", animationEvent.objectReferenceParameter.name); + { + Assert.True(messages[2].Is()); + var message = messages[2].As(); + Assert.IsInstanceOf(message.Sender.Animator); + Assert.IsInstanceOf(message.Data); + var animationEvent = message.Data; + Assert.NotNull(animationEvent); + Assert.AreEqual(222.2f, animationEvent.floatParameter); + Assert.AreEqual(333, animationEvent.intParameter); + Assert.AreEqual("444", animationEvent.stringParameter); + Assert.IsInstanceOf(animationEvent.objectReferenceParameter); + Assert.AreEqual("All", animationEvent.objectReferenceParameter.name); + } - Assert.IsInstanceOf(eventMessages[3].Sender); - Assert.IsInstanceOf(eventMessages[3].Data); + { + Assert.True(messages[3].Is()); + var message = messages[3].As(); + Assert.IsInstanceOf(message.Sender.PlayableDirector); + } + + { + Assert.True(messages[4].Is()); + var message = messages[4].As(); + var timelineEvent = message.Data; + Assert.AreEqual(999, timelineEvent.intParameter); + } - Assert.IsInstanceOf(eventMessages[4].Sender); - Assert.IsInstanceOf(eventMessages[4].Data); - var timelineEvent = eventMessages[4].Data as TimelineEventData; - Assert.NotNull(timelineEvent); - Assert.AreEqual(999, timelineEvent.IntParameter); HasAssert = true; } } diff --git a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs index dce3f51..ea42b6e 100644 --- a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs @@ -20,13 +20,14 @@ public IEnumerator AnimationEvent() ); } - private void AssertAnimationEvent(EventMessages eventMessages) + private void AssertAnimationEvent(Messages messages) { - Assert.AreEqual(1, eventMessages.Count); + Assert.AreEqual(1, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); - var animationEvent = eventMessages[0].Data as UnityEngine.AnimationEvent; + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Data); + var animationEvent = message.Data; Assert.NotNull(animationEvent); Assert.AreEqual(11.1f, animationEvent.floatParameter); Assert.AreEqual(22, animationEvent.intParameter); diff --git a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs index 6073613..476556c 100644 --- a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs @@ -1,6 +1,6 @@ using System.Collections; -using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Controller; using UnityEngine; using UnityEngine.TestTools; using AnimationEvent = UniFlow.Connector.Event.AnimationEvent; @@ -21,16 +21,16 @@ public IEnumerator AnimatorTrigger() ); } - private void AssertAnimatorTrigger(EventMessages eventMessages) + private void AssertAnimatorTrigger(Messages messages) { - Assert.AreEqual(2, eventMessages.Count); + Assert.AreEqual(2, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + Assert.True(messages[0].Is()); - Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].Data); - var animationEvent = eventMessages[1].Data as UnityEngine.AnimationEvent; + Assert.True(messages[1].Is()); + var message = messages[1].As(); + Assert.IsInstanceOf(message.Data); + var animationEvent = message.Data; Assert.NotNull(animationEvent); Assert.AreEqual(22.2f, animationEvent.floatParameter); Assert.AreEqual(33, animationEvent.intParameter); diff --git a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs index e3f4834..5f69074 100644 --- a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs @@ -1,8 +1,6 @@ using System; using System.Collections; using System.Linq; -using UniFlow.Connector; -using UniFlow.Message; using NUnit.Framework; using UniFlow.Connector.Controller; using UniRx; @@ -133,19 +131,19 @@ public IEnumerator UnPause() ); } - private void AssertAudioEvent(EventMessages eventMessages, AudioControlMethod audioControlMethod, Action callback) + private void AssertAudioEvent(Messages messages, AudioControlMethod audioControlMethod, Action callback) { - Assert.NotNull(eventMessages); - Assert.AreEqual(2, eventMessages.Count); + Assert.NotNull(messages); + Assert.AreEqual(2, messages.Count); - Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].Data); + Assert.True(messages[1].Is()); + var message = messages[1].As(); - Assert.NotNull(eventMessages[1].Data); + Assert.NotNull(message.Data); - Assert.AreEqual(audioControlMethod, ((AudioControllerEventData) eventMessages[1].Data).AudioControlMethod); + Assert.AreEqual(audioControlMethod, message.Sender.AudioControlMethod); - callback(eventMessages[1].Sender as AudioSource); + callback(message.Sender.AudioSource); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs index 3f10fec..95275de 100644 --- a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs @@ -1,8 +1,6 @@ using System; using System.Collections; using System.Linq; -using UniFlow.Connector; -using UniFlow.Message; using NUnit.Framework; using UniFlow.Connector.Event; using UniRx; @@ -183,10 +181,10 @@ public IEnumerator ComplexEvent() { Assert.NotNull(em); Assert.AreEqual(4, em.Count); - Assert.AreEqual(AudioEventType.Play, ((AudioEventData) em[0].Data).EventType); - Assert.AreEqual(AudioEventType.Pause, ((AudioEventData) em[1].Data).EventType); - Assert.AreEqual(AudioEventType.UnPause, ((AudioEventData) em[2].Data).EventType); - Assert.AreEqual(AudioEventType.Stop, ((AudioEventData) em[3].Data).EventType); + Assert.AreEqual(AudioEventType.Play, em[0].As().Sender.AudioEventType); + Assert.AreEqual(AudioEventType.Pause, em[1].As().Sender.AudioEventType); + Assert.AreEqual(AudioEventType.UnPause, em[2].As().Sender.AudioEventType); + Assert.AreEqual(AudioEventType.Stop, em[3].As().Sender.AudioEventType); HasAssert = true; }, () => @@ -206,18 +204,19 @@ public IEnumerator ComplexEvent() ); } - private void AssertAudioEvent(EventMessages eventMessages, AudioEventType audioEventType, int receiveCount = 1) + private void AssertAudioEvent(Messages messages, AudioEventType audioEventType, int receiveCount = 1) { - Assert.NotNull(eventMessages); - Assert.AreEqual(1, eventMessages.Count); + Assert.NotNull(messages); + Assert.AreEqual(1, messages.Count); Assert.AreEqual(receiveCount, Object.FindObjectOfType().ReceiveCount); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender.AudioSource); - Assert.NotNull(eventMessages[0].Data); + Assert.NotNull(message.Data); - Assert.AreEqual(audioEventType, ((AudioEventData) eventMessages[0].Data).EventType); + Assert.AreEqual(audioEventType, message.Sender.AudioEventType); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs index 53f136a..2c78d83 100644 --- a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs @@ -1,8 +1,6 @@ using System; using System.Collections; using System.Linq; -using UniFlow.Connector; -using UniFlow.Message; using NUnit.Framework; using UniFlow.Connector.Event; using UniRx; @@ -56,32 +54,30 @@ public IEnumerator CameraBecomeInvisibleEvent() ); } - private void AssertCameraBecomeVisibleEvent(EventMessages eventMessages) + private void AssertCameraBecomeVisibleEvent(Messages messages) { - Assert.NotNull(eventMessages); - Assert.AreEqual(1, eventMessages.Count); + Assert.NotNull(messages); + Assert.AreEqual(1, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender); - Assert.NotNull(eventMessages[0].Data); - - Assert.AreEqual(CameraEventType.BecomeVisible, ((CameraEventData) eventMessages[0].Data).EventType); + Assert.AreEqual(CameraEventType.BecomeVisible, message.Sender.CameraEventType); HasAssert = true; } - private void AssertCameraBecomeInvisibleEvent(EventMessages eventMessages) + private void AssertCameraBecomeInvisibleEvent(Messages messages) { - Assert.NotNull(eventMessages); - Assert.AreEqual(1, eventMessages.Count); - - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + Assert.NotNull(messages); + Assert.AreEqual(1, messages.Count); - Assert.NotNull(eventMessages[0].Data); + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender); - Assert.AreEqual(CameraEventType.BecomeInvisible, ((CameraEventData) eventMessages[0].Data).EventType); + Assert.AreEqual(CameraEventType.BecomeInvisible, message.Sender.CameraEventType); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/IntervalTest.cs b/Assets/Tests/Runtime/Scripts/IntervalTest.cs index 6bc68c1..a302b8d 100644 --- a/Assets/Tests/Runtime/Scripts/IntervalTest.cs +++ b/Assets/Tests/Runtime/Scripts/IntervalTest.cs @@ -1,7 +1,7 @@ using System.Collections; -using UniFlow.Connector; using NUnit.Framework; using UniFlow.Connector.Logic; +using UnityEngine; using UnityEngine.TestTools; namespace UniFlow.Tests.Runtime @@ -20,15 +20,16 @@ public IEnumerator Interval() ); } - private void AssertInterval(EventMessages eventMessages) + private void AssertInterval(Messages messages) { - Assert.AreEqual(2, UnityEngine.Object.FindObjectOfType().ReceiveCount); - Assert.AreEqual(1, eventMessages.Count); + Assert.AreEqual(2, Object.FindObjectOfType().ReceiveCount); + Assert.AreEqual(1, messages.Count); - Assert.AreEqual(ConnectorType.Interval, eventMessages[0].ConnectorType); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); - Assert.AreEqual(1.0f, eventMessages[0].Data); + Assert.AreEqual(ConnectorType.Interval, messages[0].ConnectorType); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender); + Assert.IsInstanceOf(message.Sender.Seconds); + Assert.AreEqual(1.0f, message.Sender.Seconds); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs index 650e084..e251d73 100644 --- a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs @@ -1,8 +1,6 @@ using System; using System.Collections; using System.Linq; -using UniFlow.Connector; -using UniFlow.Message; using NUnit.Framework; using UniFlow.Connector.Event; using UniRx; @@ -97,15 +95,16 @@ private IEnumerator RunAssertInternal(LifecycleEventType lifecycleEventType, Act ); } - private void AssertLifecycleEvent(EventMessages eventMessages) + private void AssertLifecycleEvent(Messages messages) { - Assert.NotNull(eventMessages); - Assert.GreaterOrEqual(eventMessages.Count, 1); + Assert.NotNull(messages); + Assert.GreaterOrEqual(messages.Count, 1); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender); - Assert.AreEqual(CurrentLifecycleEventType, ((LifecycleEventData) eventMessages[0].Data).EventType); + Assert.AreEqual(CurrentLifecycleEventType, message.Sender.LifecycleEventType); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index 5133eba..b4edf87 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -1,7 +1,6 @@ using System.Collections; -using UniFlow.Connector; -using UniFlow.Message; using NUnit.Framework; +using UniFlow.Connector.Controller; using UniFlow.Connector.Event; using UnityEngine.Playables; using UnityEngine.TestTools; @@ -23,18 +22,25 @@ public IEnumerator PlayableController() ); } - private void AssertPlayableController(EventMessages eventMessages) + private void AssertPlayableController(Messages messages) { - Assert.AreEqual(2, eventMessages.Count); + Assert.AreEqual(2, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + { + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender.PlayableDirector); + } + + { + Assert.True(messages[1].Is()); + var message = messages[1].As(); + Assert.IsInstanceOf(message.Sender); + var timelineEvent = message.Data; + Assert.True(timelineEvent != default); + Assert.AreEqual("PlayableControllerTest", timelineEvent.stringParameter); + } - Assert.IsInstanceOf(eventMessages[1].Sender); - Assert.IsInstanceOf(eventMessages[1].Data); - var timelineEvent = eventMessages[1].Data as TimelineEventData; - Assert.NotNull(timelineEvent); - Assert.AreEqual("PlayableControllerTest", timelineEvent.StringParameter); HasAssert = true; } } diff --git a/Assets/Tests/Runtime/Scripts/TestReceiver.cs b/Assets/Tests/Runtime/Scripts/TestReceiver.cs index ff78d7d..852b2f0 100644 --- a/Assets/Tests/Runtime/Scripts/TestReceiver.cs +++ b/Assets/Tests/Runtime/Scripts/TestReceiver.cs @@ -2,12 +2,12 @@ namespace UniFlow.Tests.Runtime { public class TestReceiver : ReceiverBase { - public EventMessages SentEventMessages { get; private set; } + public Messages SentMessages { get; private set; } public int ReceiveCount { get; private set; } - public override void OnReceive(EventMessages eventMessages) + public override void OnReceive(Messages messages) { - SentEventMessages = eventMessages; + SentMessages = messages; ReceiveCount++; } } diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 0b852bb..7f3f602 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -1,6 +1,4 @@ using System.Collections; -using UniFlow.Connector; -using UniFlow.Message; using NUnit.Framework; using UniFlow.Connector.Event; using UnityEngine.TestTools; @@ -21,15 +19,16 @@ public IEnumerator TimelineSignal() ); } - private void AssertTimelineSignal(EventMessages eventMessages) + private void AssertTimelineSignal(Messages messages) { - Assert.AreEqual(1, eventMessages.Count); + Assert.AreEqual(1, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); - var timelineEvent = eventMessages[0].Data as TimelineEventData; + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender); + var timelineEvent = message.Data; Assert.NotNull(timelineEvent); - Assert.AreEqual("TimelineSignalTest", timelineEvent.StringParameter); + Assert.AreEqual("TimelineSignalTest", timelineEvent.stringParameter); HasAssert = true; } } diff --git a/Assets/Tests/Runtime/Scripts/TimerTest.cs b/Assets/Tests/Runtime/Scripts/TimerTest.cs index 946a0e6..c8cd491 100644 --- a/Assets/Tests/Runtime/Scripts/TimerTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimerTest.cs @@ -1,5 +1,4 @@ using System.Collections; -using UniFlow.Connector; using NUnit.Framework; using UniFlow.Connector.Logic; using UnityEngine.TestTools; @@ -20,14 +19,16 @@ public IEnumerator Timer() ); } - private void AssertTimer(EventMessages eventMessages) + private void AssertTimer(Messages messages) { - Assert.AreEqual(1, eventMessages.Count); + Assert.AreEqual(1, messages.Count); - Assert.AreEqual(ConnectorType.Timer, eventMessages[0].ConnectorType); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); - Assert.AreEqual(1.0f, eventMessages[0].Data); + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.AreEqual(ConnectorType.Timer, message.ConnectorType); + Assert.IsInstanceOf(message.Sender); + Assert.IsInstanceOf(message.Sender.Seconds); + Assert.AreEqual(1.0f, message.Sender.Seconds); HasAssert = true; } diff --git a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs index 2599810..930d879 100644 --- a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs @@ -1,5 +1,6 @@ using System.Collections; using NUnit.Framework; +using UniFlow.Connector.Event; using UniRx.Triggers; using UnityEngine; using UnityEngine.EventSystems; @@ -24,12 +25,14 @@ public IEnumerator UIBehaviourEventTrigger() ); } - private void AssertUIBehaviourEventTrigger(EventMessages eventMessages) + private void AssertUIBehaviourEventTrigger(Messages messages) { - Assert.AreEqual(1, eventMessages.Count); + Assert.AreEqual(1, messages.Count); - Assert.IsInstanceOf(eventMessages[0].Sender); - Assert.IsInstanceOf(eventMessages[0].Data); + Assert.True(messages[0].Is()); + var message = messages[0].As(); + Assert.IsInstanceOf(message.Sender.UIBehaviour); + Assert.IsInstanceOf(message.Data); HasAssert = true; } } diff --git a/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs index 80103c0..59fbb94 100644 --- a/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs +++ b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs @@ -19,7 +19,7 @@ public void SetUp() HasAssert = false; } - protected IEnumerator RunAssert(string sceneName, Action assertCallback, Action beforeAssertCallback, double waitBeforeAssert = 0, int invokeCount = 1) + protected IEnumerator RunAssert(string sceneName, Action assertCallback, Action beforeAssertCallback, double waitBeforeAssert = 0, int invokeCount = 1) { PreInstall(); yield return SceneManager.LoadSceneAsync($"{ScenePath}{sceneName}", LoadSceneMode.Additive); @@ -31,7 +31,7 @@ protected IEnumerator RunAssert(string sceneName, Action assertCa { yield return Observable.Timer(TimeSpan.FromSeconds(waitBeforeAssert)).StartAsCoroutine(); } - assertCallback(Object.FindObjectOfType().SentEventMessages); + assertCallback(Object.FindObjectOfType().SentMessages); } Assert.GreaterOrEqual(Object.FindObjectOfType().ReceiveCount, invokeCount); Assert.True(HasAssert); From 534554c6921f374d081637cdf960653a29278a4c Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Thu, 12 Sep 2019 06:50:35 +0900 Subject: [PATCH 116/453] :name_badge: Fix typos --- Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs | 2 +- Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 53cb095..efbc862 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/Event/PhyticsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] + [AddComponentMenu("UniFlow/Event/PhysicsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] public class PhysicsCollision2DEvent : ConnectorBase { [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = (PhysicsCollision2DEventType) (-1); diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 5a78ced..f7b9ffe 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector.Event { - [AddComponentMenu("UniFlow/Event/PhyticsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] + [AddComponentMenu("UniFlow/Event/PhysicsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] public class PhysicsTriggerEvent : ConnectorBase { [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = (PhysicsTriggerEventType) (-1); @@ -52,4 +52,4 @@ public enum PhysicsTriggerEventType TriggerExit, TriggerStay, } -} \ No newline at end of file +} From 2fcd18cded9ba85e0f702d3e3194572d9ef68480 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 12 Sep 2019 12:09:59 +0900 Subject: [PATCH 117/453] :sparkles: [Experimental] Implement conceptation for ValueFlow --- Assets/Sandbox.meta | 8 + Assets/Sandbox/Prefabs.meta | 8 + Assets/Sandbox/Prefabs/Prefab.prefab | 77 ++ Assets/Sandbox/Prefabs/Prefab.prefab.meta | 7 + Assets/Sandbox/Scenes.meta | 8 + Assets/Sandbox/Scenes/Test.unity | 684 ++++++++++++++++++ Assets/Sandbox/Scenes/Test.unity.meta | 7 + Assets/Scripts/ConnectableBase.cs | 10 + .../Controller/ActivationController.cs | 28 +- .../Connector/Controller/CreateInstance.cs | 11 +- .../Controller/MoveParentTransform.cs | 29 +- Assets/Scripts/ConnectorBase.cs | 3 +- Assets/Scripts/ConnectorType.cs | 1 + Assets/Scripts/IValueProvider.cs | 9 + Assets/Scripts/IValueProvider.cs.meta | 3 + 15 files changed, 868 insertions(+), 25 deletions(-) create mode 100644 Assets/Sandbox.meta create mode 100644 Assets/Sandbox/Prefabs.meta create mode 100644 Assets/Sandbox/Prefabs/Prefab.prefab create mode 100644 Assets/Sandbox/Prefabs/Prefab.prefab.meta create mode 100644 Assets/Sandbox/Scenes.meta create mode 100644 Assets/Sandbox/Scenes/Test.unity create mode 100644 Assets/Sandbox/Scenes/Test.unity.meta create mode 100644 Assets/Scripts/IValueProvider.cs create mode 100644 Assets/Scripts/IValueProvider.cs.meta diff --git a/Assets/Sandbox.meta b/Assets/Sandbox.meta new file mode 100644 index 0000000..9e8b11e --- /dev/null +++ b/Assets/Sandbox.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb048626fe54643beb870bad3bc4c6e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sandbox/Prefabs.meta b/Assets/Sandbox/Prefabs.meta new file mode 100644 index 0000000..b9b4f3f --- /dev/null +++ b/Assets/Sandbox/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edcdfa5ade37941d88ca88aff0edf373 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sandbox/Prefabs/Prefab.prefab b/Assets/Sandbox/Prefabs/Prefab.prefab new file mode 100644 index 0000000..9927295 --- /dev/null +++ b/Assets/Sandbox/Prefabs/Prefab.prefab @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6573449693540830191 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4046970079478424149} + - component: {fileID: 7273723851028226959} + - component: {fileID: 846785533979003219} + m_Layer: 0 + m_Name: Prefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4046970079478424149 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6573449693540830191} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7273723851028226959 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6573449693540830191} + m_CullTransparentMesh: 0 +--- !u!114 &846785533979003219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6573449693540830191} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Sandbox/Prefabs/Prefab.prefab.meta b/Assets/Sandbox/Prefabs/Prefab.prefab.meta new file mode 100644 index 0000000..325c0e7 --- /dev/null +++ b/Assets/Sandbox/Prefabs/Prefab.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8cae44cd6fba64772a14cd152a39a8e4 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sandbox/Scenes.meta b/Assets/Sandbox/Scenes.meta new file mode 100644 index 0000000..cf141f5 --- /dev/null +++ b/Assets/Sandbox/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: adba8b259ad124ec7aeb2a1069e04e86 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sandbox/Scenes/Test.unity b/Assets/Sandbox/Scenes/Test.unity new file mode 100644 index 0000000..39e8cd3 --- /dev/null +++ b/Assets/Sandbox/Scenes/Test.unity @@ -0,0 +1,684 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &70988941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 70988942} + - component: {fileID: 70988943} + - component: {fileID: 70988944} + m_Layer: 0 + m_Name: UniFlowController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &70988942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 70988941} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &70988943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 70988941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9d96a435a8d74b1a8c60ffea57ac84fa, type: 3} + m_Name: + m_EditorClassIdentifier: + flowGraphNodePosition: {x: 178, y: 94} + targetComponents: + - {fileID: 70988944} + targetIds: [] + actAsTrigger: 1 + source: {fileID: 6573449693540830191, guid: 8cae44cd6fba64772a14cd152a39a8e4, type: 3} + parent: {fileID: 167568203} +--- !u!114 &70988944 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 70988941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9a52a20b5ede4c8ca6a5debe9b19c80b, type: 3} + m_Name: + m_EditorClassIdentifier: + flowGraphNodePosition: {x: 604, y: 51} + targetComponents: [] + targetIds: [] + actAsTrigger: 0 + targetTransform: {fileID: 0} + parentTransform: {fileID: 276008044} + worldPositionStays: 0 + targetGameObjectProvider: {fileID: 70988943} + parentGameObjectProvider: {fileID: 0} +--- !u!1 &167568202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167568203} + - component: {fileID: 167568205} + - component: {fileID: 167568204} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &167568203 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167568202} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 508612077} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &167568204 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167568202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &167568205 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167568202} + m_CullTransparentMesh: 0 +--- !u!1 &276008043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 276008044} + - component: {fileID: 276008046} + - component: {fileID: 276008045} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &276008044 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 276008043} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 508612077} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 300, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &276008045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 276008043} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &276008046 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 276008043} + m_CullTransparentMesh: 0 +--- !u!1 &508612073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 508612077} + - component: {fileID: 508612076} + - component: {fileID: 508612075} + - component: {fileID: 508612074} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &508612074 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 508612073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &508612075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 508612073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &508612076 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 508612073} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &508612077 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 508612073} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 167568203} + - {fileID: 276008044} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1140276047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1140276050} + - component: {fileID: 1140276049} + - component: {fileID: 1140276048} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1140276048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1140276047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1140276049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1140276047} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1140276050 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1140276047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1626489816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1626489819} + - component: {fileID: 1626489818} + - component: {fileID: 1626489817} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1626489817 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626489816} + m_Enabled: 1 +--- !u!20 &1626489818 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626489816} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1626489819 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626489816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1977478638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1977478640} + - component: {fileID: 1977478639} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1977478639 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977478638} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1977478640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977478638} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/Assets/Sandbox/Scenes/Test.unity.meta b/Assets/Sandbox/Scenes/Test.unity.meta new file mode 100644 index 0000000..fe7504b --- /dev/null +++ b/Assets/Sandbox/Scenes/Test.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cecd180ff84db4baf9dc8f050a8be511 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ConnectableBase.cs b/Assets/Scripts/ConnectableBase.cs index 478487a..011f7b4 100644 --- a/Assets/Scripts/ConnectableBase.cs +++ b/Assets/Scripts/ConnectableBase.cs @@ -4,6 +4,16 @@ namespace UniFlow { public abstract class ConnectableBase : MonoBehaviour, IConnectable { + protected virtual void Start() + { + CollectSuppliedValues(); + } + + protected virtual void CollectSuppliedValues() + { + // Do nothing + } + #if UNITY_EDITOR [SerializeField] [HideInInspector] private Vector2 flowGraphNodePosition = default; public Vector2 FlowGraphNodePosition diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 2ca453e..9d9dcf9 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -10,20 +10,20 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/ActivationController", (int) ConnectorType.LoadScene)] public class ActivationController : ConnectorBase { - [SerializeField] private List targetMonoBehaviours = default; [SerializeField] private List targetGameObjects = default; + [SerializeField] private List targetMonoBehaviours = default; [SerializeField] private bool activated = default; - [UsedImplicitly] public IEnumerable MonoBehaviours - { - get => targetMonoBehaviours; - set => targetMonoBehaviours = value.ToList(); - } [UsedImplicitly] public IEnumerable GameObjects { get => targetGameObjects; set => targetGameObjects = value.ToList(); } + [UsedImplicitly] public IEnumerable MonoBehaviours + { + get => targetMonoBehaviours; + set => targetMonoBehaviours = value.ToList(); + } [UsedImplicitly] public bool Activated { get => activated; @@ -39,13 +39,13 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa observer => { var count = 0; - var monoBehaviours = MonoBehaviours.ToList(); + var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); + count += gameObjects.Count; + gameObjects.ForEach(x => x.SetActive(Activated)); + var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); count += monoBehaviours.Count; monoBehaviours.ForEach(x => x.enabled = Activated); - var gameObjects = GameObjects.ToList(); - count += gameObjects.Count(); - gameObjects.ForEach(x => x.SetActive(Activated)); - observer.OnNext(Message.Create(this, count)); + observer.OnNext(Message.Create(this, count, gameObjects, monoBehaviours)); return Disposable; } ); @@ -56,11 +56,11 @@ private void OnDestroy() Disposable.Dispose(); } - public class Message : MessageBase + public class Message : MessageBase gameObjects, IEnumerable monoBehaviours)> { - public static Message Create(ActivationController sender, int count) + public static Message Create(ActivationController sender, int count, IEnumerable gameObjects, IEnumerable monoBehaviours) { - return Create(ConnectorType.ActivationController, sender, count); + return Create(ConnectorType.ActivationController, sender, (count, gameObjects, monoBehaviours)); } } } diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs b/Assets/Scripts/Connector/Controller/CreateInstance.cs index 42284db..d1a3603 100644 --- a/Assets/Scripts/Connector/Controller/CreateInstance.cs +++ b/Assets/Scripts/Connector/Controller/CreateInstance.cs @@ -5,7 +5,9 @@ namespace UniFlow.Connector.Controller { - public class CreateInstance : ConnectorBase + [OutputValue(typeof(GameObject))] + [AddComponentMenu("UniFlow/Controller/CreateInstance", (int) ConnectorType.CreateInstance)] + public class CreateInstance : ConnectorBase, IValueProvider { [SerializeField] private GameObject source = default; private GameObject Source => source == default ? gameObject : source; @@ -13,6 +15,7 @@ public class CreateInstance : ConnectorBase [SerializeField] private Transform parent = default; private Transform Parent => parent == default ? transform : parent; + private ISubject GameObjectSubject { get; } = new Subject(); private IDisposable Disposable { get; } = new CompositeDisposable(); public override IObservable OnConnectAsObservable(IMessage latestMessage) @@ -22,6 +25,7 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa observer => { var go = Instantiate(Source, Parent); + GameObjectSubject.OnNext(go); observer.OnNext(Message.Create(this, go)); return Disposable; } @@ -42,5 +46,10 @@ private void OnDestroy() { Disposable.Dispose(); } + + IObservable IValueProvider.OnProvideAsObservable() + { + return GameObjectSubject; + } } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 9079ac9..2b38f94 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -9,37 +9,48 @@ namespace UniFlow.Connector.Controller public class MoveParentTransform : ConnectorBase { // ReSharper disable once InconsistentNaming - [SerializeField] private Transform _transform = default; [SerializeField] private Transform targetTransform = default; + [SerializeField] private Transform parentTransform = default; [SerializeField] private bool worldPositionStays = true; + [SerializeField] private ConnectorBase targetGameObjectProvider = default; + [SerializeField] private ConnectorBase parentGameObjectProvider = default; + [UsedImplicitly] public Transform Transform { - get => _transform != default - ? _transform - : _transform = transform; - set => _transform = value; + get => targetTransform != default + ? targetTransform + : targetTransform = transform; + set => targetTransform = value; } - [UsedImplicitly] public Transform TargetTransform + [UsedImplicitly] public Transform ParentTransform { - get => targetTransform; - set => targetTransform = value; + get => parentTransform; + set => parentTransform = value; } [UsedImplicitly] public bool WorldPositionStays { get => worldPositionStays; set => worldPositionStays = value; } + [UsedImplicitly] public IValueProvider TargetGameObjectProvider => targetGameObjectProvider as IValueProvider; + [UsedImplicitly] public IValueProvider ParentGameObjectProvider => parentGameObjectProvider as IValueProvider; private IDisposable Disposable { get; } = new CompositeDisposable(); + protected override void CollectSuppliedValues() + { + TargetGameObjectProvider?.OnProvideAsObservable().Subscribe(x => Transform = x.transform); + ParentGameObjectProvider?.OnProvideAsObservable().Subscribe(x => ParentTransform = x.transform); + } + public override IObservable OnConnectAsObservable(IMessage latestMessage) { return Observable .Create( observer => { - Transform.SetParent(TargetTransform, WorldPositionStays); + Transform.SetParent(ParentTransform, WorldPositionStays); observer.OnNext(Message.Create(this, Transform)); return Disposable; } diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index dcad8b8..15fc769 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -50,8 +50,9 @@ [UsedImplicitly] public bool ActAsTrigger [Inject] private DiContainer Container { get; } - protected virtual void Start() + protected override void Start() { + base.Start(); if (ActAsTrigger) { ((IConnector) this).Connect(Observable.Return(default)); diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 8f3598a..f58b77a 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -19,6 +19,7 @@ public enum ConnectorType PhysicsTrigger2DEvent, ActivationController = 300, + CreateInstance, DestroyInstance, SimpleAnimationController, SimpleAnimationEvent, diff --git a/Assets/Scripts/IValueProvider.cs b/Assets/Scripts/IValueProvider.cs new file mode 100644 index 0000000..a266f18 --- /dev/null +++ b/Assets/Scripts/IValueProvider.cs @@ -0,0 +1,9 @@ +using System; + +namespace UniFlow +{ + public interface IValueProvider + { + IObservable OnProvideAsObservable(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/IValueProvider.cs.meta b/Assets/Scripts/IValueProvider.cs.meta new file mode 100644 index 0000000..130d256 --- /dev/null +++ b/Assets/Scripts/IValueProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 42eb283f78d54e9bad1360889ce40e0d +timeCreated: 1568256105 \ No newline at end of file From dc5af027b12bafb8f3566462ec048756d16be25d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 15 Sep 2019 16:57:16 +0900 Subject: [PATCH 118/453] :sparkles: Implement TimelineEvent --- .../Scripts/Connector/Event/TimelineEvent.cs | 159 ++++++++++++++++++ .../Connector/Event/TimelineEvent.cs.meta | 15 ++ Assets/Scripts/ConnectorType.cs | 1 + Assets/Scripts/Signal.meta | 3 + Assets/Scripts/Signal/Begin.cs | 6 + Assets/Scripts/Signal/Begin.cs.meta | 3 + Assets/Scripts/Signal/End.cs | 6 + Assets/Scripts/Signal/End.cs.meta | 3 + Assets/Scripts/Signal/SignalAssetBase.cs | 9 + Assets/Scripts/Signal/SignalAssetBase.cs.meta | 3 + 10 files changed, 208 insertions(+) create mode 100644 Assets/Scripts/Connector/Event/TimelineEvent.cs create mode 100644 Assets/Scripts/Connector/Event/TimelineEvent.cs.meta create mode 100644 Assets/Scripts/Signal.meta create mode 100644 Assets/Scripts/Signal/Begin.cs create mode 100644 Assets/Scripts/Signal/Begin.cs.meta create mode 100644 Assets/Scripts/Signal/End.cs create mode 100644 Assets/Scripts/Signal/End.cs.meta create mode 100644 Assets/Scripts/Signal/SignalAssetBase.cs create mode 100644 Assets/Scripts/Signal/SignalAssetBase.cs.meta diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs new file mode 100644 index 0000000..2a8b84f --- /dev/null +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -0,0 +1,159 @@ +using System; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Signal; +using UniRx; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/TimelineEvent", (int) ConnectorType.TimelineEvent)] + public class TimelineEvent : ConnectorBase + { + [SerializeField] private TimelineEventType timelineEventType = (TimelineEventType) (-1); + [SerializeField] private TimelineAsset timelineAsset = default; + [SerializeField] private PlayableDirector playableDirector = default; + + [UsedImplicitly] public TimelineEventType TimelineEventType + { + get => timelineEventType; + set => timelineEventType = value; + } + [UsedImplicitly] public TimelineAsset TimelineAsset + { + get => timelineAsset; + set => timelineAsset = value; + } + [UsedImplicitly] public PlayableDirector PlayableDirector + { + get => + playableDirector != default + ? playableDirector + : playableDirector = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + set => playableDirector = value; + } + + private static Begin beginSignal = default; + private static End endSignal = default; + private static Begin BeginSignal + { + get + { + // ReSharper disable once InvertIf + if (beginSignal == default) + { + beginSignal = ScriptableObject.CreateInstance(); + beginSignal.IsTemporaryInstance = true; + } + return beginSignal; + } + } + + private static End EndSignal + { + get + { + // ReSharper disable once InvertIf + if (endSignal == default) + { + endSignal = ScriptableObject.CreateInstance(); + endSignal.IsTemporaryInstance = true; + } + return endSignal; + } + } + + private ISubject SignalEmittedSubject { get; } = new Subject(); + + protected override void Start() + { + base.Start(); + RegisterSignal(); + } + + private void OnDestroy() + { + if (!(PlayableDirector.playableAsset is TimelineAsset timeline)) + { + return; + } + + foreach (var marker in timeline.markerTrack.GetMarkers().OfType().Where(x => x.asset is SignalAssetBase signalAsset && signalAsset.IsTemporaryInstance)) + { + timeline.markerTrack.DeleteMarker(marker); + } + } + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return SignalEmittedSubject.Select(_ => Message.Create(this)); + } + + private void RegisterSignal() + { + if (!(PlayableDirector.playableAsset is TimelineAsset timeline)) + { + return; + } + + var time = TimelineEventType == TimelineEventType.Play ? 0 : timeline.duration; + var signal = TimelineEventType == TimelineEventType.Play ? (SignalAsset) BeginSignal : EndSignal; + var emitter = timeline + .markerTrack + .GetMarkers() + .FirstOrDefault( + x => Math.Abs(x.time - time) < double.Epsilon + && x is SignalEmitter signalEmitter + && signalEmitter.asset.GetType() == signal.GetType() + ) as SignalEmitter; + if (emitter == default) + { + emitter = timeline.markerTrack.CreateMarker(time); + emitter.asset = signal; + } + + var receiver = PlayableDirector.gameObject.GetComponent(); + if (receiver == default) + { + receiver = PlayableDirector.gameObject.AddComponent(); + } + + if (receiver.GetReaction(signal) == default) + { + receiver.AddReaction(signal, new UnityEvent()); + } + + receiver.GetReaction(signal).AddListener(TimelineEventType == TimelineEventType.Play ? (UnityAction) DispatchBegin : DispatchEnd); + } + + private void DispatchBegin() + { + SignalEmittedSubject.OnNext(TimelineEventType.Play); + } + + private void DispatchEnd() + { + SignalEmittedSubject.OnNext(TimelineEventType.Stop); + } + + public class Message : MessageBase + { + public static Message Create(TimelineEvent sender) + { + return Create(ConnectorType.TimelineEvent, sender); + } + } + } + + public enum TimelineEventType + { + Play, + Stop, + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs.meta b/Assets/Scripts/Connector/Event/TimelineEvent.cs.meta new file mode 100644 index 0000000..2c50d86 --- /dev/null +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 7e0c3e70e31f4801a6fdf1ac6facdab6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - beginSignal: {fileID: 11400000, guid: 3dbc3d1c5a0704ea6ade5b04509bc240, type: 2} + - endSignal: {fileID: 11400000, guid: 51b2d11bb0d2d403d8f39dde22b9effd, type: 2} + - timelineAsset: {instanceID: 0} + - playableDirector: {instanceID: 0} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index f58b77a..23532c6 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -28,6 +28,7 @@ public enum ConnectorType AudioController, AudioEvent, PlayableController, + TimelineEvent, TimelineSignal, RaycasterController, RaycastTargetController, diff --git a/Assets/Scripts/Signal.meta b/Assets/Scripts/Signal.meta new file mode 100644 index 0000000..2406e59 --- /dev/null +++ b/Assets/Scripts/Signal.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6272980ab42249b09c1c1bba93ef2509 +timeCreated: 1568471721 \ No newline at end of file diff --git a/Assets/Scripts/Signal/Begin.cs b/Assets/Scripts/Signal/Begin.cs new file mode 100644 index 0000000..20d4547 --- /dev/null +++ b/Assets/Scripts/Signal/Begin.cs @@ -0,0 +1,6 @@ +namespace UniFlow.Signal +{ + public class Begin : SignalAssetBase + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/Signal/Begin.cs.meta b/Assets/Scripts/Signal/Begin.cs.meta new file mode 100644 index 0000000..522071a --- /dev/null +++ b/Assets/Scripts/Signal/Begin.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 88a7a553740d46db95f038da46f1f15a +timeCreated: 1568471722 \ No newline at end of file diff --git a/Assets/Scripts/Signal/End.cs b/Assets/Scripts/Signal/End.cs new file mode 100644 index 0000000..c81565f --- /dev/null +++ b/Assets/Scripts/Signal/End.cs @@ -0,0 +1,6 @@ +namespace UniFlow.Signal +{ + public class End : SignalAssetBase + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/Signal/End.cs.meta b/Assets/Scripts/Signal/End.cs.meta new file mode 100644 index 0000000..062cf5d --- /dev/null +++ b/Assets/Scripts/Signal/End.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 91f1f9f113e1414591950aad2e51469b +timeCreated: 1568471737 \ No newline at end of file diff --git a/Assets/Scripts/Signal/SignalAssetBase.cs b/Assets/Scripts/Signal/SignalAssetBase.cs new file mode 100644 index 0000000..d8eda0d --- /dev/null +++ b/Assets/Scripts/Signal/SignalAssetBase.cs @@ -0,0 +1,9 @@ +using UnityEngine.Timeline; + +namespace UniFlow.Signal +{ + public class SignalAssetBase : SignalAsset + { + public bool IsTemporaryInstance { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Signal/SignalAssetBase.cs.meta b/Assets/Scripts/Signal/SignalAssetBase.cs.meta new file mode 100644 index 0000000..d7f5297 --- /dev/null +++ b/Assets/Scripts/Signal/SignalAssetBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0dc41ef1fa1d4f8ca891bbab5329335f +timeCreated: 1568530218 \ No newline at end of file From 9567c923e5c8566e2d737ae3513d6834feb6da61 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 15 Sep 2019 17:26:00 +0900 Subject: [PATCH 119/453] :sparkles: Change default value of enum --- Assets/Scripts/Connector/Controller/AudioController.cs | 2 +- Assets/Scripts/Connector/Controller/PlayableController.cs | 2 +- Assets/Scripts/Connector/Controller/RaycastTargetController.cs | 2 +- Assets/Scripts/Connector/Controller/RaycasterController.cs | 2 +- .../Scripts/Connector/Controller/SimpleAnimationController.cs | 2 +- Assets/Scripts/Connector/Event/AudioEvent.cs | 2 +- Assets/Scripts/Connector/Event/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Event/KeyEvent.cs | 2 +- Assets/Scripts/Connector/Event/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 2 +- Assets/Scripts/Connector/Event/ParticleEvent.cs | 2 +- Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs | 2 +- Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs | 2 +- Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs | 2 +- Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs | 2 +- Assets/Scripts/Connector/Event/RectTransformEvent.cs | 2 +- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 2 +- Assets/Scripts/Connector/Event/TimelineEvent.cs | 2 +- Assets/Scripts/Connector/Event/TransformEvent.cs | 2 +- Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 47ebcb9..16282bf 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] public class AudioController : ConnectorBase { - [SerializeField] private AudioControlMethod audioControlMethod = (AudioControlMethod) (-1); + [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 6e4fd48..56164a5 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/PlayableController", (int) ConnectorType.PlayableController)] public class PlayableController : ConnectorBase { - [SerializeField] private PlayableControlMethod playableControlMethod = (PlayableControlMethod) (-1); + [SerializeField] private PlayableControlMethod playableControlMethod = PlayableControlMethod.Play; [SerializeField] private TimelineAsset timelineAsset = default; [SerializeField] private PlayableDirector playableDirector = default; diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 7d4fdca..a227327 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -11,7 +11,7 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] public class RaycastTargetController : ConnectorBase { - [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = (RaycastTargetControlMethod) (-1); + [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = RaycastTargetControlMethod.Activate; [SerializeField] private List graphics = default; [SerializeField] private List colliders = default; [SerializeField] private List collider2Ds = default; diff --git a/Assets/Scripts/Connector/Controller/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs index 5647410..005e23f 100644 --- a/Assets/Scripts/Connector/Controller/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -11,7 +11,7 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/RaycasterController", (int) ConnectorType.RaycasterController)] public class RaycasterController : ConnectorBase { - [SerializeField] private RaycasterControlMethod raycasterControlMethod = (RaycasterControlMethod) (-1); + [SerializeField] private RaycasterControlMethod raycasterControlMethod = RaycasterControlMethod.Activate; [SerializeField] private List raycasters = default; [UsedImplicitly] private RaycasterControlMethod RaycasterControlMethod diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index d653e67..5208523 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] public class SimpleAnimationController : ConnectorBase { - [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = (SimpleAnimationControlMethod) (-1); + [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = SimpleAnimationControlMethod.Play; [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index d997b2c..6c0d7a0 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] public class AudioEvent : ConnectorBase { - [SerializeField] private AudioEventType audioEventType = (AudioEventType) (-1); + [SerializeField] private AudioEventType audioEventType = AudioEventType.Play; [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index d928631..4afa826 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/CameraEvent", (int) ConnectorType.CameraEvent)] public class CameraEvent : ConnectorBase { - [SerializeField] private CameraEventType cameraEventType = (CameraEventType) (-1); + [SerializeField] private CameraEventType cameraEventType = CameraEventType.BecomeVisible; [SerializeField] private Component component = default; [UsedImplicitly] public CameraEventType CameraEventType diff --git a/Assets/Scripts/Connector/Event/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs index 1e9775d..0fe82bb 100644 --- a/Assets/Scripts/Connector/Event/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/KeyEvent", (int) ConnectorType.KeyEvent)] public class KeyEvent : ConnectorBase { - [SerializeField] private KeyEventType keyEventType = (KeyEventType) (-1); + [SerializeField] private KeyEventType keyEventType = KeyEventType.Down; [SerializeField] private KeyCode keyCode = default; private KeyEventType KeyEventType => keyEventType; diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index e32541c..bf03e66 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/LifecycleEvent", (int) ConnectorType.LifecycleEvent)] public class LifecycleEvent : ConnectorBase { - [SerializeField] private LifecycleEventType lifecycleEventType = (LifecycleEventType) (-1); + [SerializeField] private LifecycleEventType lifecycleEventType = LifecycleEventType.Start; [SerializeField] private Component component = default; [UsedImplicitly] public LifecycleEventType LifecycleEventType diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 6418fe6..d50980d 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/MouseEvent", (int) ConnectorType.MouseEvent)] public class MouseEvent : ConnectorBase { - [SerializeField] private MouseEventType mouseEventType = (MouseEventType) (-1); + [SerializeField] private MouseEventType mouseEventType = MouseEventType.MouseDown; [SerializeField] private Component component = default; [UsedImplicitly] public MouseEventType MouseEventType diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index 5cb90da..0e31f75 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/ParticleEvent", (int) ConnectorType.ParticleEvent)] public class ParticleEvent : ConnectorBase { - [SerializeField] private ParticleEventType particleEventType = (ParticleEventType) (-1); + [SerializeField] private ParticleEventType particleEventType = ParticleEventType.ParticleCollision; [SerializeField] private Component component = default; [UsedImplicitly] public ParticleEventType ParticleEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index fb44c7c..08cd4bb 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhyticsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] public class PhysicsCollision2DEvent : ConnectorBase { - [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = (PhysicsCollision2DEventType) (-1); + [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = PhysicsCollision2DEventType.CollisionEnter2D; [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index c1c897e..79273ff 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] public class PhysicsCollisionEvent : ConnectorBase { - [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = (PhysicsCollisionEventType) (-1); + [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = PhysicsCollisionEventType.CollisionEnter; [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 7663849..c784671 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] public class PhysicsTrigger2DEvent : ConnectorBase { - [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = (PhysicsTrigger2DEventType) (-1); + [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = PhysicsTrigger2DEventType.TriggerEnter2D; [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 3cced32..052ca10 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhyticsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] public class PhysicsTriggerEvent : ConnectorBase { - [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = (PhysicsTriggerEventType) (-1); + [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = PhysicsTriggerEventType.TriggerEnter; [SerializeField] private Component component = default; [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index f5779ac..c619822 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] public class RectTransformEvent : ConnectorBase { - [SerializeField] private RectTransformEventType rectTransformEventType = (RectTransformEventType) (-1); + [SerializeField] private RectTransformEventType rectTransformEventType = RectTransformEventType.CanvasGroupChanged; [SerializeField] private Component component = default; [UsedImplicitly] public RectTransformEventType RectTransformEventType diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 6de3c16..7c937c2 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] public class SimpleAnimationEvent : ConnectorBase { - [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = (SimpleAnimationEventType) (-1); + [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = SimpleAnimationEventType.Play; [SerializeField] [Tooltip("If you do not specify it will not be filtered")] private AnimationClip animationClip = default; diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 2a8b84f..2a4d583 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -13,7 +13,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/TimelineEvent", (int) ConnectorType.TimelineEvent)] public class TimelineEvent : ConnectorBase { - [SerializeField] private TimelineEventType timelineEventType = (TimelineEventType) (-1); + [SerializeField] private TimelineEventType timelineEventType = TimelineEventType.Play; [SerializeField] private TimelineAsset timelineAsset = default; [SerializeField] private PlayableDirector playableDirector = default; diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 69daab7..68716ea 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/TransformEvent", (int) ConnectorType.TransformEvent)] public class TransformEvent : ConnectorBase { - [SerializeField] private TransformEventType transformEventType = (TransformEventType) (-1); + [SerializeField] private TransformEventType transformEventType = TransformEventType.TransformChildrenChanged; [SerializeField] private Component component = default; [UsedImplicitly] public TransformEventType TransformEventType diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index cecc3e7..cf7c635 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] public class UIBehaviourEventTrigger : ConnectorBase { - [SerializeField] private EventTriggerType eventTriggerType = (EventTriggerType) (-1); + [SerializeField] private EventTriggerType eventTriggerType = EventTriggerType.PointerClick; [SerializeField] private UIBehaviour uiBehaviour = default; [UsedImplicitly] public EventTriggerType EventTriggerType From fd6be043475615a050f9248e5615a376d84c5afe Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 15 Sep 2019 17:27:03 +0900 Subject: [PATCH 120/453] :recycle: Remove unused using --- Assets/Scripts/Connector/Controller/AnimatorTrigger.cs | 1 - Assets/Scripts/Connector/Controller/TimeScaleController.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 353674b..af227fe 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 5a6a5a4..99f7d50 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -1,6 +1,5 @@ using System; using JetBrains.Annotations; -using UniFlow.Message; using UniRx; using UnityEngine; From 496c3eebd4c1f10b3ed44912f2b0c18fdb32d7ac Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:32:13 +0900 Subject: [PATCH 121/453] :sparkles: Support handle self instance --- .../Controller/ActivationController.cs | 8 ++++++ .../Controller/RaycastTargetController.cs | 25 +++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 9d9dcf9..13b9f1e 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -45,6 +45,14 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); count += monoBehaviours.Count; monoBehaviours.ForEach(x => x.enabled = Activated); + if (gameObject.activeSelf != Activated) + { + count++; + gameObject.SetActive(Activated); + } + var components = GetComponents().Where(x => x.enabled != Activated).ToList(); + count += components.Count; + components.ForEach(x => x.enabled = Activated); observer.OnNext(Message.Create(this, count, gameObjects, monoBehaviours)); return Disposable; } diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index a227327..9b8986a 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -70,12 +70,32 @@ private int HandleActivation() .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) ) + .Concat( + GetComponents() + .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + GetComponents() + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + GetComponents() + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) .ToList(); var count = handleTargets.Count; handleTargets.ForEach(x => x.Invoke()); return count; } + private void OnDestroy() + { + Disposable.Dispose(); + } + public class Message : MessageBase, IValueHolder { int IValueHolder.Value => Data; @@ -85,11 +105,6 @@ public static Message Create(RaycastTargetController sender, int count) return Create(ConnectorType.RaycastTargetController, sender, count); } } - - private void OnDestroy() - { - Disposable.Dispose(); - } } [PublicAPI] From a45e1c98d36671b542a56f7e98ab4f2499587263 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:32:30 +0900 Subject: [PATCH 122/453] :sparkles: Handle raycastTarget when before/after connecting --- .../Event/UIBehaviourEventTrigger.cs | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index cf7c635..30f6050 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -4,6 +4,7 @@ using UniRx.Triggers; using UnityEngine; using UnityEngine.EventSystems; +using UnityEngine.UI; namespace UniFlow.Connector.Event { @@ -12,6 +13,8 @@ public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private EventTriggerType eventTriggerType = EventTriggerType.PointerClick; [SerializeField] private UIBehaviour uiBehaviour = default; + [SerializeField] private bool activateBeforeConnect = default; + [SerializeField] private bool deactivateAfterConnect = default; [UsedImplicitly] public EventTriggerType EventTriggerType { @@ -23,10 +26,42 @@ [UsedImplicitly] public UIBehaviour UIBehaviour get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); set => uiBehaviour = value; } + [UsedImplicitly] public bool ActivateBeforeConnect + { + get => activateBeforeConnect; + set => activateBeforeConnect = value; + } + [UsedImplicitly] public bool DeactivateAfterConnect + { + get => deactivateAfterConnect; + set => deactivateAfterConnect = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return OnEventTriggerAsObservable() + return Observable + .ReturnUnit() + .Do( + _ => + { + if (ActivateBeforeConnect && UIBehaviour is Graphic graphic) + { + graphic.raycastTarget = true; + } + } + ) + .SelectMany(_ => OnEventTriggerAsObservable()) + .Do( + _ => + { + if (DeactivateAfterConnect && UIBehaviour is Graphic graphic) + { + graphic.raycastTarget = false; + } + } + ) .Select(x => Message.Create(this, x)); } @@ -73,6 +108,11 @@ private IObservable OnEventTriggerAsObservable() } } + private void OnDestroy() + { + Disposable.Dispose(); + } + public class Message : MessageBase { public static Message Create(UIBehaviourEventTrigger sender, BaseEventData baseEventData) From f753b2a08131456d719643416b8b20393b3df43c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:33:08 +0900 Subject: [PATCH 123/453] :sparkles: Accept override `ActAsTrigger` in inherited classes --- Assets/Scripts/ConnectorBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 15fc769..5be9f49 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -17,7 +17,7 @@ [SerializeField] [Tooltip("Specify identifiers of IEventConnectable that resolve private List targetIds = default; [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] - private bool actAsTrigger = false; + protected bool actAsTrigger = false; private IEnumerable TargetConnectors => new List() @@ -42,7 +42,7 @@ public IEnumerable TargetIds } #endif - [UsedImplicitly] public bool ActAsTrigger + [UsedImplicitly] public virtual bool ActAsTrigger { get => actAsTrigger; set => actAsTrigger = value; From 668708acf198257d5533c68b7cfc73f1e66c2824 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:33:44 +0900 Subject: [PATCH 124/453] :sparkles: Add Toss/Receive class to split graph --- Assets/Scripts/Connector/Receive.cs | 46 ++++++++++++++++++++++++ Assets/Scripts/Connector/Receive.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 3 ++ Assets/Scripts/Receiver/Toss.cs | 25 +++++++++++++ Assets/Scripts/Receiver/Toss.cs.meta | 3 ++ 5 files changed, 80 insertions(+) create mode 100644 Assets/Scripts/Connector/Receive.cs create mode 100644 Assets/Scripts/Connector/Receive.cs.meta create mode 100644 Assets/Scripts/Receiver/Toss.cs create mode 100644 Assets/Scripts/Receiver/Toss.cs.meta diff --git a/Assets/Scripts/Connector/Receive.cs b/Assets/Scripts/Connector/Receive.cs new file mode 100644 index 0000000..0477ddc --- /dev/null +++ b/Assets/Scripts/Connector/Receive.cs @@ -0,0 +1,46 @@ +using System; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + [AddComponentMenu("UniFlow/Misc/Receive", (int) ConnectorType.Receive)] + public class Receive : ConnectorBase + { + // force return false to prevent triggering + public override bool ActAsTrigger + { + get => false; + set + { + } + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return Observable + .Create( + observer => + { + observer.OnNext(Message.Create(this)); + return Disposable; + } + ); + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase + { + public static Message Create(Receive sender) + { + return Create(ConnectorType.Receive, sender); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Receive.cs.meta b/Assets/Scripts/Connector/Receive.cs.meta new file mode 100644 index 0000000..bf4da81 --- /dev/null +++ b/Assets/Scripts/Connector/Receive.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ddef13599bdc4654af51f346d00c9c72 +timeCreated: 1568622905 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 23532c6..4789444 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -44,6 +44,9 @@ public enum ConnectorType TimeScaleController, Empty, + Toss = 9100, + Receive = 9101, + Preset = 10000, Receiver = 20000, diff --git a/Assets/Scripts/Receiver/Toss.cs b/Assets/Scripts/Receiver/Toss.cs new file mode 100644 index 0000000..6f8dc04 --- /dev/null +++ b/Assets/Scripts/Receiver/Toss.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using UniFlow.Connector; +using UniRx; +using UnityEngine; + +namespace UniFlow.Receiver +{ + [AddComponentMenu("UniFlow/Misc/Toss", (int) ConnectorType.Toss)] + public class Toss : ReceiverBase + { + [SerializeField] private List targets = default; + private IEnumerable Targets => targets; + + public override void OnReceive(Messages messages) + { + foreach (var target in Targets) + { + if (target != default && target.activeSelf) + { + (target.GetComponent() as IConnector)?.Connect(Observable.Return(messages)); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Receiver/Toss.cs.meta b/Assets/Scripts/Receiver/Toss.cs.meta new file mode 100644 index 0000000..a64af49 --- /dev/null +++ b/Assets/Scripts/Receiver/Toss.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7fcda12b43d340ab9f5b06900efb58d1 +timeCreated: 1568622711 \ No newline at end of file From ee8e4f8738d8e6bc22a044cd555d420ac7cd2fe9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:35:22 +0900 Subject: [PATCH 125/453] :beetle: Waiting animation correctly --- .../Scripts/Connector/Event/SimpleAnimationEvent.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 7c937c2..47afaf1 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -51,6 +52,8 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation private ISubject<(SimpleAnimationEventType eventType, AnimationClip animationClip)> CurrentStateSubject { get; } = new Subject<(SimpleAnimationEventType, AnimationClip)>(); + private IDictionary PlayingStatuses { get; } = new Dictionary(); + protected override void Start() { base.Start(); @@ -68,6 +71,7 @@ private void ObserveSimpleAnimation() { foreach (var state in SimpleAnimation.GetStates()) { + PlayingStatuses[state] = false; state .ObserveEveryValueChanged(x => (SimpleAnimation.IsPlaying(x.name), x.normalizedTime)) .Pairwise() @@ -78,16 +82,19 @@ private void ObserveSimpleAnimation() private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTime)> pair, SimpleAnimation.State state) { - if (!pair.Previous.isPlaying && pair.Current.isPlaying) + if (!pair.Previous.isPlaying && pair.Current.isPlaying && !PlayingStatuses[state]) { + PlayingStatuses[state] = true; CurrentStateSubject.OnNext((SimpleAnimationEventType.Play, state.clip)); } - else if (pair.Previous.isPlaying && !pair.Current.isPlaying) + else if (pair.Previous.isPlaying && !pair.Current.isPlaying && PlayingStatuses[state]) { + PlayingStatuses[state] = false; CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); } - else if (pair.Previous.normalizedTime < 1.0f && Mathf.Approximately(pair.Current.normalizedTime, 1.0f)) + else if (pair.Previous.normalizedTime < 1.0f && Mathf.Approximately(pair.Current.normalizedTime, 1.0f) && PlayingStatuses[state]) { + PlayingStatuses[state] = false; CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); } } From 20887ea35bc5487ddb55bc4952942f34c3df374e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:36:02 +0900 Subject: [PATCH 126/453] :sparkles: Support SuppliableTypeAttribute to receive value on connecting --- Assets/Scripts/Attribute.meta | 3 +++ .../Scripts/Attribute/SuppliableTypeAttribute.cs | 15 +++++++++++++++ .../Attribute/SuppliableTypeAttribute.cs.meta | 3 +++ .../Connector/Controller/MoveParentTransform.cs | 5 +++-- Assets/Scripts/IValueProvider.cs | 6 +++++- 5 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 Assets/Scripts/Attribute.meta create mode 100644 Assets/Scripts/Attribute/SuppliableTypeAttribute.cs create mode 100644 Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta diff --git a/Assets/Scripts/Attribute.meta b/Assets/Scripts/Attribute.meta new file mode 100644 index 0000000..b48d1df --- /dev/null +++ b/Assets/Scripts/Attribute.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f5727fd965f6439e8336d1e5b108d27a +timeCreated: 1568185279 \ No newline at end of file diff --git a/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs b/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs new file mode 100644 index 0000000..4b3197e --- /dev/null +++ b/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace UniFlow.Attribute +{ + public class SuppliableTypeAttribute : System.Attribute + { + public SuppliableTypeAttribute(params Type[] types) + { + Types = types; + } + + public IEnumerable Types { get; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta b/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta new file mode 100644 index 0000000..19493cd --- /dev/null +++ b/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cfada1e41d8e4fd2867141b29f244f76 +timeCreated: 1568279430 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 2b38f94..17f6570 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -13,8 +14,8 @@ public class MoveParentTransform : ConnectorBase [SerializeField] private Transform parentTransform = default; [SerializeField] private bool worldPositionStays = true; - [SerializeField] private ConnectorBase targetGameObjectProvider = default; - [SerializeField] private ConnectorBase parentGameObjectProvider = default; + [SerializeField][SuppliableType(typeof(GameObject))] private ConnectorBase targetGameObjectProvider = default; + [SerializeField][SuppliableType(typeof(GameObject))] private ConnectorBase parentGameObjectProvider = default; [UsedImplicitly] public Transform Transform { diff --git a/Assets/Scripts/IValueProvider.cs b/Assets/Scripts/IValueProvider.cs index a266f18..9f0ef74 100644 --- a/Assets/Scripts/IValueProvider.cs +++ b/Assets/Scripts/IValueProvider.cs @@ -2,7 +2,11 @@ namespace UniFlow { - public interface IValueProvider + public interface IValueProvider + { + } + + public interface IValueProvider : IValueProvider { IObservable OnProvideAsObservable(); } From d0fb7dc0a72944a9a170d32183bc684a7b288d98 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:36:39 +0900 Subject: [PATCH 127/453] :sparkles: Omit automatic reloading in FlowGraph and avoid some error --- Assets/Editor/Scripts/ConnectableInfo.cs | 46 +++++++++++--- Assets/Editor/Scripts/FlowEditorWindow.cs | 9 ++- Assets/Editor/Scripts/FlowGraphView.cs | 39 ++++++++---- Assets/Editor/Scripts/FlowNode.cs | 35 ++++++++--- Assets/Editor/Scripts/FlowVisualElement.cs | 72 ++++++++++++++++------ 5 files changed, 152 insertions(+), 49 deletions(-) diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs b/Assets/Editor/Scripts/ConnectableInfo.cs index 0343bcd..4ecd952 100644 --- a/Assets/Editor/Scripts/ConnectableInfo.cs +++ b/Assets/Editor/Scripts/ConnectableInfo.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Reflection; using JetBrains.Annotations; +using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Editor @@ -10,13 +11,14 @@ namespace UniFlow.Editor [Serializable] public class ConnectableInfo { - private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type type, string name, IEnumerable parameters) + private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) { GameObject = gameObject; Connectable = connectable; Type = type; Name = name; parameterList = parameters.ToList(); + suppliableParameterList = suppliableParameters.ToList(); } public GameObject GameObject { get; set; } @@ -25,6 +27,8 @@ private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type ty public string Name { get; } [SerializeField] private List parameterList = default; public IEnumerable ParameterList => parameterList; + [SerializeField] private List suppliableParameterList = default; + public IEnumerable SuppliableParameterList => suppliableParameterList; public void ApplyParameter(Parameter parameter) { @@ -62,17 +66,30 @@ public static ConnectableInfo Create(Type type, IConnectable instance = default) instance, type, type.Name, - type - .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Where(x => x.GetCustomAttribute() != null || x.IsPublic) - .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)) + CollectFields(type) + .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() == null && x.GetCustomAttribute() == null) + .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), + CollectFields(type) + .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() != null && x.GetCustomAttribute() == null) + .Select(x => SuppliableParameter.Create(x.GetCustomAttribute().Types.ToArray())) ); } + private static FieldInfo[] CollectFields(Type type) + { + var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (typeof(IConnectable).IsAssignableFrom(type.BaseType)) + { + fields = fields.Concat(CollectFields(type.BaseType)).ToArray(); + } + + return fields; + } + [PublicAPI] - public static ConnectableInfo Create(GameObject gameObject, IConnectable instance, Type type, string name, IEnumerable parameters) + public static ConnectableInfo Create(GameObject gameObject, IConnectable instance, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) { - return new ConnectableInfo(gameObject, instance, type, name, parameters); + return new ConnectableInfo(gameObject, instance, type, name, parameters, suppliableParameters); } [Serializable] @@ -100,5 +117,20 @@ public static Parameter Create(Type type, string name, object value) return new Parameter(type, name, value); } } + + public class SuppliableParameter + { + private SuppliableParameter(params Type[] types) + { + Types = types; + } + + public IEnumerable Types { get; } + + public static SuppliableParameter Create(params Type[] types) + { + return new SuppliableParameter(types); + } + } } } \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index f3c00bc..4c87b56 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -1,11 +1,12 @@ using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using UnityEditor; using UnityEngine; namespace UniFlow.Editor { - internal class FlowGraphParameters : ScriptableSingleton + internal class UniFlowSettings : ScriptableSingleton { [SerializeField] private Vector3 latestPosition = Vector3.zero; [SerializeField] private Vector3 latestScale = Vector3.one; @@ -20,7 +21,8 @@ internal Vector3 LatestScale get => latestScale; set => latestScale = value; } - internal static bool IsPrefabMode => Selection.activeGameObject != default && !Selection.activeGameObject.scene.IsValid(); + internal bool IsPrefabMode => SelectedGameObject != default && !SelectedGameObject.scene.IsValid(); + internal GameObject SelectedGameObject { get; set; } = null; } public class FlowEditorWindow : EditorWindow @@ -39,6 +41,7 @@ public static void Open() { GetWindow(); Window.titleContent = new GUIContent("UniFlow Graph"); + } public void ForceRegisterUndo() @@ -70,9 +73,9 @@ private void OnEnable() Reload(); } + [SuppressMessage("ReSharper", "DelegateSubtraction")] private void OnDisable() { - // ReSharper disable once DelegateSubtraction Undo.undoRedoPerformed -= Reload; } diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 4f4a2d9..e194b9a 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -24,7 +24,7 @@ public class FlowGraphView : GraphView public void Initialize() { - UpdateViewTransform(FlowGraphParameters.instance.LatestPosition, FlowGraphParameters.instance.LatestScale); + UpdateViewTransform(UniFlowSettings.instance.LatestPosition, UniFlowSettings.instance.LatestScale); styleSheets.Add(AssetReferences.Instance.FlowGraphView); SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); this.AddManipulator(new ContentDragger()); @@ -44,8 +44,8 @@ public void Initialize() viewTransformChanged += graphView => { - FlowGraphParameters.instance.LatestPosition = graphView.viewTransform.position; - FlowGraphParameters.instance.LatestScale = graphView.viewTransform.scale; + UniFlowSettings.instance.LatestPosition = graphView.viewTransform.position; + UniFlowSettings.instance.LatestScale = graphView.viewTransform.scale; }; nodeCreationRequest += context => @@ -177,16 +177,13 @@ internal void SetupActAsTrigger() private void CreateNodesFromInstance() { - var connectables = Selection.activeGameObject == default || Selection.activeGameObject.scene.IsValid() - ? Enumerable - .Range(0, SceneManager.sceneCount) - .Select(SceneManager.GetSceneAt) - .SelectMany(x => x.GetRootGameObjects()) - .SelectMany(x => x.GetComponentsInChildren()) - .ToArray() - : Selection - .activeGameObject + var connectables = UniFlowSettings.instance.IsPrefabMode + ? UniFlowSettings.instance.SelectedGameObject .GetComponentsInChildren() + .ToArray() + : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) + .GetRootGameObjects() + .SelectMany(x => x.GetComponentsInChildren(true)) .ToArray(); foreach (var connectable in connectables) @@ -225,12 +222,28 @@ private void CreateNodesFromInstance() rootConnectables = new[] {connectables.First()}; } + if (UniFlowSettings.instance.SelectedGameObject != default && !UniFlowSettings.instance.IsPrefabMode) + { + rootConnectables = rootConnectables.Where(x => x is ConnectorBase connector && connector != default && ContainsSelectedGameObjectInConnectableTree(connector)).ToArray(); + } + foreach (var (rootConnectable, index) in rootConnectables.Select((v, i) => (v, i))) { CreateNodeRecursive(rootConnectable, new Vector2Int(0, index)); } } + private static bool ContainsSelectedGameObjectInConnectableTree(ConnectorBase haystack) + { + return haystack + .TargetComponents + .Any( + x => + x.gameObject == UniFlowSettings.instance.SelectedGameObject + || x is ConnectorBase child && child != default && ContainsSelectedGameObjectInConnectableTree(child) + ); + } + private void CreateNodeRecursive(IConnectable connectable, Vector2Int normalizedPosition) { var node = AddNode(connectable.GetType(), connectable, Vector2.zero); @@ -303,4 +316,4 @@ public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAd .ToList(); } } -} +} diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 0c7ca43..ae0888e 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -57,6 +57,12 @@ public void Initialize() private IEdgeConnectorListener EdgeConnectorListener { get; } private const string DefaultTargetGameObjectName = "UniFlowController"; + private static IEnumerable ParameterNamesHideInNode { get; } = new List + { + "actAsTrigger", + "targetComponents", + "targetIds", + }; private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> { @@ -98,7 +104,7 @@ public void ApplyPosition() public void ApplyTargetConnectors() { - if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is ConnectorBase connector)) + if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is ConnectorBase connector) || connector == default) { return; } @@ -134,9 +140,9 @@ private void AddParameters() { var groupId = Undo.GetCurrentGroup(); - if (x.previousValue != default && ConnectableInfo.Connectable != default) + if (x.previousValue != default && ConnectableInfo.Connectable is Component component && component != default) { - Undo.DestroyObjectImmediate(ConnectableInfo.Connectable as Component); + Undo.DestroyObjectImmediate(component); EditorUtility.SetDirty(x.previousValue); } @@ -162,13 +168,21 @@ private void AddParameters() element.Add(field); itemsElement.Add(element); - var innerDividerElement = new VisualElement {name = "divider"}; - innerDividerElement.AddToClassList("horizontal"); - itemsElement.Add(innerDividerElement); + if (ConnectableInfo.ParameterList.Any(x => !ParameterNamesHideInNode.Contains(x.Name))) + { + var innerDividerElement = new VisualElement {name = "divider"}; + innerDividerElement.AddToClassList("horizontal"); + itemsElement.Add(innerDividerElement); + } } foreach (var parameter in ConnectableInfo.ParameterList) { + if (ParameterNamesHideInNode.Contains(parameter.Name)) + { + continue; + } + var element = new VisualElement(); var field = CreateField(ConnectableInfo, parameter); element.Add(field); @@ -295,6 +309,13 @@ private void AddPorts() InputPort = FlowPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi); InputPort.portName = "In"; inputContainer.Add(InputPort); + + foreach (var suppliableParameter in ConnectableInfo.SuppliableParameterList) + { + var suppliedPort = FlowPort.Create(Orientation.Vertical, Direction.Input, Port.Capacity.Multi); + suppliedPort.portName = suppliableParameter.ToString(); + inputContainer.Add(suppliedPort); + } } private static string ToDisplayName(string original) @@ -312,4 +333,4 @@ private static string ToDisplayName(string original) return original.Substring(0, 1).ToUpper() + Regex.Replace(original.Substring(1), "([A-Z]+[a-z])", " $1"); } } -} +} diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 8ce52d8..2891cb0 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -14,31 +14,40 @@ public void Initialize() { styleSheets.Add(AssetReferences.Instance.FlowVisualElement); - Selection.selectionChanged += () => - { - if (FlowEditorWindow.Window != default) - { - if (Contains(Content)) - { - Remove(Content); - } - Load(); - } - }; - var toolbar = new IMGUIContainer( () => { GUILayout.BeginHorizontal(EditorStyles.toolbar); - if (GUILayout.Button($"Save {(FlowGraphParameters.IsPrefabMode ? "Prefab" : "Scenes")}", EditorStyles.toolbarButton)) + if (GUILayout.Button("Load", EditorStyles.toolbarButton)) + { + UniFlowSettings.instance.SelectedGameObject = Selection.activeGameObject; + if (Contains(Content)) + { + Remove(Content); + } + Load(); + } + if (GUILayout.Button("Load All in Scene", EditorStyles.toolbarButton)) + { + UniFlowSettings.instance.SelectedGameObject = null; + if (Contains(Content)) + { + Remove(Content); + } + Load(); + } + + GUILayout.Space(6); + + if (GUILayout.Button($"Save {(UniFlowSettings.instance.IsPrefabMode ? "Prefab" : "Scenes")}", EditorStyles.toolbarButton)) { - if (FlowGraphParameters.IsPrefabMode) + if (UniFlowSettings.instance.IsPrefabMode) { - PrefabUtility.SavePrefabAsset(Selection.activeGameObject); + PrefabUtility.SavePrefabAsset(UniFlowSettings.instance.SelectedGameObject); } - else if (Selection.activeGameObject != default) + else if (UniFlowSettings.instance.SelectedGameObject != default) { - EditorSceneManager.SaveScene(Selection.activeGameObject.scene); + EditorSceneManager.SaveScene(UniFlowSettings.instance.SelectedGameObject.scene); } } @@ -46,8 +55,8 @@ public void Initialize() if (GUILayout.Button("Reset Viewport", EditorStyles.toolbarButton)) { - FlowGraphParameters.instance.LatestPosition = Vector3.zero; - FlowGraphParameters.instance.LatestScale = Vector3.one; + UniFlowSettings.instance.LatestPosition = Vector3.zero; + UniFlowSettings.instance.LatestScale = Vector3.one; Remove(Content); Load(); } @@ -56,6 +65,20 @@ public void Initialize() FlowGraphView.Relocation(true); } + if (UniFlowSettings.instance.SelectedGameObject != default) + { + GUILayout.Space(6); + + if (UniFlowSettings.instance.IsPrefabMode) + { + GUILayout.Label($"[Prefab] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); + } + else + { + GUILayout.Label($"[{UniFlowSettings.instance.SelectedGameObject.scene.name}] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); + } + } + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } @@ -65,6 +88,17 @@ public void Initialize() Load(); } + private static string CreateGameObjectTreeString(Transform transform) + { + if (!transform.gameObject.scene.IsValid()) + { + return AssetDatabase.GetAssetPath(transform.gameObject); + } + + var parent = transform.parent; + return parent == default ? transform.name : $"{CreateGameObjectTreeString(parent)} > {transform.name}"; + } + private void Load() { FlowGraphView = new FlowGraphView From 7693d010880de2a2ac0f54c0c5317d2270c7645d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:47:34 +0900 Subject: [PATCH 128/453] :sprakles: Remove not implemented attribute temporarily --- Assets/Scripts/Connector/Controller/CreateInstance.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs b/Assets/Scripts/Connector/Controller/CreateInstance.cs index d1a3603..44e2a4f 100644 --- a/Assets/Scripts/Connector/Controller/CreateInstance.cs +++ b/Assets/Scripts/Connector/Controller/CreateInstance.cs @@ -1,11 +1,9 @@ using System; -using UniFlow.Connector.Attribute; using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller { - [OutputValue(typeof(GameObject))] [AddComponentMenu("UniFlow/Controller/CreateInstance", (int) ConnectorType.CreateInstance)] public class CreateInstance : ConnectorBase, IValueProvider { From e8373fd725d245f66cc75e1abc7591eac203cc04 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 21:56:39 +0900 Subject: [PATCH 129/453] :clipboard: Bump up v0.1.0-preview.19 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 3c00b3c..d388c9d 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.18", + "version": "0.1.0-preview.19", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From a1ac31cc5328e7937607823f1e28975299c009c6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 23:24:57 +0900 Subject: [PATCH 130/453] :beetle: Avoid NullReferenceException * Throw NullReferenceException caused by targetComponents has missing reference --- Assets/Editor/Scripts/FlowGraphView.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index e194b9a..1cec607 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -237,6 +237,7 @@ private static bool ContainsSelectedGameObjectInConnectableTree(ConnectorBase ha { return haystack .TargetComponents + .Where(x => x != default) .Any( x => x.gameObject == UniFlowSettings.instance.SelectedGameObject From d8d18d83d8ed6dca8f18802f2103f5468ef28c4e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 16 Sep 2019 23:26:07 +0900 Subject: [PATCH 131/453] :clipboard: Open with Unity 2019.2.5f1 --- ProjectSettings/ProjectVersion.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index dbb1604..cfdd6e9 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.4f1 -m_EditorVersionWithRevision: 2019.2.4f1 (c63b2af89a85) +m_EditorVersion: 2019.2.5f1 +m_EditorVersionWithRevision: 2019.2.5f1 (9dace1eed4cc) From e771942e7086136c21a89d16948857544f439a29 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Tue, 17 Sep 2019 04:30:35 +0900 Subject: [PATCH 132/453] :wrench: Fix inconsistent line ending warning --- Assets/Editor/Scripts/SearchWindowProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 21c5ec3..e152920 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -101,4 +101,4 @@ bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, Search return true; } } -} +} From ab6ca0865a02d46f12480af59f1440626566370e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 05:54:31 +0900 Subject: [PATCH 133/453] :sparkles: Change setup timing to Awake instead of Start --- Assets/Scripts/ConnectableBase.cs | 2 +- Assets/Scripts/Connector/Event/LifecycleEvent.cs | 7 +++---- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 3 +-- Assets/Scripts/Connector/Event/TimelineEvent.cs | 4 ++-- Assets/Scripts/ConnectorBase.cs | 4 ++-- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Assets/Scripts/ConnectableBase.cs b/Assets/Scripts/ConnectableBase.cs index 011f7b4..378db21 100644 --- a/Assets/Scripts/ConnectableBase.cs +++ b/Assets/Scripts/ConnectableBase.cs @@ -4,7 +4,7 @@ namespace UniFlow { public abstract class ConnectableBase : MonoBehaviour, IConnectable { - protected virtual void Start() + protected virtual void Awake() { CollectSuppliedValues(); } diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index bf03e66..190ab23 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -32,15 +32,14 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa .Select(_ => Message.Create(this)); } - private void Awake() + protected override void Awake() { + base.Awake(); OnEnableProperty.Value = enabled; } - protected override void Start() + private void Start() { - base.Start(); - StartProperty.Value = true; } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 47afaf1..f1493e7 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -54,9 +54,8 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation private IDictionary PlayingStatuses { get; } = new Dictionary(); - protected override void Start() + private void Start() { - base.Start(); ObserveSimpleAnimation(); } diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 2a4d583..6bdae93 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -71,9 +71,9 @@ private static End EndSignal private ISubject SignalEmittedSubject { get; } = new Subject(); - protected override void Start() + protected override void Awake() { - base.Start(); + base.Awake(); RegisterSignal(); } diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 5be9f49..4b9664d 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -50,9 +50,9 @@ [UsedImplicitly] public virtual bool ActAsTrigger [Inject] private DiContainer Container { get; } - protected override void Start() + protected override void Awake() { - base.Start(); + base.Awake(); if (ActAsTrigger) { ((IConnector) this).Connect(Observable.Return(default)); From c9663698cf717300005621e37b93e05b810f4aa1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 05:56:32 +0900 Subject: [PATCH 134/453] :beetle: Avoid exception --- Assets/Editor/Scripts/FlowGraphView.cs | 8 +++++++- Assets/Scripts/ConnectorBase.cs | 4 ++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 1cec607..86e89e1 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -179,13 +179,14 @@ private void CreateNodesFromInstance() { var connectables = UniFlowSettings.instance.IsPrefabMode ? UniFlowSettings.instance.SelectedGameObject - .GetComponentsInChildren() + .GetComponentsInChildren(true) .ToArray() : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) .GetRootGameObjects() .SelectMany(x => x.GetComponentsInChildren(true)) .ToArray(); + foreach (var connectable in connectables) { if (!DestinationConnectors.ContainsKey(connectable)) @@ -235,6 +236,11 @@ private void CreateNodesFromInstance() private static bool ContainsSelectedGameObjectInConnectableTree(ConnectorBase haystack) { + if (haystack.gameObject == UniFlowSettings.instance.SelectedGameObject) + { + return true; + } + return haystack .TargetComponents .Where(x => x != default) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 4b9664d..aada2e8 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -11,10 +11,10 @@ namespace UniFlow public abstract class ConnectorBase : ConnectableBase, IConnector { [SerializeField] [Tooltip("Specify instances of IEventConnectable directly")] - private List targetComponents = default; + private List targetComponents = new List(); [SerializeField] [Tooltip("Specify identifiers of IEventConnectable that resolve from Zenject.DiContainer")] - private List targetIds = default; + private List targetIds = new List(); [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] protected bool actAsTrigger = false; From 091d13a29b9f0d3053a50ce1600aa9eb61c268fa Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 05:57:11 +0900 Subject: [PATCH 135/453] :sparkles: Support to specify control self instance for activation --- .../Controller/ActivationController.cs | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 13b9f1e..ddf9a9f 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -12,6 +12,7 @@ public class ActivationController : ConnectorBase { [SerializeField] private List targetGameObjects = default; [SerializeField] private List targetMonoBehaviours = default; + [SerializeField] private bool controlSelfInstance = default; [SerializeField] private bool activated = default; [UsedImplicitly] public IEnumerable GameObjects @@ -24,6 +25,11 @@ [UsedImplicitly] public IEnumerable MonoBehaviours get => targetMonoBehaviours; set => targetMonoBehaviours = value.ToList(); } + [UsedImplicitly] public bool ControlSelfInstance + { + get => controlSelfInstance; + set => controlSelfInstance = value; + } [UsedImplicitly] public bool Activated { get => activated; @@ -45,14 +51,17 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); count += monoBehaviours.Count; monoBehaviours.ForEach(x => x.enabled = Activated); - if (gameObject.activeSelf != Activated) + if (ControlSelfInstance) { - count++; - gameObject.SetActive(Activated); + if (gameObject.activeSelf != Activated) + { + count++; + gameObject.SetActive(Activated); + } + var components = GetComponents().Where(x => x.enabled != Activated).ToList(); + count += components.Count; + components.ForEach(x => x.enabled = Activated); } - var components = GetComponents().Where(x => x.enabled != Activated).ToList(); - count += components.Count; - components.ForEach(x => x.enabled = Activated); observer.OnNext(Message.Create(this, count, gameObjects, monoBehaviours)); return Disposable; } From 3fe0197267facd880972d147edb603786c771f60 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 05:58:10 +0900 Subject: [PATCH 136/453] :name_badge: Rename variable --- Assets/Scripts/Receiver/Log.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index a2a7526..79c640a 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -12,10 +12,10 @@ public override void OnReceive(Messages messages) sb.AppendLine($"EventCount: {messages.Count}"); sb.AppendLine("Messages:"); var index = 0; - foreach (var eventMessage in messages) + foreach (var message in messages) { sb.AppendLine($" {index}"); - sb.AppendLine($" Type:\n {eventMessage.ConnectorType}"); + sb.AppendLine($" Type:\n {message.ConnectorType}"); // TODO: データの送り方を考える // sb.AppendLine($" Data:\n {eventMessage.Data?.ToString().Replace("\n", "\n ")}"); index++; From e784004af12d7b51f4f29bc240b47db9faa3b66c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 05:58:28 +0900 Subject: [PATCH 137/453] :wrench: Tweak layout in GraphView --- Assets/Editor/Scripts/ConnectableInfo.cs | 10 ++++++---- Assets/Editor/Scripts/FlowNode.cs | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs b/Assets/Editor/Scripts/ConnectableInfo.cs index 4ecd952..84c67cd 100644 --- a/Assets/Editor/Scripts/ConnectableInfo.cs +++ b/Assets/Editor/Scripts/ConnectableInfo.cs @@ -71,7 +71,7 @@ public static ConnectableInfo Create(Type type, IConnectable instance = default) .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), CollectFields(type) .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() != null && x.GetCustomAttribute() == null) - .Select(x => SuppliableParameter.Create(x.GetCustomAttribute().Types.ToArray())) + .Select(x => SuppliableParameter.Create(x.Name, x.GetCustomAttribute().Types.ToArray())) ); } @@ -120,16 +120,18 @@ public static Parameter Create(Type type, string name, object value) public class SuppliableParameter { - private SuppliableParameter(params Type[] types) + public SuppliableParameter(string name, IEnumerable types) { + Name = name; Types = types; } + public string Name { get; } public IEnumerable Types { get; } - public static SuppliableParameter Create(params Type[] types) + public static SuppliableParameter Create(string name, params Type[] types) { - return new SuppliableParameter(types); + return new SuppliableParameter(name, types); } } } diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index ae0888e..41ca30d 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -313,7 +313,7 @@ private void AddPorts() foreach (var suppliableParameter in ConnectableInfo.SuppliableParameterList) { var suppliedPort = FlowPort.Create(Orientation.Vertical, Direction.Input, Port.Capacity.Multi); - suppliedPort.portName = suppliableParameter.ToString(); + suppliedPort.portName = suppliableParameter.Name; inputContainer.Add(suppliedPort); } } From 8b2e9c05690562633a3deaca3c837e3bd3575c2b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 05:59:53 +0900 Subject: [PATCH 138/453] :sparkles: Change method interface to send last message correctly --- Assets/Scripts/ConnectorBase.cs | 10 +++++----- Assets/Scripts/IConnector.cs | 4 ++-- Assets/Scripts/IMessage.cs | 13 +++++++++---- Assets/Scripts/MessageBase.cs | 2 +- Assets/Scripts/Receiver/Toss.cs | 2 +- 5 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index aada2e8..7c2d5c8 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -55,17 +55,17 @@ protected override void Awake() base.Awake(); if (ActAsTrigger) { - ((IConnector) this).Connect(Observable.Return(default)); + ((IConnector) this).Connect(Observable.Return<(IMessage, Messages)>(default)); } } - void IConnector.Connect(IObservable source) + void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> source) { var observable = source .SelectMany( eventMessages => (this as IConnector) - .OnConnectAsObservable(eventMessages?.LastOrDefault()) - .Select(x => (eventMessages ?? Messages.Create()).Append(x)) + .OnConnectAsObservable(eventMessages.latestMessage) + .Select(x => (latestMessage: x, messages: (eventMessages.massages ?? Messages.Create()).Append(x))) ) .Share(); TargetConnectors @@ -75,7 +75,7 @@ void IConnector.Connect(IObservable source) TargetConnectors .OfType() .ToList() - .ForEach(x => observable.Subscribe(x.OnReceive)); + .ForEach(x => observable.Subscribe(y => x.OnReceive(y.messages))); if (!TargetConnectors.Any()) { diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index a3eac48..06b57da 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -4,7 +4,7 @@ namespace UniFlow { public interface IConnector : IConnectable { - IObservable OnConnectAsObservable(IMessage previousMessage); - void Connect(IObservable source); + IObservable OnConnectAsObservable(IMessage latestMessage); + void Connect(IObservable<(IMessage latestMessage, Messages massages)> source); } } \ No newline at end of file diff --git a/Assets/Scripts/IMessage.cs b/Assets/Scripts/IMessage.cs index 297e291..ef3b1b4 100644 --- a/Assets/Scripts/IMessage.cs +++ b/Assets/Scripts/IMessage.cs @@ -10,16 +10,21 @@ public interface IMessage : IMessage TSender Sender { get; } } + public interface IMessage : IMessage + { + TData Data { get; } + } + public static class MessageExtensions { - public static bool Is(this IMessage message) where TSender : IMessage + public static bool Is(this IMessage message) where TMessage : IMessage { - return message is TSender; + return message is TMessage; } - public static TSender As(this IMessage message) where TSender : class, IMessage + public static TMessage As(this IMessage message) where TMessage : class, IMessage { - return message as TSender; + return message as TMessage; } } } \ No newline at end of file diff --git a/Assets/Scripts/MessageBase.cs b/Assets/Scripts/MessageBase.cs index 5c4aa41..e96c98b 100644 --- a/Assets/Scripts/MessageBase.cs +++ b/Assets/Scripts/MessageBase.cs @@ -2,7 +2,7 @@ namespace UniFlow { - public class MessageBase : IMessage where TSender : IConnectable + public class MessageBase : IMessage where TSender : IConnectable { public ConnectorType ConnectorType { get; private set; } public TSender Sender { get; private set; } diff --git a/Assets/Scripts/Receiver/Toss.cs b/Assets/Scripts/Receiver/Toss.cs index 6f8dc04..4b67c86 100644 --- a/Assets/Scripts/Receiver/Toss.cs +++ b/Assets/Scripts/Receiver/Toss.cs @@ -17,7 +17,7 @@ public override void OnReceive(Messages messages) { if (target != default && target.activeSelf) { - (target.GetComponent() as IConnector)?.Connect(Observable.Return(messages)); + (target.GetComponent() as IConnector)?.Connect(Observable.Return(((IMessage) default, messages))); } } } From 87049e2712f0296ab35bce499bf109386c6922b3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 17 Sep 2019 06:01:30 +0900 Subject: [PATCH 139/453] :clipboard: Bump up version to v0.1.0-preview.20 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index d388c9d..4660a9a 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.19", + "version": "0.1.0-preview.20", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 7825e14a3b29c221bec20761ceb95ca725175c64 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 19:41:08 +0900 Subject: [PATCH 140/453] :beetle: Apply value changes to parent class --- Assets/Editor/Scripts/ConnectableInfo.cs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs b/Assets/Editor/Scripts/ConnectableInfo.cs index 84c67cd..57ee312 100644 --- a/Assets/Editor/Scripts/ConnectableInfo.cs +++ b/Assets/Editor/Scripts/ConnectableInfo.cs @@ -37,11 +37,30 @@ public void ApplyParameter(Parameter parameter) return; } - Type - .GetField(parameter.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? + GetFieldRecursive(Type, parameter.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? .SetValue(Connectable, parameter.Value); } + private static FieldInfo GetFieldRecursive(Type type, string name, BindingFlags bindingFlags) + { + do + { + var fieldInfo = type.GetField(name, bindingFlags); + if (fieldInfo != default) + { + return fieldInfo; + } + + if (type.BaseType == default) + { + break; + } + + type = type.BaseType; + } while (true); + return default; + } + public void ApplyParameters() { if (Connectable == default) From 4a8f7da1edfd3fbef1154f61d1892b6ebd9d6683 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 19:44:46 +0900 Subject: [PATCH 141/453] :sparkles: Reload on back to Edit Mode --- Assets/Editor/Scripts/FlowEditorWindow.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 4c87b56..db0d30a 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; @@ -41,7 +42,6 @@ public static void Open() { GetWindow(); Window.titleContent = new GUIContent("UniFlow Graph"); - } public void ForceRegisterUndo() @@ -70,6 +70,23 @@ private void OnEnable() { Window = this; Undo.undoRedoPerformed += Reload; + EditorApplication.playModeStateChanged += playModeStateChange => + { + switch (playModeStateChange) + { + case PlayModeStateChange.EnteredEditMode: + Reload(); + break; + case PlayModeStateChange.ExitingEditMode: + break; + case PlayModeStateChange.EnteredPlayMode: + break; + case PlayModeStateChange.ExitingPlayMode: + break; + default: + throw new ArgumentOutOfRangeException(nameof(playModeStateChange), playModeStateChange, null); + } + }; Reload(); } From 73c9cbc1d7af84cc48d9b70fc399242ce400bac8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 19:45:28 +0900 Subject: [PATCH 142/453] :wrench: Avoid warning in Rider --- Assets/Editor/Scripts/FlowVisualElement.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 2891cb0..93c4b91 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -69,6 +69,7 @@ public void Initialize() { GUILayout.Space(6); + // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression if (UniFlowSettings.instance.IsPrefabMode) { GUILayout.Label($"[Prefab] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); From ceb416674178b1b70f6b7c9c90c64589bcb5ce29 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 19:45:45 +0900 Subject: [PATCH 143/453] :sparkles: Sort class list in search window --- Assets/Editor/Scripts/SearchWindowProvider.cs | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index e152920..9360404 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -19,6 +19,17 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider private IDictionary SearchTreeGroupEntries { get; } = new Dictionary(); + private static IEnumerable DirectoryOrder { get; } = new[] + { + "Controller", + "Event", + "Comparer", + "Value", + "Logic", + "Receiver", + "Misc", + }; + public void Initialize(FlowGraphView flowGraphView) { FlowGraphView = flowGraphView; @@ -39,18 +50,16 @@ public void Initialize(FlowGraphView flowGraphView) .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectableBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) .Where(x => x.GetCustomAttributes(typeof(AddComponentMenu), false).Any()) .Select(x => (menu: x.GetCustomAttributes(typeof(AddComponentMenu), false).OfType().First(), type: x)) - .OrderBy(x => x.menu.componentMenu) + .Select(x => (x.menu, x.type, entries: x.menu.componentMenu.Split('/').Skip(1).ToArray())) + .Select(x => (x.menu, x.type, x.entries, directory: x.entries.Take(x.entries.Length - 1).Aggregate((a, b) => $"{a}/{b}"))) + .Select(x => (x.menu, x.type, x.entries, x.directory, directoryOrder: DirectoryOrder.Contains(x.directory) ? DirectoryOrder.Select((directory, index) => (directory, index)).First(y => y.directory == x.directory).index : int.MaxValue)) + .OrderBy(x => x.directoryOrder) + .ThenBy(x => x.menu.componentOrder) .ToList() .ForEach( item => { - var (menu, type) = item; - var componentMenuEntries = menu - .componentMenu - .Split('/') - // Ignore first entry `UniFlow` - .Skip(1) - .ToArray(); + var (_, type, componentMenuEntries, _, _) = item; var fullPath = new StringBuilder(); foreach (var (componentMenuEntry, index) in componentMenuEntries.Select((x, i) => (x, i))) { From 87ff59ca87c6fc4250673268944f973f91194705 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 19:48:01 +0900 Subject: [PATCH 144/453] :sparkles: Send message correctly --- Assets/Scripts/ConnectorBase.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 7c2d5c8..20eb474 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -66,8 +66,7 @@ void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> eventMessages => (this as IConnector) .OnConnectAsObservable(eventMessages.latestMessage) .Select(x => (latestMessage: x, messages: (eventMessages.massages ?? Messages.Create()).Append(x))) - ) - .Share(); + ); TargetConnectors .OfType() .ToList() From bfd95d705ff939f97972d7e2927940c5ce56ab96 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 20:40:26 +0900 Subject: [PATCH 145/453] :sparkles: Implement ValueComparer --- Assets/Scripts/Connector/ValueComparer.meta | 3 ++ .../Scripts/Connector/ValueComparer/Bool.cs | 28 ++++++++++ .../Connector/ValueComparer/Bool.cs.meta | 3 ++ .../Connector/ValueComparer/ComparerBase.cs | 52 +++++++++++++++++++ .../ValueComparer/ComparerBase.cs.meta | 3 ++ .../Scripts/Connector/ValueComparer/Enum.cs | 29 +++++++++++ .../Connector/ValueComparer/Enum.cs.meta | 3 ++ .../Scripts/Connector/ValueComparer/Float.cs | 40 ++++++++++++++ .../Connector/ValueComparer/Float.cs.meta | 3 ++ Assets/Scripts/Connector/ValueComparer/Int.cs | 40 ++++++++++++++ .../Connector/ValueComparer/Int.cs.meta | 3 ++ .../Scripts/Connector/ValueComparer/Object.cs | 34 ++++++++++++ .../Connector/ValueComparer/Object.cs.meta | 3 ++ .../Scripts/Connector/ValueComparer/String.cs | 40 ++++++++++++++ .../Connector/ValueComparer/String.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 7 +++ 16 files changed, 294 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueComparer.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/Bool.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/Bool.cs.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/ComparerBase.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/Enum.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/Enum.cs.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/Float.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/Float.cs.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/Int.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/Int.cs.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/Object.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/Object.cs.meta create mode 100644 Assets/Scripts/Connector/ValueComparer/String.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/String.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer.meta b/Assets/Scripts/Connector/ValueComparer.meta new file mode 100644 index 0000000..66f582f --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dd05c638351a47eab94d86260758052a +timeCreated: 1568810234 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Bool.cs b/Assets/Scripts/Connector/ValueComparer/Bool.cs new file mode 100644 index 0000000..5beaba9 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Bool.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + [AddComponentMenu("UniFlow/ValueComparer/Bool", (int) ConnectorType.ValueComparerBool)] + public class Bool : ComparerBase + { + protected override bool Compare(bool compareValue) + { + switch (Operator) + { + case OperatorType.True: + return compareValue; + case OperatorType.False: + return !compareValue; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public enum OperatorType + { + True, + False, + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Bool.cs.meta b/Assets/Scripts/Connector/ValueComparer/Bool.cs.meta new file mode 100644 index 0000000..0783c7e --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Bool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ed64fd013b5a441e9b3c2c65dafaecab +timeCreated: 1568882437 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs new file mode 100644 index 0000000..b9bfa70 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -0,0 +1,52 @@ +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + public abstract class ComparerBase : ConnectorBase + where TOperator : Enum + { + [SerializeField] private TValue value = default; + [SerializeField] private TOperator @operator = default; + + [UsedImplicitly] public TValue Value + { + get => value; + set => this.value = value; + } + [UsedImplicitly] public TOperator Operator + { + get => @operator; + set => @operator = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + if (latestMessage.Is>() && Compare(latestMessage.As>().Value)) + { + return Observable.Return(Message.Create(this)); + } + + return Observable.Empty(); + } + + protected abstract bool Compare(TValue compareValue); + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase> + { + public static Message Create(ComparerBase sender) + { + return Create(ConnectorType.ValueComparerEnum, sender); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta new file mode 100644 index 0000000..fc60e61 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8436b509b98c436f8563a5a1a9621768 +timeCreated: 1568810363 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Enum.cs b/Assets/Scripts/Connector/ValueComparer/Enum.cs new file mode 100644 index 0000000..430548d --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Enum.cs @@ -0,0 +1,29 @@ +using System; + +namespace UniFlow.Connector.ValueComparer +{ + public abstract class Enum : ComparerBase.OperatorType> where TEnum : Enum + { + protected override bool Compare(TEnum compareValue) + { + switch (Operator) + { + case OperatorType.Equal: + return Equals(compareValue, Value); + case OperatorType.NotEqual: + return !Equals(compareValue, Value); + case OperatorType.HasFlag: + return Value.HasFlag(compareValue); + default: + throw new ArgumentOutOfRangeException(); + } + } + + public enum OperatorType + { + Equal, + NotEqual, + HasFlag, + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Enum.cs.meta b/Assets/Scripts/Connector/ValueComparer/Enum.cs.meta new file mode 100644 index 0000000..61e39c7 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Enum.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f5d0824886be45ed953711fa6e921a52 +timeCreated: 1568810293 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Float.cs b/Assets/Scripts/Connector/ValueComparer/Float.cs new file mode 100644 index 0000000..b435443 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Float.cs @@ -0,0 +1,40 @@ +using System; +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + [AddComponentMenu("UniFlow/ValueComparer/Float", (int) ConnectorType.ValueComparerFloat)] + public class Float : ComparerBase + { + protected override bool Compare(float compareValue) + { + switch (Operator) + { + case OperatorType.Equal: + return Mathf.Approximately(Value, compareValue); + case OperatorType.NotEqual: + return !Mathf.Approximately(Value, compareValue); + case OperatorType.Greater: + return compareValue > Value; + case OperatorType.GreaterOrEqual: + return compareValue >= Value; + case OperatorType.Less: + return compareValue < Value; + case OperatorType.LessOrEqual: + return compareValue <= Value; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public enum OperatorType + { + Equal, + NotEqual, + Greater, + GreaterOrEqual, + Less, + LessOrEqual, + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Float.cs.meta b/Assets/Scripts/Connector/ValueComparer/Float.cs.meta new file mode 100644 index 0000000..3bf7949 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Float.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8d6d08a04b8f432c9fad27f8dd57c3c2 +timeCreated: 1568882422 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Int.cs b/Assets/Scripts/Connector/ValueComparer/Int.cs new file mode 100644 index 0000000..9c6b59f --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Int.cs @@ -0,0 +1,40 @@ +using System; +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + [AddComponentMenu("UniFlow/ValueComparer/Int", (int) ConnectorType.ValueComparerInt)] + public class Int : ComparerBase + { + protected override bool Compare(int compareValue) + { + switch (Operator) + { + case OperatorType.Equal: + return compareValue == Value; + case OperatorType.NotEqual: + return compareValue != Value; + case OperatorType.Greater: + return compareValue > Value; + case OperatorType.GreaterOrEqual: + return compareValue >= Value; + case OperatorType.Less: + return compareValue < Value; + case OperatorType.LessOrEqual: + return compareValue <= Value; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public enum OperatorType + { + Equal, + NotEqual, + Greater, + GreaterOrEqual, + Less, + LessOrEqual, + } + } +} diff --git a/Assets/Scripts/Connector/ValueComparer/Int.cs.meta b/Assets/Scripts/Connector/ValueComparer/Int.cs.meta new file mode 100644 index 0000000..97147c6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Int.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 437562923d1344d3984c8db4fff1a095 +timeCreated: 1568810234 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Object.cs b/Assets/Scripts/Connector/ValueComparer/Object.cs new file mode 100644 index 0000000..6c3fd0d --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Object.cs @@ -0,0 +1,34 @@ +using System; +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + [AddComponentMenu("UniFlow/ValueComparer/Object", (int) ConnectorType.ValueComparerObject)] + public class Object : ComparerBase + { + protected override bool Compare(UnityEngine.Object compareValue) + { + switch (Operator) + { + case OperatorType.Equal: + return compareValue == Value; + case OperatorType.NotEqual: + return compareValue != Value; + case OperatorType.Null: + return compareValue == default; + case OperatorType.NotNull: + return compareValue != default; + default: + throw new ArgumentOutOfRangeException(); + } + } + + public enum OperatorType + { + Equal, + NotEqual, + Null, + NotNull, + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Object.cs.meta b/Assets/Scripts/Connector/ValueComparer/Object.cs.meta new file mode 100644 index 0000000..3a848ba --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/Object.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8d5db1e413fa4f35b417693af20ff3b9 +timeCreated: 1568882443 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/String.cs b/Assets/Scripts/Connector/ValueComparer/String.cs new file mode 100644 index 0000000..4aed886 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/String.cs @@ -0,0 +1,40 @@ +using System; +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + [AddComponentMenu("UniFlow/ValueComparer/String", (int) ConnectorType.ValueComparerString)] + public class String : ComparerBase + { + protected override bool Compare(string compareValue) + { + switch (Operator) + { + case OperatorType.Equal: + return compareValue == Value; + case OperatorType.NotEqual: + return compareValue != Value; + case OperatorType.NullOrEmpty: + return string.IsNullOrEmpty(compareValue); + case OperatorType.NotNullOrEmpty: + return !string.IsNullOrEmpty(compareValue); + case OperatorType.NullOrWhitespace: + return string.IsNullOrWhiteSpace(compareValue); + case OperatorType.NotNullOrWhitespace: + return !string.IsNullOrWhiteSpace(compareValue); + default: + throw new ArgumentOutOfRangeException(); + } + } + + public enum OperatorType + { + Equal, + NotEqual, + NullOrEmpty, + NotNullOrEmpty, + NullOrWhitespace, + NotNullOrWhitespace, + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/String.cs.meta b/Assets/Scripts/Connector/ValueComparer/String.cs.meta new file mode 100644 index 0000000..be1506f --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/String.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e6097591daaf4ff1a4470b88a167b073 +timeCreated: 1568882430 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 4789444..4d2e692 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -39,6 +39,13 @@ public enum ConnectorType UnloadScene, UnloadScene_Enum, + ValueComparerBool = 2000, + ValueComparerInt, + ValueComparerFloat, + ValueComparerString, + ValueComparerEnum, + ValueComparerObject, + Timer = 9000, Interval, TimeScaleController, From 0716ddb01784ab3c0e78a350f931c28ca0c5dd94 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 20:40:51 +0900 Subject: [PATCH 146/453] :sparkles: Implement ValueProvider --- Assets/Scripts/Connector/ValueProvider.meta | 3 ++ .../ValueProvider/ValueProviderBase.cs | 32 +++++++++++++++++++ .../ValueProvider/ValueProviderBase.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 2 ++ Assets/Scripts/IValueHolder.cs | 2 +- 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 Assets/Scripts/Connector/ValueProvider.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider.meta b/Assets/Scripts/Connector/ValueProvider.meta new file mode 100644 index 0000000..a5c0e48 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 83cf184f8e6d4a71861bc934fa056d17 +timeCreated: 1568893016 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs new file mode 100644 index 0000000..fc6673f --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs @@ -0,0 +1,32 @@ +using System; +using UniRx; + +namespace UniFlow.Connector.ValueProvider +{ + public abstract class ValueProviderBase : ConnectorBase + { + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return Observable.Return(Message.Create(this, Provide())); + } + + protected abstract TValue Provide(); + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase, TValue>, IValueHolder + { + public static Message Create(ValueProviderBase sender, TValue value) + { + return Create(ConnectorType.ValueProvider, sender, value); + } + + public TValue Value => Data; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta new file mode 100644 index 0000000..71c42b2 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 95c0c457183c4c42ae0506c69581fabe +timeCreated: 1568810182 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 4d2e692..123dac9 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -39,6 +39,8 @@ public enum ConnectorType UnloadScene, UnloadScene_Enum, + ValueProvider = 1000, + ValueComparerBool = 2000, ValueComparerInt, ValueComparerFloat, diff --git a/Assets/Scripts/IValueHolder.cs b/Assets/Scripts/IValueHolder.cs index f4c81f6..41a34d6 100644 --- a/Assets/Scripts/IValueHolder.cs +++ b/Assets/Scripts/IValueHolder.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public interface IValueHolder + public interface IValueHolder : IMessage { T Value { get; } } From e64d75ac63f4efb6aaf72ba143c0f2c581ce2a4d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 20:41:06 +0900 Subject: [PATCH 147/453] :wrench::name_badge: Rename SearchProvider directory name --- Assets/Editor/Scripts/SearchWindowProvider.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 9360404..b266947 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -23,8 +23,8 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider { "Controller", "Event", - "Comparer", - "Value", + "ValueProvider", + "ValueComparer", "Logic", "Receiver", "Misc", From 4e65547859d65d79e8ca978c045fa1641039cbad Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 20:41:48 +0900 Subject: [PATCH 148/453] :truck: Move misc connectors under Connector.Misc --- Assets/Scripts/Connector/Misc.meta | 3 +++ .../Scripts/Connector/{ => Misc}/Receive.cs | 11 ++--------- .../Connector/{ => Misc}/Receive.cs.meta | 0 .../{Receiver => Connector/Misc}/Toss.cs | 19 ++++++++++++++----- .../{Receiver => Connector/Misc}/Toss.cs.meta | 0 5 files changed, 19 insertions(+), 14 deletions(-) create mode 100644 Assets/Scripts/Connector/Misc.meta rename Assets/Scripts/Connector/{ => Misc}/Receive.cs (74%) rename Assets/Scripts/Connector/{ => Misc}/Receive.cs.meta (100%) rename Assets/Scripts/{Receiver => Connector/Misc}/Toss.cs (50%) rename Assets/Scripts/{Receiver => Connector/Misc}/Toss.cs.meta (100%) diff --git a/Assets/Scripts/Connector/Misc.meta b/Assets/Scripts/Connector/Misc.meta new file mode 100644 index 0000000..20686b0 --- /dev/null +++ b/Assets/Scripts/Connector/Misc.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f38f8a8f7028405bab60587ef43f6122 +timeCreated: 1568809846 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Receive.cs b/Assets/Scripts/Connector/Misc/Receive.cs similarity index 74% rename from Assets/Scripts/Connector/Receive.cs rename to Assets/Scripts/Connector/Misc/Receive.cs index 0477ddc..80d0261 100644 --- a/Assets/Scripts/Connector/Receive.cs +++ b/Assets/Scripts/Connector/Misc/Receive.cs @@ -2,7 +2,7 @@ using UniRx; using UnityEngine; -namespace UniFlow.Connector +namespace UniFlow.Connector.Misc { [AddComponentMenu("UniFlow/Misc/Receive", (int) ConnectorType.Receive)] public class Receive : ConnectorBase @@ -20,14 +20,7 @@ public override bool ActAsTrigger public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - observer.OnNext(Message.Create(this)); - return Disposable; - } - ); + return Observable.Return(Message.Create(this)); } private void OnDestroy() diff --git a/Assets/Scripts/Connector/Receive.cs.meta b/Assets/Scripts/Connector/Misc/Receive.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Receive.cs.meta rename to Assets/Scripts/Connector/Misc/Receive.cs.meta diff --git a/Assets/Scripts/Receiver/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs similarity index 50% rename from Assets/Scripts/Receiver/Toss.cs rename to Assets/Scripts/Connector/Misc/Toss.cs index 4b67c86..e38482e 100644 --- a/Assets/Scripts/Receiver/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -1,25 +1,34 @@ +using System; using System.Collections.Generic; -using UniFlow.Connector; using UniRx; using UnityEngine; -namespace UniFlow.Receiver +namespace UniFlow.Connector.Misc { [AddComponentMenu("UniFlow/Misc/Toss", (int) ConnectorType.Toss)] - public class Toss : ReceiverBase + public class Toss : ConnectorBase { [SerializeField] private List targets = default; private IEnumerable Targets => targets; - public override void OnReceive(Messages messages) + public override IObservable OnConnectAsObservable(IMessage latestMessage) { foreach (var target in Targets) { if (target != default && target.activeSelf) { - (target.GetComponent() as IConnector)?.Connect(Observable.Return(((IMessage) default, messages))); + (target.GetComponent() as IConnector)?.Connect(Observable.Return(((IMessage) default, Messages.Create()))); } } + return Observable.Return(Message.Create(this)); + } + + public class Message : MessageBase + { + public static Message Create(Toss sender) + { + return Create(ConnectorType.Toss, sender); + } } } } \ No newline at end of file diff --git a/Assets/Scripts/Receiver/Toss.cs.meta b/Assets/Scripts/Connector/Misc/Toss.cs.meta similarity index 100% rename from Assets/Scripts/Receiver/Toss.cs.meta rename to Assets/Scripts/Connector/Misc/Toss.cs.meta From 2ea0df6f6fee4df6116feded762111d5d6c18210 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 20:42:19 +0900 Subject: [PATCH 149/453] :sparkles: Tweak observable creation --- .../Controller/ActivationController.cs | 73 ++++++++++++------- .../Connector/Controller/AnimatorTrigger.cs | 20 ++--- .../Connector/Controller/AudioController.cs | 20 ++--- .../Connector/Controller/CreateInstance.cs | 24 +++--- .../Connector/Controller/DestroyInstance.cs | 26 ++++--- .../Controller/MoveParentTransform.cs | 20 ++--- .../Controller/PlayableController.cs | 20 ++--- .../Controller/RaycastTargetController.cs | 20 ++--- .../Controller/RaycasterController.cs | 20 ++--- .../Controller/SimpleAnimationController.cs | 23 +++--- 10 files changed, 155 insertions(+), 111 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index ddf9a9f..81d7893 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -40,32 +40,53 @@ [UsedImplicitly] public bool Activated public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - var count = 0; - var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); - count += gameObjects.Count; - gameObjects.ForEach(x => x.SetActive(Activated)); - var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); - count += monoBehaviours.Count; - monoBehaviours.ForEach(x => x.enabled = Activated); - if (ControlSelfInstance) - { - if (gameObject.activeSelf != Activated) - { - count++; - gameObject.SetActive(Activated); - } - var components = GetComponents().Where(x => x.enabled != Activated).ToList(); - count += components.Count; - components.ForEach(x => x.enabled = Activated); - } - observer.OnNext(Message.Create(this, count, gameObjects, monoBehaviours)); - return Disposable; - } - ); + var count = 0; + var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); + count += gameObjects.Count; + gameObjects.ForEach(x => x.SetActive(Activated)); + var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); + count += monoBehaviours.Count; + monoBehaviours.ForEach(x => x.enabled = Activated); + // ReSharper disable once InvertIf + if (ControlSelfInstance) + { + if (gameObject.activeSelf != Activated) + { + count++; + gameObject.SetActive(Activated); + } + var components = GetComponents().Where(x => x.enabled != Activated).ToList(); + count += components.Count; + components.ForEach(x => x.enabled = Activated); + } + + return Observable.Return(Message.Create(this, count, gameObjects, monoBehaviours)); +// return Observable +// .Create( +// observer => +// { +// var count = 0; +// var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); +// count += gameObjects.Count; +// gameObjects.ForEach(x => x.SetActive(Activated)); +// var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); +// count += monoBehaviours.Count; +// monoBehaviours.ForEach(x => x.enabled = Activated); +// if (ControlSelfInstance) +// { +// if (gameObject.activeSelf != Activated) +// { +// count++; +// gameObject.SetActive(Activated); +// } +// var components = GetComponents().Where(x => x.enabled != Activated).ToList(); +// count += components.Count; +// components.ForEach(x => x.enabled = Activated); +// } +// observer.OnNext(Message.Create(this, count, gameObjects, monoBehaviours)); +// return Disposable; +// } +// ); } private void OnDestroy() diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index af227fe..59d054f 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -30,15 +30,17 @@ [UsedImplicitly] public string TriggerName public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - Animator.SetTrigger(TriggerId); - observer.OnNext(Message.Create(this)); - return Disposable; - } - ); + Animator.SetTrigger(TriggerId); + return Observable.Return(Message.Create(this)); +// return Observable +// .Create( +// observer => +// { +// Animator.SetTrigger(TriggerId); +// observer.OnNext(Message.Create(this)); +// return Disposable; +// } +// ); } private void OnDestroy() diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 16282bf..7547e3a 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -40,15 +40,17 @@ [UsedImplicitly] public AudioSource AudioSource public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - InvokeAudioSourceMethod(); - observer.OnNext(Message.Create(this)); - return Disposable; - } - ); + InvokeAudioSourceMethod(); + return Observable.Return(Message.Create(this)); +// return Observable +// .Create( +// observer => +// { +// InvokeAudioSourceMethod(); +// observer.OnNext(Message.Create(this)); +// return Disposable; +// } +// ); } private void InvokeAudioSourceMethod() diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs b/Assets/Scripts/Connector/Controller/CreateInstance.cs index 44e2a4f..074bdeb 100644 --- a/Assets/Scripts/Connector/Controller/CreateInstance.cs +++ b/Assets/Scripts/Connector/Controller/CreateInstance.cs @@ -18,16 +18,20 @@ public class CreateInstance : ConnectorBase, IValueProvider public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - var go = Instantiate(Source, Parent); - GameObjectSubject.OnNext(go); - observer.OnNext(Message.Create(this, go)); - return Disposable; - } - ); + var go = Instantiate(Source, Parent); + GameObjectSubject.OnNext(go); + return Observable.Return(Message.Create(this, go)); + +// return Observable +// .Create( +// observer => +// { +// var go = Instantiate(Source, Parent); +// GameObjectSubject.OnNext(go); +// observer.OnNext(Message.Create(this, go)); +// return Disposable; +// } +// ); } public class Message : MessageBase, IValueHolder diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs index d97aa7c..2baafae 100644 --- a/Assets/Scripts/Connector/Controller/DestroyInstance.cs +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -29,17 +29,21 @@ [UsedImplicitly] public IEnumerable GameObjects public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - var targets = Components.Concat(GameObjects).ToList(); - var count = targets.Count; - targets.ToList().ForEach(Destroy); - observer.OnNext(Message.Create(this, count)); - return Disposable; - } - ); + var targets = Components.Concat(GameObjects).ToList(); + var count = targets.Count; + targets.ToList().ForEach(Destroy); + return Observable.Return(Message.Create(this, count)); +// return Observable +// .Create( +// observer => +// { +// var targets = Components.Concat(GameObjects).ToList(); +// var count = targets.Count; +// targets.ToList().ForEach(Destroy); +// observer.OnNext(Message.Create(this, count)); +// return Disposable; +// } +// ); } private void OnDestroy() diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 17f6570..2f4dfaf 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -47,15 +47,17 @@ protected override void CollectSuppliedValues() public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - Transform.SetParent(ParentTransform, WorldPositionStays); - observer.OnNext(Message.Create(this, Transform)); - return Disposable; - } - ); + Transform.SetParent(ParentTransform, WorldPositionStays); + return Observable.Return(Message.Create(this, Transform)); +// return Observable +// .Create( +// observer => +// { +// Transform.SetParent(ParentTransform, WorldPositionStays); +// observer.OnNext(Message.Create(this, Transform)); +// return Disposable; +// } +// ); } private void OnDestroy() diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 56164a5..3bdf8a8 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -41,15 +41,17 @@ [UsedImplicitly] public PlayableDirector PlayableDirector public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - InvokePlayableDirectorMethod(); - observer.OnNext(Message.Create(this)); - return Disposable; - } - ); + InvokePlayableDirectorMethod(); + return Observable.Return(Message.Create(this)); +// return Observable +// .Create( +// observer => +// { +// InvokePlayableDirectorMethod(); +// observer.OnNext(Message.Create(this)); +// return Disposable; +// } +// ); } private void InvokePlayableDirectorMethod() diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 9b8986a..8557301 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -41,15 +41,17 @@ [UsedImplicitly] public IEnumerable Collider2Ds public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - var count = HandleActivation(); - observer.OnNext(Message.Create(this, count)); - return Disposable; - } - ); + var count = HandleActivation(); + return Observable.Return(Message.Create(this, count)); +// return Observable +// .Create( +// observer => +// { +// var count = HandleActivation(); +// observer.OnNext(Message.Create(this, count)); +// return Disposable; +// } +// ); } private int HandleActivation() diff --git a/Assets/Scripts/Connector/Controller/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs index 005e23f..a3f0183 100644 --- a/Assets/Scripts/Connector/Controller/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -29,15 +29,17 @@ [UsedImplicitly] private IEnumerable Raycasters public override IObservable OnConnectAsObservable(IMessage latestMessage) { - return Observable - .Create( - observer => - { - var count = HandleActivation(); - observer.OnNext(Message.Create(this, count)); - return Disposable; - } - ); + var count = HandleActivation(); + return Observable.Return(Message.Create(this, count)); +// return Observable +// .Create( +// observer => +// { +// var count = HandleActivation(); +// observer.OnNext(Message.Create(this, count)); +// return Disposable; +// } +// ); } private int HandleActivation() diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 5208523..b75e3bc 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -89,19 +89,22 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa // UpdateMode = animatorUpdateModeHolder.Value; // } - return Observable - .Create( - observer => - { - InvokeSimpleAnimationMethod(); - observer.OnNext(Message.Create(this)); - return Disposable; - } - ); + InvokeSimpleAnimationMethod(); + return Observable.Return(Message.Create(this)); +// return Observable +// .Create( +// observer => +// { +// InvokeSimpleAnimationMethod(); +// observer.OnNext(Message.Create(this)); +// return Disposable; +// } +// ); } - private void Awake() + protected override void Awake() { + base.Awake(); // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. if (AnimationClip != default && Animator != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) From 37d8629bb87af6ff7a9e0df3f5f3a42e6db4c84e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 20:42:31 +0900 Subject: [PATCH 150/453] :wrench: Avoid warning --- Assets/Scripts/Connector/Event/AnimationEvent.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 4227f9f..cf977bc 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -81,8 +81,9 @@ public void Dispatch(UnityEngine.AnimationEvent animationEvent) Subject.OnNext(animationEvent); } - private void Awake() + protected override void Awake() { + base.Awake(); // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. if (AnimationClip != default && Animator == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) From 4c2ec52d93fee158843cd60641189763242e6f6f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 21:21:33 +0900 Subject: [PATCH 151/453] :fire: Remove unnecessary base types * Receiver act as Connector * Remove IConnectable, ConnectableBase --- Assets/Editor/Scripts/ConnectableInfo.cs.meta | 3 - .../{ConnectableInfo.cs => ConnectorInfo.cs} | 26 +++---- Assets/Editor/Scripts/ConnectorInfo.cs.meta | 11 +++ Assets/Editor/Scripts/FlowEditorWindow.cs | 6 +- Assets/Editor/Scripts/FlowGraphView.cs | 26 +++---- Assets/Editor/Scripts/FlowNode.cs | 70 +++++++++---------- Assets/Editor/Scripts/SearchWindowProvider.cs | 8 +-- Assets/Scripts/ConnectableBase.cs | 26 ------- Assets/Scripts/ConnectableBase.cs.meta | 3 - Assets/Scripts/ConnectorBase.cs | 59 ++++++++++------ Assets/Scripts/IConnectable.cs | 6 -- Assets/Scripts/IConnectable.cs.meta | 3 - Assets/Scripts/IConnector.cs | 2 +- Assets/Scripts/IReceiver.cs | 2 +- Assets/Scripts/MessageBase.cs | 4 +- Assets/Scripts/ReceiverBase.cs | 14 +++- 16 files changed, 133 insertions(+), 136 deletions(-) delete mode 100644 Assets/Editor/Scripts/ConnectableInfo.cs.meta rename Assets/Editor/Scripts/{ConnectableInfo.cs => ConnectorInfo.cs} (78%) create mode 100644 Assets/Editor/Scripts/ConnectorInfo.cs.meta delete mode 100644 Assets/Scripts/ConnectableBase.cs delete mode 100644 Assets/Scripts/ConnectableBase.cs.meta delete mode 100644 Assets/Scripts/IConnectable.cs delete mode 100644 Assets/Scripts/IConnectable.cs.meta diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs.meta b/Assets/Editor/Scripts/ConnectableInfo.cs.meta deleted file mode 100644 index c6b1eb6..0000000 --- a/Assets/Editor/Scripts/ConnectableInfo.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 96538b1e78274531a60e0f9694a342da -timeCreated: 1566907405 \ No newline at end of file diff --git a/Assets/Editor/Scripts/ConnectableInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs similarity index 78% rename from Assets/Editor/Scripts/ConnectableInfo.cs rename to Assets/Editor/Scripts/ConnectorInfo.cs index 57ee312..e1edeed 100644 --- a/Assets/Editor/Scripts/ConnectableInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -9,12 +9,12 @@ namespace UniFlow.Editor { [Serializable] - public class ConnectableInfo + public class ConnectorInfo { - private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) + private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) { GameObject = gameObject; - Connectable = connectable; + Connector = connector; Type = type; Name = name; parameterList = parameters.ToList(); @@ -22,7 +22,7 @@ private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type ty } public GameObject GameObject { get; set; } - public IConnectable Connectable { get; set; } + public IConnector Connector { get; set; } public Type Type { get; } public string Name { get; } [SerializeField] private List parameterList = default; @@ -32,13 +32,13 @@ private ConnectableInfo(GameObject gameObject, IConnectable connectable, Type ty public void ApplyParameter(Parameter parameter) { - if (Connectable == default) + if (Connector == default) { return; } GetFieldRecursive(Type, parameter.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? - .SetValue(Connectable, parameter.Value); + .SetValue(Connector, parameter.Value); } private static FieldInfo GetFieldRecursive(Type type, string name, BindingFlags bindingFlags) @@ -63,7 +63,7 @@ private static FieldInfo GetFieldRecursive(Type type, string name, BindingFlags public void ApplyParameters() { - if (Connectable == default) + if (Connector == default) { return; } @@ -72,13 +72,13 @@ public void ApplyParameters() } [PublicAPI] - public static ConnectableInfo Create(IConnectable instance) + public static ConnectorInfo Create(IConnector instance) { return Create(instance.GetType(), instance); } [PublicAPI] - public static ConnectableInfo Create(Type type, IConnectable instance = default) + public static ConnectorInfo Create(Type type, IConnector instance = default) { return Create( ((Component) instance)?.gameObject, @@ -94,10 +94,10 @@ public static ConnectableInfo Create(Type type, IConnectable instance = default) ); } - private static FieldInfo[] CollectFields(Type type) + private static IEnumerable CollectFields(Type type) { var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - if (typeof(IConnectable).IsAssignableFrom(type.BaseType)) + if (typeof(IConnector).IsAssignableFrom(type.BaseType)) { fields = fields.Concat(CollectFields(type.BaseType)).ToArray(); } @@ -106,9 +106,9 @@ private static FieldInfo[] CollectFields(Type type) } [PublicAPI] - public static ConnectableInfo Create(GameObject gameObject, IConnectable instance, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) + public static ConnectorInfo Create(GameObject gameObject, IConnector instance, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) { - return new ConnectableInfo(gameObject, instance, type, name, parameters, suppliableParameters); + return new ConnectorInfo(gameObject, instance, type, name, parameters, suppliableParameters); } [Serializable] diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs.meta b/Assets/Editor/Scripts/ConnectorInfo.cs.meta new file mode 100644 index 0000000..d2159a1 --- /dev/null +++ b/Assets/Editor/Scripts/ConnectorInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 832d12247ef4b47eab684af7034e3c6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index db0d30a..e37ac53 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -32,10 +32,10 @@ public class FlowEditorWindow : EditorWindow internal FlowGraphView FlowGraphView { get; private set; } - [SerializeField] private List connectableInfoList = new List(); + [SerializeField] private List connectableInfoList = new List(); [SerializeField] [UsedImplicitly] private int counter = default; - public IList ConnectableInfoList => connectableInfoList; + public IList ConnectableInfoList => connectableInfoList; [MenuItem("Window/UniFlow/Open UniFlow Graph")] public static void Open() @@ -54,7 +54,7 @@ private void Reload() AssetReferences.Reload(); rootVisualElement.Clear(); - connectableInfoList = new List(); + connectableInfoList = new List(); var flowVisualElement = new FlowVisualElement { name = typeof(FlowVisualElement).Name, diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 86e89e1..b83b6f7 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -11,9 +11,9 @@ namespace UniFlow.Editor { public class FlowGraphView : GraphView { - private IDictionary> DestinationConnectors { get; } = new Dictionary>(); - private IDictionary> SourceConnectors { get; } = new Dictionary>(); - private IDictionary RenderedNodes { get; } = new Dictionary(); + private IDictionary> DestinationConnectors { get; } = new Dictionary>(); + private IDictionary> SourceConnectors { get; } = new Dictionary>(); + private IDictionary RenderedNodes { get; } = new Dictionary(); private IDictionary NormalizedPositionDictionary { get; } = new Dictionary(); private SearchWindowProvider SearchWindowProvider { get; set; } private EdgeConnectorListener EdgeConnectorListener { get; set; } @@ -171,19 +171,19 @@ internal void SetupActAsTrigger() { this.Query() .Children() - .Where(x => x.ConnectableInfo.Connectable is ConnectorBase) - .ForEach(x => ((ConnectorBase) x.ConnectableInfo.Connectable).ActAsTrigger = (x.InputPort.connections == null || !x.InputPort.connections.Any())); + .Where(x => x.ConnectorInfo.Connector is ConnectorBase) + .ForEach(x => ((ConnectorBase) x.ConnectorInfo.Connector).ActAsTrigger = (x.InputPort.connections == null || !x.InputPort.connections.Any())); } private void CreateNodesFromInstance() { var connectables = UniFlowSettings.instance.IsPrefabMode ? UniFlowSettings.instance.SelectedGameObject - .GetComponentsInChildren(true) + .GetComponentsInChildren(true) .ToArray() : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) .GetRootGameObjects() - .SelectMany(x => x.GetComponentsInChildren(true)) + .SelectMany(x => x.GetComponentsInChildren(true)) .ToArray(); @@ -191,10 +191,10 @@ private void CreateNodesFromInstance() { if (!DestinationConnectors.ContainsKey(connectable)) { - DestinationConnectors[connectable] = new List(); + DestinationConnectors[connectable] = new List(); } - var connector = connectable as ConnectorBase; + var connector = connectable; if (connector == default || connector.TargetComponents == null) { continue; @@ -209,7 +209,7 @@ private void CreateNodesFromInstance() if (!SourceConnectors.ContainsKey(targetConnector)) { - SourceConnectors[targetConnector] = new List(); + SourceConnectors[targetConnector] = new List(); } DestinationConnectors[connectable].Add(targetConnector); @@ -251,7 +251,7 @@ private static bool ContainsSelectedGameObjectInConnectableTree(ConnectorBase ha ); } - private void CreateNodeRecursive(IConnectable connectable, Vector2Int normalizedPosition) + private void CreateNodeRecursive(IConnector connectable, Vector2Int normalizedPosition) { var node = AddNode(connectable.GetType(), connectable, Vector2.zero); NormalizedPositionDictionary[node] = normalizedPosition; @@ -290,9 +290,9 @@ private void CreateEdges() } } - public FlowNode AddNode(Type connectableType, IConnectable connectableInstance, Vector2 position) + public FlowNode AddNode(Type connectableType, IConnector connectableInstance, Vector2 position) { - var connectableInfo = ConnectableInfo.Create(connectableType, connectableInstance); + var connectableInfo = ConnectorInfo.Create(connectableType, connectableInstance); FlowEditorWindow.Window.ConnectableInfoList.Add(connectableInfo); var node = new FlowNode(connectableInfo, EdgeConnectorListener); node.Initialize(); diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 41ca30d..b820f86 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -13,16 +13,16 @@ namespace UniFlow.Editor { public class FlowNode : Node, IRemovableElement { - public FlowNode(ConnectableInfo connectableInfo, IEdgeConnectorListener edgeConnectorListener) + public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener) { - ConnectableInfo = connectableInfo; + ConnectorInfo = connectorInfo; EdgeConnectorListener = edgeConnectorListener; } public void Initialize() { - name = ConnectableInfo.Name; - title = ConnectableInfo.Name; + name = ConnectorInfo.Name; + title = ConnectorInfo.Name; styleSheets.Add(AssetReferences.Instance.FlowNode); capabilities = Capabilities.Selectable | @@ -34,14 +34,14 @@ public void Initialize() Capabilities.Ascendable | Capabilities.Renamable; - if (ConnectableInfo.GameObject == default) + if (ConnectorInfo.GameObject == default) { - ConnectableInfo.GameObject = DeterminateGameObject(); + ConnectorInfo.GameObject = DeterminateGameObject(); } - if (ConnectableInfo.Connectable == default) + if (ConnectorInfo.Connector == default) { - ConnectableInfo.Connectable = Undo.AddComponent(ConnectableInfo.GameObject, ConnectableInfo.Type) as IConnectable; + ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; } AddParameters(); @@ -52,7 +52,7 @@ public void Initialize() public Port InputPort { get; private set; } public Port OutputPort { get; private set; } - internal ConnectableInfo ConnectableInfo { get; } + internal ConnectorInfo ConnectorInfo { get; } private IEdgeConnectorListener EdgeConnectorListener { get; } @@ -64,7 +64,7 @@ public void Initialize() "targetIds", }; - private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> + private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> { {typeof(string), CreateBindableElement}, {typeof(int), CreateBindableElement}, @@ -76,7 +76,7 @@ public void Initialize() void IRemovableElement.RemoveFromGraphView() { - if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is Component component)) + if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is Component component)) { return; } @@ -87,12 +87,12 @@ void IRemovableElement.RemoveFromGraphView() public Vector2 GetRecordedPosition() { - return ((ConnectableBase) ConnectableInfo.Connectable).FlowGraphNodePosition; + return ((ConnectorBase) ConnectorInfo.Connector).FlowGraphNodePosition; } public void ApplyPosition() { - if (!(ConnectableInfo.Connectable is ConnectableBase connectable) || connectable == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) + if (!(ConnectorInfo.Connector is ConnectorBase connectable) || connectable == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) { return; } @@ -104,7 +104,7 @@ public void ApplyPosition() public void ApplyTargetConnectors() { - if (ConnectableInfo.Connectable == default || !(ConnectableInfo.Connectable is ConnectorBase connector) || connector == default) + if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is ConnectorBase connector) || connector == default) { return; } @@ -114,8 +114,8 @@ public void ApplyTargetConnectors() .connections .Select(x => x.input.node as FlowNode) .Where(x => x != default) - .Select(x => x.ConnectableInfo.Connectable) - .OfType(); + .Select(x => x.ConnectorInfo.Connector) + .OfType(); EditorUtility.SetDirty(connector); } @@ -134,13 +134,13 @@ private void AddParameters() { var element = new VisualElement(); - var field = new ObjectField("GameObject") {value = ConnectableInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; + var field = new ObjectField("GameObject") {value = ConnectorInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; field.RegisterValueChangedCallback( x => { var groupId = Undo.GetCurrentGroup(); - if (x.previousValue != default && ConnectableInfo.Connectable is Component component && component != default) + if (x.previousValue != default && ConnectorInfo.Connector is Component component && component != default) { Undo.DestroyObjectImmediate(component); EditorUtility.SetDirty(x.previousValue); @@ -148,9 +148,9 @@ private void AddParameters() if (x.newValue != default && x.newValue is GameObject newGameObject) { - ConnectableInfo.GameObject = newGameObject; - ConnectableInfo.Connectable = Undo.AddComponent(ConnectableInfo.GameObject, ConnectableInfo.Type) as IConnectable; - ConnectableInfo.ApplyParameters(); + ConnectorInfo.GameObject = newGameObject; + ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; + ConnectorInfo.ApplyParameters(); ApplyTargetConnectors(); InputPort?.connections.Select(y => y.output.node).OfType().ToList().ForEach(y => y.ApplyTargetConnectors()); EditorUtility.SetDirty(x.newValue); @@ -168,7 +168,7 @@ private void AddParameters() element.Add(field); itemsElement.Add(element); - if (ConnectableInfo.ParameterList.Any(x => !ParameterNamesHideInNode.Contains(x.Name))) + if (ConnectorInfo.ParameterList.Any(x => !ParameterNamesHideInNode.Contains(x.Name))) { var innerDividerElement = new VisualElement {name = "divider"}; innerDividerElement.AddToClassList("horizontal"); @@ -176,7 +176,7 @@ private void AddParameters() } } - foreach (var parameter in ConnectableInfo.ParameterList) + foreach (var parameter in ConnectorInfo.ParameterList) { if (ParameterNamesHideInNode.Contains(parameter.Name)) { @@ -184,7 +184,7 @@ private void AddParameters() } var element = new VisualElement(); - var field = CreateField(ConnectableInfo, parameter); + var field = CreateField(ConnectorInfo, parameter); element.Add(field); itemsElement.Add(element); } @@ -193,7 +193,7 @@ private void AddParameters() contentsElement.Add(parametersElement); } - private static VisualElement CreateField(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) + private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) { // Generic types field only be rendered by PropertyField if ( @@ -204,12 +204,12 @@ private static VisualElement CreateField(ConnectableInfo connectableInfo, Connec ) ) { - if (connectableInfo.GameObject == default || connectableInfo.Connectable == default) + if (connectorInfo.GameObject == default || connectorInfo.Connector == default) { return null; } - var serializedObject = new SerializedObject(connectableInfo.Connectable as Component); + var serializedObject = new SerializedObject(connectorInfo.Connector as Component); var field = new PropertyField(serializedObject.FindProperty(parameter.Name), ToDisplayName(parameter.Name)); field.Bind(serializedObject); return field; @@ -223,9 +223,9 @@ private static VisualElement CreateField(ConnectableInfo connectableInfo, Connec x => { parameter.Value = x.newValue; - Undo.RecordObject(connectableInfo.Connectable as Component, $"Change {connectableInfo.Name}.{parameter.Name}"); - connectableInfo.ApplyParameter(parameter); - EditorUtility.SetDirty(connectableInfo.Connectable as Component); + Undo.RecordObject(connectorInfo.Connector as Component, $"Change {connectorInfo.Name}.{parameter.Name}"); + connectorInfo.ApplyParameter(parameter); + EditorUtility.SetDirty(connectorInfo.Connector as Component); } ); return field; @@ -238,10 +238,10 @@ private static VisualElement CreateField(ConnectableInfo connectableInfo, Connec fieldType = typeof(Object); } - return CreateFieldFunctions[fieldType](connectableInfo, parameter); + return CreateFieldFunctions[fieldType](connectorInfo, parameter); } - private static BindableElement CreateBindableElement(ConnectableInfo connectableInfo, ConnectableInfo.Parameter parameter) where TResult : BaseField, new() + private static BindableElement CreateBindableElement(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) where TResult : BaseField, new() { var field = new TResult { @@ -260,7 +260,7 @@ private static VisualElement CreateField(ConnectableInfo connectableInfo, Connec // 直接 Component 監視させちゃう? Undo.RecordObject(FlowEditorWindow.Window, "Change Value"); parameter.Value = x.newValue; - connectableInfo.ApplyParameter(parameter); + connectorInfo.ApplyParameter(parameter); FlowEditorWindow.Window.ForceRegisterUndo(); } ); @@ -295,7 +295,7 @@ private static GameObject DeterminateGameObject() private void AddPorts() { - if (typeof(IConnector).IsAssignableFrom(ConnectableInfo.Type)) + if (typeof(IConnector).IsAssignableFrom(ConnectorInfo.Type)) { OutputPort = FlowPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, EdgeConnectorListener); OutputPort.portName = "Out"; @@ -310,7 +310,7 @@ private void AddPorts() InputPort.portName = "In"; inputContainer.Add(InputPort); - foreach (var suppliableParameter in ConnectableInfo.SuppliableParameterList) + foreach (var suppliableParameter in ConnectorInfo.SuppliableParameterList) { var suppliedPort = FlowPort.Create(Orientation.Vertical, Direction.Input, Port.Capacity.Multi); suppliedPort.portName = suppliableParameter.Name; diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index b266947..b0c6757 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -47,7 +47,7 @@ public void Initialize(FlowGraphView flowGraphView) .CurrentDomain .GetAssemblies() .SelectMany(x => x.GetTypes()) - .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectableBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) + .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectorBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) .Where(x => x.GetCustomAttributes(typeof(AddComponentMenu), false).Any()) .Select(x => (menu: x.GetCustomAttributes(typeof(AddComponentMenu), false).OfType().First(), type: x)) .Select(x => (x.menu, x.type, entries: x.menu.componentMenu.Split('/').Skip(1).ToArray())) @@ -90,7 +90,7 @@ List ISearchWindowProvider.CreateSearchTree(SearchWindowContext bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) { - if (!typeof(IConnectable).IsAssignableFrom((Type) searchTreeEntry.userData)) + if (!typeof(IConnector).IsAssignableFrom((Type) searchTreeEntry.userData)) { return false; } @@ -100,9 +100,9 @@ bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, Search if (FlowPort != default) { FlowGraphView.AddEdge(FlowPort, (FlowPort) node.InputPort); - if (FlowPort.node is FlowNode targetFlowNode && targetFlowNode.ConnectableInfo.Connectable is ConnectorBase targetConnector) + if (FlowPort.node is FlowNode targetFlowNode && targetFlowNode.ConnectorInfo.Connector is ConnectorBase targetConnector) { - targetConnector.TargetComponents = new List {node.ConnectableInfo.Connectable as ConnectableBase}; + targetConnector.TargetComponents = new List {node.ConnectorInfo.Connector as ConnectorBase}; } } FlowGraphView.SetupActAsTrigger(); diff --git a/Assets/Scripts/ConnectableBase.cs b/Assets/Scripts/ConnectableBase.cs deleted file mode 100644 index 378db21..0000000 --- a/Assets/Scripts/ConnectableBase.cs +++ /dev/null @@ -1,26 +0,0 @@ -using UnityEngine; - -namespace UniFlow -{ - public abstract class ConnectableBase : MonoBehaviour, IConnectable - { - protected virtual void Awake() - { - CollectSuppliedValues(); - } - - protected virtual void CollectSuppliedValues() - { - // Do nothing - } - -#if UNITY_EDITOR - [SerializeField] [HideInInspector] private Vector2 flowGraphNodePosition = default; - public Vector2 FlowGraphNodePosition - { - get => flowGraphNodePosition; - set => flowGraphNodePosition = value; - } -#endif - } -} \ No newline at end of file diff --git a/Assets/Scripts/ConnectableBase.cs.meta b/Assets/Scripts/ConnectableBase.cs.meta deleted file mode 100644 index dae6374..0000000 --- a/Assets/Scripts/ConnectableBase.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: b8307bb9bce142c4a70c4db7e0e4c45b -timeCreated: 1562767619 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 20eb474..18dc5b3 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -8,27 +8,38 @@ namespace UniFlow { - public abstract class ConnectorBase : ConnectableBase, IConnector + public abstract class ConnectorBase : MonoBehaviour, IConnector { - [SerializeField] [Tooltip("Specify instances of IEventConnectable directly")] - private List targetComponents = new List(); +#if UNITY_EDITOR + [SerializeField] [HideInInspector] private Vector2 flowGraphNodePosition = default; + public Vector2 FlowGraphNodePosition + { + get => flowGraphNodePosition; + set => flowGraphNodePosition = value; + } +#endif + + [SerializeField] [Tooltip("Specify instances of IEventConnector directly")] + private List targetComponents = new List(); - [SerializeField] [Tooltip("Specify identifiers of IEventConnectable that resolve from Zenject.DiContainer")] + [SerializeField] [Tooltip("Specify identifiers of IEventConnector that resolve from Zenject.DiContainer")] private List targetIds = new List(); [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] protected bool actAsTrigger = false; - private IEnumerable TargetConnectors => - new List() - .Concat(targetComponents ?? new List()) - .Concat((targetIds ?? new List()).SelectMany(x => Container?.ResolveIdAll(x))) + protected Messages Messages { get; private set; } + + protected virtual IEnumerable TargetConnectors => + new List() + .Concat(targetComponents ?? new List()) + .Concat((targetIds ?? new List()).SelectMany(x => Container?.ResolveIdAll(x))) .Where(x => !ReferenceEquals(x, this)) .ToArray(); #if UNITY_EDITOR [UsedImplicitly] - public IEnumerable TargetComponents + public IEnumerable TargetComponents { get => targetComponents; set => targetComponents = value.ToList(); @@ -50,9 +61,9 @@ [UsedImplicitly] public virtual bool ActAsTrigger [Inject] private DiContainer Container { get; } - protected override void Awake() + protected virtual void Awake() { - base.Awake(); + CollectSuppliedValues(); if (ActAsTrigger) { ((IConnector) this).Connect(Observable.Return<(IMessage, Messages)>(default)); @@ -63,18 +74,17 @@ void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> { var observable = source .SelectMany( - eventMessages => (this as IConnector) - .OnConnectAsObservable(eventMessages.latestMessage) - .Select(x => (latestMessage: x, messages: (eventMessages.massages ?? Messages.Create()).Append(x))) - ); + eventMessages => + { + var (latestMessage, massages) = eventMessages; + Messages = massages; + return (this as IConnector) + .OnConnectAsObservable(latestMessage) + .Select(x => (latestMessage: x, messages: (massages ?? Messages.Create()).Append(x))); + }); TargetConnectors - .OfType() .ToList() .ForEach(x => x.Connect(observable)); - TargetConnectors - .OfType() - .ToList() - .ForEach(x => observable.Subscribe(y => x.OnReceive(y.messages))); if (!TargetConnectors.Any()) { @@ -82,14 +92,19 @@ void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> } } + protected virtual void CollectSuppliedValues() + { + // Do nothing + } + public abstract IObservable OnConnectAsObservable(IMessage latestMessage); [PublicAPI] - public void AddConnectable(ConnectableBase connectable) + public void AddConnector(ConnectorBase connectable) { if (targetComponents == default) { - targetComponents = new List(); + targetComponents = new List(); } targetComponents.Add(connectable); } diff --git a/Assets/Scripts/IConnectable.cs b/Assets/Scripts/IConnectable.cs deleted file mode 100644 index 7bc9021..0000000 --- a/Assets/Scripts/IConnectable.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace UniFlow -{ - public interface IConnectable - { - } -} \ No newline at end of file diff --git a/Assets/Scripts/IConnectable.cs.meta b/Assets/Scripts/IConnectable.cs.meta deleted file mode 100644 index 6f12486..0000000 --- a/Assets/Scripts/IConnectable.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 82691cf81f1b438d844cdeb82cd6d089 -timeCreated: 1562827163 \ No newline at end of file diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index 06b57da..0ec0e0e 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -2,7 +2,7 @@ namespace UniFlow { - public interface IConnector : IConnectable + public interface IConnector { IObservable OnConnectAsObservable(IMessage latestMessage); void Connect(IObservable<(IMessage latestMessage, Messages massages)> source); diff --git a/Assets/Scripts/IReceiver.cs b/Assets/Scripts/IReceiver.cs index a7ebc76..bbfd982 100644 --- a/Assets/Scripts/IReceiver.cs +++ b/Assets/Scripts/IReceiver.cs @@ -1,6 +1,6 @@ namespace UniFlow { - public interface IReceiver : IConnectable + public interface IReceiver : IConnector { void OnReceive(Messages messages); } diff --git a/Assets/Scripts/MessageBase.cs b/Assets/Scripts/MessageBase.cs index e96c98b..b951683 100644 --- a/Assets/Scripts/MessageBase.cs +++ b/Assets/Scripts/MessageBase.cs @@ -2,7 +2,7 @@ namespace UniFlow { - public class MessageBase : IMessage where TSender : IConnectable + public class MessageBase : IMessage where TSender : IConnector { public ConnectorType ConnectorType { get; private set; } public TSender Sender { get; private set; } @@ -19,7 +19,7 @@ public class MessageBase : IMessage where TSende } } - public class MessageBase : MessageBase where TSender : IConnectable + public class MessageBase : MessageBase where TSender : IConnector { protected static TResult Create(ConnectorType connectorType, TSender sender) where TResult : MessageBase, new() diff --git a/Assets/Scripts/ReceiverBase.cs b/Assets/Scripts/ReceiverBase.cs index f560d79..2aba23b 100644 --- a/Assets/Scripts/ReceiverBase.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -1,7 +1,19 @@ +using System; +using System.Collections.Generic; +using UniRx; + namespace UniFlow { - public abstract class ReceiverBase : ConnectableBase, IReceiver + public abstract class ReceiverBase : ConnectorBase, IReceiver { + protected override IEnumerable TargetConnectors { get; } = new List(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + OnReceive(Messages); + return Observable.Empty(); + } + public abstract void OnReceive(Messages messages); } } \ No newline at end of file From 0dc1c7ee54c54fa99848e5702756247815ac17f5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 21:29:52 +0900 Subject: [PATCH 152/453] :refactor: Split base classes from LoadScene.cs, UnloadScene.cs --- .../Scripts/Connector/Controller/LoadScene.cs | 63 ------------------- .../Connector/Controller/LoadSceneBase.cs | 32 ++++++++++ .../Controller/LoadSceneBase.cs.meta | 3 + .../Connector/Controller/LoadSceneEnumBase.cs | 44 +++++++++++++ .../Controller/LoadSceneEnumBase.cs.meta | 3 + .../Connector/Controller/UnloadScene.cs | 63 ------------------- .../Connector/Controller/UnloadSceneBase.cs | 32 ++++++++++ .../Controller/UnloadSceneBase.cs.meta | 3 + .../Controller/UnloadSceneEnumBase.cs | 44 +++++++++++++ .../Controller/UnloadSceneEnumBase.cs.meta | 3 + 10 files changed, 164 insertions(+), 126 deletions(-) create mode 100644 Assets/Scripts/Connector/Controller/LoadSceneBase.cs create mode 100644 Assets/Scripts/Connector/Controller/LoadSceneBase.cs.meta create mode 100644 Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs create mode 100644 Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs.meta create mode 100644 Assets/Scripts/Connector/Controller/UnloadSceneBase.cs create mode 100644 Assets/Scripts/Connector/Controller/UnloadSceneBase.cs.meta create mode 100644 Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs create mode 100644 Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs.meta diff --git a/Assets/Scripts/Connector/Controller/LoadScene.cs b/Assets/Scripts/Connector/Controller/LoadScene.cs index fff7031..96a76b0 100644 --- a/Assets/Scripts/Connector/Controller/LoadScene.cs +++ b/Assets/Scripts/Connector/Controller/LoadScene.cs @@ -1,39 +1,10 @@ -using System; using System.Collections.Generic; using System.Linq; -using System.Text.RegularExpressions; using JetBrains.Annotations; -using UniRx; -using UniRx.Async; using UnityEngine; -using UnityEngine.SceneManagement; -using Zenject; namespace UniFlow.Connector.Controller { - public abstract class LoadSceneBase : ConnectorBase - { - [UsedImplicitly] - public abstract IEnumerable SceneNames { get; set; } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return LoadScenes() - .ToObservable() - .Select(_ => CreateMessage()); - } - - protected abstract IMessage CreateMessage(); - - private async UniTask LoadScenes() - { - foreach (var sceneName in SceneNames) - { - await SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); - } - } - } - [AddComponentMenu("UniFlow/Controller/LoadScene", (int) ConnectorType.LoadScene)] public class LoadScene : LoadSceneBase { @@ -58,38 +29,4 @@ public static Message Create(LoadScene sender) } } } - - public abstract class LoadScene : LoadSceneBase where TSceneName : Enum - { - [SerializeField] private List sceneNames = default; - - [InjectOptional(Id = InjectId.SceneNamePrefix)] private string SceneNamePrefix { get; } - - [UsedImplicitly] public override IEnumerable SceneNames - { - get => sceneNames.Select(x => $"{SceneNamePrefix}{x.ToString()}"); - set => sceneNames = value - .Select( - x => (TSceneName) Enum - .Parse( - typeof(TSceneName), - Regex.Replace(x, $"^{SceneNamePrefix}", string.Empty) - ) - ) - .ToList(); - } - - protected override IMessage CreateMessage() - { - return Message.Create(this); - } - - public class Message : MessageBase> - { - public static Message Create(LoadScene sender) - { - return Create(ConnectorType.LoadScene_Enum, sender); - } - } - } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs new file mode 100644 index 0000000..13292f4 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using UniRx; +using UniRx.Async; +using UnityEngine.SceneManagement; + +namespace UniFlow.Connector.Controller +{ + public abstract class LoadSceneBase : ConnectorBase + { + [UsedImplicitly] + public abstract IEnumerable SceneNames { get; set; } + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return LoadScenes() + .ToObservable() + .Select(_ => CreateMessage()); + } + + protected abstract IMessage CreateMessage(); + + private async UniTask LoadScenes() + { + foreach (var sceneName in SceneNames) + { + await SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs.meta b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs.meta new file mode 100644 index 0000000..7f1b32a --- /dev/null +++ b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 66350073e5a24e02b6106711d805b3da +timeCreated: 1568896106 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs new file mode 100644 index 0000000..8439c8d --- /dev/null +++ b/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using JetBrains.Annotations; +using UnityEngine; +using Zenject; + +namespace UniFlow.Connector.Controller +{ + public abstract class LoadSceneEnumBase : LoadSceneBase where TSceneName : Enum + { + [SerializeField] private List sceneNames = default; + + [InjectOptional(Id = InjectId.SceneNamePrefix)] private string SceneNamePrefix { get; } + + [UsedImplicitly] public override IEnumerable SceneNames + { + get => sceneNames.Select(x => $"{SceneNamePrefix}{x.ToString()}"); + set => sceneNames = value + .Select( + x => (TSceneName) Enum + .Parse( + typeof(TSceneName), + Regex.Replace(x, $"^{SceneNamePrefix}", string.Empty) + ) + ) + .ToList(); + } + + protected override IMessage CreateMessage() + { + return Message.Create(this); + } + + public class Message : MessageBase> + { + public static Message Create(LoadSceneEnumBase sender) + { + return Create(ConnectorType.LoadScene_Enum, sender); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs.meta b/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs.meta new file mode 100644 index 0000000..dc67245 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 557a18adcc3446dfa1cea49dd2800a06 +timeCreated: 1568895941 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/UnloadScene.cs b/Assets/Scripts/Connector/Controller/UnloadScene.cs index 9f6b1f6..2e28714 100644 --- a/Assets/Scripts/Connector/Controller/UnloadScene.cs +++ b/Assets/Scripts/Connector/Controller/UnloadScene.cs @@ -1,39 +1,10 @@ -using System; using System.Collections.Generic; using System.Linq; -using System.Text.RegularExpressions; using JetBrains.Annotations; -using UniRx; -using UniRx.Async; using UnityEngine; -using UnityEngine.SceneManagement; -using Zenject; namespace UniFlow.Connector.Controller { - public abstract class UnloadSceneBase : ConnectorBase - { - [UsedImplicitly] - public abstract IEnumerable SceneNames { get; set; } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return UnloadScenes() - .ToObservable() - .Select(_ => CreateMessage()); - } - - protected abstract IMessage CreateMessage(); - - private async UniTask UnloadScenes() - { - foreach (var sceneName in SceneNames) - { - await SceneManager.UnloadSceneAsync(sceneName); - } - } - } - [AddComponentMenu("UniFlow/Controller/UnloadScene", (int) ConnectorType.UnloadScene)] public class UnloadScene : UnloadSceneBase { @@ -58,38 +29,4 @@ public static Message Create(UnloadScene sender) } } } - - public abstract class UnloadScene : UnloadSceneBase where TSceneName : Enum - { - [SerializeField] private List sceneNames = default; - - [InjectOptional(Id = InjectId.SceneNamePrefix)] private string SceneNamePrefix { get; } - - [UsedImplicitly] public override IEnumerable SceneNames - { - get => sceneNames.Select(x => $"{SceneNamePrefix}{x.ToString()}"); - set => sceneNames = value - .Select( - x => (TSceneName) Enum - .Parse( - typeof(TSceneName), - Regex.Replace(x, $"^{SceneNamePrefix}", string.Empty) - ) - ) - .ToList(); - } - - protected override IMessage CreateMessage() - { - return Message.Create(this); - } - - public class Message : MessageBase> - { - public static Message Create(UnloadScene sender) - { - return Create(ConnectorType.UnloadScene_Enum, sender); - } - } - } } \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs new file mode 100644 index 0000000..fba6911 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using UniRx; +using UniRx.Async; +using UnityEngine.SceneManagement; + +namespace UniFlow.Connector.Controller +{ + public abstract class UnloadSceneBase : ConnectorBase + { + [UsedImplicitly] + public abstract IEnumerable SceneNames { get; set; } + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return UnloadScenes() + .ToObservable() + .Select(_ => CreateMessage()); + } + + protected abstract IMessage CreateMessage(); + + private async UniTask UnloadScenes() + { + foreach (var sceneName in SceneNames) + { + await SceneManager.UnloadSceneAsync(sceneName); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs.meta b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs.meta new file mode 100644 index 0000000..a983a55 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c5530ca1b3904569a5ca1c1c53a8732f +timeCreated: 1568896159 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs new file mode 100644 index 0000000..7e54b6c --- /dev/null +++ b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using JetBrains.Annotations; +using UnityEngine; +using Zenject; + +namespace UniFlow.Connector.Controller +{ + public abstract class UnloadScene : UnloadSceneBase where TSceneName : Enum + { + [SerializeField] private List sceneNames = default; + + [InjectOptional(Id = InjectId.SceneNamePrefix)] private string SceneNamePrefix { get; } + + [UsedImplicitly] public override IEnumerable SceneNames + { + get => sceneNames.Select(x => $"{SceneNamePrefix}{x.ToString()}"); + set => sceneNames = value + .Select( + x => (TSceneName) Enum + .Parse( + typeof(TSceneName), + Regex.Replace(x, $"^{SceneNamePrefix}", string.Empty) + ) + ) + .ToList(); + } + + protected override IMessage CreateMessage() + { + return Message.Create(this); + } + + public class Message : MessageBase> + { + public static Message Create(UnloadScene sender) + { + return Create(ConnectorType.UnloadScene_Enum, sender); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs.meta b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs.meta new file mode 100644 index 0000000..8c71f9c --- /dev/null +++ b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb2ba5413cf043ef8fec32fc864eb1fe +timeCreated: 1568896041 \ No newline at end of file From 585e32d9548aea5d46fe219a3d8864212393108e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 19 Sep 2019 21:45:01 +0900 Subject: [PATCH 153/453] :sparkles: Tweak SetDirty --- Assets/Editor/Scripts/FlowEditorWindow.cs | 46 ++++++++++++++--------- Assets/Editor/Scripts/FlowNode.cs | 13 +++++-- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index e37ac53..3e44a3b 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -3,7 +3,9 @@ using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using UnityEditor; +using UnityEditor.SceneManagement; using UnityEngine; +using UnityEngine.SceneManagement; namespace UniFlow.Editor { @@ -66,27 +68,35 @@ private void Reload() Repaint(); } + private void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange) + { + switch (playModeStateChange) + { + case PlayModeStateChange.EnteredEditMode: + Reload(); + break; + case PlayModeStateChange.ExitingEditMode: + break; + case PlayModeStateChange.EnteredPlayMode: + break; + case PlayModeStateChange.ExitingPlayMode: + break; + default: + throw new ArgumentOutOfRangeException(nameof(playModeStateChange), playModeStateChange, null); + } + } + + private void ActiveSceneChangedInEditMode(Scene from, Scene to) + { + Reload(); + } + private void OnEnable() { Window = this; Undo.undoRedoPerformed += Reload; - EditorApplication.playModeStateChanged += playModeStateChange => - { - switch (playModeStateChange) - { - case PlayModeStateChange.EnteredEditMode: - Reload(); - break; - case PlayModeStateChange.ExitingEditMode: - break; - case PlayModeStateChange.EnteredPlayMode: - break; - case PlayModeStateChange.ExitingPlayMode: - break; - default: - throw new ArgumentOutOfRangeException(nameof(playModeStateChange), playModeStateChange, null); - } - }; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + EditorSceneManager.activeSceneChangedInEditMode += ActiveSceneChangedInEditMode; Reload(); } @@ -94,6 +104,8 @@ private void OnEnable() private void OnDisable() { Undo.undoRedoPerformed -= Reload; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorSceneManager.activeSceneChangedInEditMode -= ActiveSceneChangedInEditMode; } private void OnDestroy() diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index b820f86..97bbec2 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -92,14 +92,18 @@ public Vector2 GetRecordedPosition() public void ApplyPosition() { - if (!(ConnectorInfo.Connector is ConnectorBase connectable) || connectable == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) + if (!(ConnectorInfo.Connector is ConnectorBase connector) || connector == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) { return; } - Undo.RecordObject(connectable, "Move Node"); - connectable.FlowGraphNodePosition = layout.position; - EditorUtility.SetDirty(connectable); + Undo.RecordObject(connector, "Move Node"); + // ReSharper disable once InvertIf + if (connector.FlowGraphNodePosition != layout.position) + { + connector.FlowGraphNodePosition = layout.position; + EditorUtility.SetDirty(connector); + } } public void ApplyTargetConnectors() @@ -262,6 +266,7 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI parameter.Value = x.newValue; connectorInfo.ApplyParameter(parameter); FlowEditorWindow.Window.ForceRegisterUndo(); + EditorUtility.SetDirty(connectorInfo.Connector as Component); } ); } From 515b35c51eed64d5c7eb5d04a01192594abd00ae Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 12:52:51 +0900 Subject: [PATCH 154/453] :beetle: Avoid `Failed to unpersist` error --- Assets/Editor/Scripts/FlowEditorWindow.cs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index 3e44a3b..bd5ff10 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -3,9 +3,7 @@ using System.Diagnostics.CodeAnalysis; using JetBrains.Annotations; using UnityEditor; -using UnityEditor.SceneManagement; using UnityEngine; -using UnityEngine.SceneManagement; namespace UniFlow.Editor { @@ -86,17 +84,11 @@ private void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange) } } - private void ActiveSceneChangedInEditMode(Scene from, Scene to) - { - Reload(); - } - private void OnEnable() { Window = this; Undo.undoRedoPerformed += Reload; EditorApplication.playModeStateChanged += OnPlayModeStateChanged; - EditorSceneManager.activeSceneChangedInEditMode += ActiveSceneChangedInEditMode; Reload(); } @@ -105,7 +97,6 @@ private void OnDisable() { Undo.undoRedoPerformed -= Reload; EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; - EditorSceneManager.activeSceneChangedInEditMode -= ActiveSceneChangedInEditMode; } private void OnDestroy() From 2b4b939d7f7b25eaf5dbb7ff23002e0d533d0896 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 12:53:17 +0900 Subject: [PATCH 155/453] :name_badge: Rename base class --- Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs index 7e54b6c..385397e 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Controller { - public abstract class UnloadScene : UnloadSceneBase where TSceneName : Enum + public abstract class UnloadSceneEnumBase : UnloadSceneBase where TSceneName : Enum { [SerializeField] private List sceneNames = default; @@ -33,9 +33,9 @@ protected override IMessage CreateMessage() return Message.Create(this); } - public class Message : MessageBase> + public class Message : MessageBase> { - public static Message Create(UnloadScene sender) + public static Message Create(UnloadSceneEnumBase sender) { return Create(ConnectorType.UnloadScene_Enum, sender); } From 51b29e34348ab33726069d86b4abfdbd302ed226 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 12:56:53 +0900 Subject: [PATCH 156/453] :clipboard: Upgrade Unity 2019.2.6f1 --- ProjectSettings/ProjectVersion.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index cfdd6e9..2146a1e 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.5f1 -m_EditorVersionWithRevision: 2019.2.5f1 (9dace1eed4cc) +m_EditorVersion: 2019.2.6f1 +m_EditorVersionWithRevision: 2019.2.6f1 (fe82a0e88406) From ff47924106e3ac4fef44bab6cc4e9aacbd940eac Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 12:57:04 +0900 Subject: [PATCH 157/453] :wrench: Tweak log format --- Assets/Scripts/Receiver/Log.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index 79c640a..1a3f81e 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -1,3 +1,5 @@ +using System; +using System.Reflection; using System.Text; using UnityEngine; @@ -16,8 +18,12 @@ public override void OnReceive(Messages messages) { sb.AppendLine($" {index}"); sb.AppendLine($" Type:\n {message.ConnectorType}"); - // TODO: データの送り方を考える -// sb.AppendLine($" Data:\n {eventMessage.Data?.ToString().Replace("\n", "\n ")}"); + sb.AppendLine($" Message Type:\n {message.GetType()}"); + if (message.GetType().BaseType is Type baseType && baseType.IsGenericType && baseType.GenericTypeArguments.Length == 2) + { + var data = message.GetType().GetProperty("Data", BindingFlags.Instance | BindingFlags.Public)?.GetValue(message); + sb.AppendLine($" Data:\n Type:\n {data?.GetType()}\n Value:\n {data?.ToString().Replace("\n", "\n ")}"); + } index++; } Debug.Log(sb.ToString()); From 3891fca6eae203fbbb98f51498ee9239525e8bbb Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 12:57:21 +0900 Subject: [PATCH 158/453] :beetle: Send data correctly --- Assets/Scripts/ReceiverBase.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/ReceiverBase.cs b/Assets/Scripts/ReceiverBase.cs index 2aba23b..0356a3d 100644 --- a/Assets/Scripts/ReceiverBase.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -11,9 +11,17 @@ public abstract class ReceiverBase : ConnectorBase, IReceiver public override IObservable OnConnectAsObservable(IMessage latestMessage) { OnReceive(Messages); - return Observable.Empty(); + return Observable.Return(Message.Create(this)); } public abstract void OnReceive(Messages messages); + + public class Message : MessageBase + { + public static Message Create(ReceiverBase sender) + { + return Create(ConnectorType.Receiver, sender); + } + } } } \ No newline at end of file From 9ced619fc0d817c7afa7e9bc2765eea6c2305fc5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 12:57:38 +0900 Subject: [PATCH 159/453] :beetle: Split message correctly --- Assets/Scripts/ConnectorBase.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 18dc5b3..830675f 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -81,7 +81,12 @@ void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> return (this as IConnector) .OnConnectAsObservable(latestMessage) .Select(x => (latestMessage: x, messages: (massages ?? Messages.Create()).Append(x))); - }); + } + ); + if (TargetConnectors.Count() > 1) + { + observable = observable.Share(); + } TargetConnectors .ToList() .ForEach(x => x.Connect(observable)); From a9fe4ae6e1417692ac6216888ca8030ffd4fbc96 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 13:00:27 +0900 Subject: [PATCH 160/453] :clipboard: Bump up version to v0.1.0-preview.21 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 4660a9a..cf75008 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.20", + "version": "0.1.0-preview.21", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 78dacd0e110f6598d56afcf5f1e4c2f8a1337426 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 20 Sep 2019 13:10:34 +0900 Subject: [PATCH 161/453] :memo: Update CHANGELOG --- Assets/CHANGELOG.md | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 47b2e28..1392344 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,52 @@ # Changelog +## [0.1.0-preview.21] - 2019-09-20 + +### Implementations + +* Implement ValueComparer +* Implement ValueProvider + +### Fixes + +* Fix observable + * Split message correctly + * Send `ObservableReceiverBase` message correctly +* Fix GraphView + +## [0.1.0-preview.20] - 2019-09-17 + +### Changes + +* Change timing of preparing to `Awake()` instead of `Start()` + +### Fixes + +* Fix some bugs in GraphView +* Change method interface to send latest message correctly + +## [0.1.0-preview.19] - 2019-09-16 + +### Implementations + +* Add `Toss` and `Receive` connector to split graph + +### Destructive Changes + +* Pass previous message to `IConnector.OnConnectAsObservable()` + +### Fixes + +* `SimpleAnimationEvent`: Waiting animation correctly + +## [0.1.0-preview.18] - 2019-09-10 + +Fix editor bug + +### Fixes + +* Set TargetComponents correctly when connect from search window + ## [0.1.0-preview.17] - 2019-09-09 Fix undo From c48b9784d5bf502a019efa703bd72473831c0956 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Sun, 22 Sep 2019 15:59:31 +0900 Subject: [PATCH 162/453] :clipboard: Add .editorconfig --- .editorconfig | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c9bbfa2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# editorconfig.org + +# top-most EditorConfig file +root = true + +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation +[*] +insert_final_newline = true +indent_style = space + +# Unity scripts +[Assets/**/*.cs] +charset = utf-8 +end_of_line = lf +indent_size = 4 From 467552a4623a7b8f31c4140122b57e71dd427563 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 24 Sep 2019 11:11:09 +0900 Subject: [PATCH 163/453] :recycle: Move editor only definitions --- Assets/Scripts/ConnectorBase.cs | 232 ++++++++++++++++---------------- 1 file changed, 115 insertions(+), 117 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 830675f..7059395 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -1,117 +1,115 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; -using Zenject; - -namespace UniFlow -{ - public abstract class ConnectorBase : MonoBehaviour, IConnector - { -#if UNITY_EDITOR - [SerializeField] [HideInInspector] private Vector2 flowGraphNodePosition = default; - public Vector2 FlowGraphNodePosition - { - get => flowGraphNodePosition; - set => flowGraphNodePosition = value; - } -#endif - - [SerializeField] [Tooltip("Specify instances of IEventConnector directly")] - private List targetComponents = new List(); - - [SerializeField] [Tooltip("Specify identifiers of IEventConnector that resolve from Zenject.DiContainer")] - private List targetIds = new List(); - - [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] - protected bool actAsTrigger = false; - - protected Messages Messages { get; private set; } - - protected virtual IEnumerable TargetConnectors => - new List() - .Concat(targetComponents ?? new List()) - .Concat((targetIds ?? new List()).SelectMany(x => Container?.ResolveIdAll(x))) - .Where(x => !ReferenceEquals(x, this)) - .ToArray(); - -#if UNITY_EDITOR - [UsedImplicitly] - public IEnumerable TargetComponents - { - get => targetComponents; - set => targetComponents = value.ToList(); - } - - [UsedImplicitly] - public IEnumerable TargetIds - { - get => targetIds; - set => targetIds = value.ToList(); - } -#endif - - [UsedImplicitly] public virtual bool ActAsTrigger - { - get => actAsTrigger; - set => actAsTrigger = value; - } - - [Inject] private DiContainer Container { get; } - - protected virtual void Awake() - { - CollectSuppliedValues(); - if (ActAsTrigger) - { - ((IConnector) this).Connect(Observable.Return<(IMessage, Messages)>(default)); - } - } - - void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> source) - { - var observable = source - .SelectMany( - eventMessages => - { - var (latestMessage, massages) = eventMessages; - Messages = massages; - return (this as IConnector) - .OnConnectAsObservable(latestMessage) - .Select(x => (latestMessage: x, messages: (massages ?? Messages.Create()).Append(x))); - } - ); - if (TargetConnectors.Count() > 1) - { - observable = observable.Share(); - } - TargetConnectors - .ToList() - .ForEach(x => x.Connect(observable)); - - if (!TargetConnectors.Any()) - { - observable.Subscribe(); - } - } - - protected virtual void CollectSuppliedValues() - { - // Do nothing - } - - public abstract IObservable OnConnectAsObservable(IMessage latestMessage); - - [PublicAPI] - public void AddConnector(ConnectorBase connectable) - { - if (targetComponents == default) - { - targetComponents = new List(); - } - targetComponents.Add(connectable); - } - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; +using Zenject; + +namespace UniFlow +{ + public abstract class ConnectorBase : MonoBehaviour, IConnector + { + [SerializeField] [Tooltip("Specify instances of IEventConnector directly")] + private List targetComponents = new List(); + + [SerializeField] [Tooltip("Specify identifiers of IEventConnector that resolve from Zenject.DiContainer")] + private List targetIds = new List(); + + [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] + protected bool actAsTrigger = false; + + protected Messages Messages { get; private set; } + + protected virtual IEnumerable TargetConnectors => + new List() + .Concat(targetComponents ?? new List()) + .Concat((targetIds ?? new List()).SelectMany(x => Container?.ResolveIdAll(x))) + .Where(x => !ReferenceEquals(x, this)) + .ToArray(); + +#if UNITY_EDITOR + [UsedImplicitly] + public IEnumerable TargetComponents + { + get => targetComponents; + set => targetComponents = value.ToList(); + } + + [UsedImplicitly] + public IEnumerable TargetIds + { + get => targetIds; + set => targetIds = value.ToList(); + } + + [SerializeField] [HideInInspector] private Vector2 flowGraphNodePosition = default; + public Vector2 FlowGraphNodePosition + { + get => flowGraphNodePosition; + set => flowGraphNodePosition = value; + } +#endif + + [UsedImplicitly] public virtual bool ActAsTrigger + { + get => actAsTrigger; + set => actAsTrigger = value; + } + + [Inject] private DiContainer Container { get; } + + protected virtual void Awake() + { + CollectSuppliedValues(); + if (ActAsTrigger) + { + ((IConnector) this).Connect(Observable.Return<(IMessage, Messages)>(default)); + } + } + + void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> source) + { + var observable = source + .SelectMany( + eventMessages => + { + var (latestMessage, massages) = eventMessages; + Messages = massages; + return (this as IConnector) + .OnConnectAsObservable(latestMessage) + .Select(x => (latestMessage: x, messages: (massages ?? Messages.Create()).Append(x))); + } + ); + if (TargetConnectors.Count() > 1) + { + observable = observable.Share(); + } + TargetConnectors + .ToList() + .ForEach(x => x.Connect(observable)); + + if (!TargetConnectors.Any()) + { + observable.Subscribe(); + } + } + + protected virtual void CollectSuppliedValues() + { + // Do nothing + } + + public abstract IObservable OnConnectAsObservable(IMessage latestMessage); + + [PublicAPI] + public void AddConnector(ConnectorBase connectable) + { + if (targetComponents == default) + { + targetComponents = new List(); + } + targetComponents.Add(connectable); + } + } +} From f35880d5582a0f66ddd4789a79833c190814b08a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 24 Sep 2019 11:57:12 +0900 Subject: [PATCH 164/453] :wrench: Add style for messaged nodes --- Assets/Editor/StyleSheets/FlowNode.uss | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/StyleSheets/FlowNode.uss b/Assets/Editor/StyleSheets/FlowNode.uss index 2e3a73f..a48ef1e 100644 --- a/Assets/Editor/StyleSheets/FlowNode.uss +++ b/Assets/Editor/StyleSheets/FlowNode.uss @@ -23,6 +23,24 @@ FlowNode #parameters #items > VisualElement .unity-label { max-width: 150px; } +FlowNode #messaged-border { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin-top: 1px; + margin-bottom: 1px; + margin-left: 1px; + margin-right: 1px; + border-radius: 8px; + border-color: rgba(255, 255, 0, 0.5); + border-top: 3px; + border-bottom: 3px; + border-left: 3px; + border-right: 3px; +} + .unity-label { min-width: 100px; -} \ No newline at end of file +} From 59908ec198604dde1db97dbddf0e277e19db1c7a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 24 Sep 2019 11:59:09 +0900 Subject: [PATCH 165/453] :sparkles: Implement blooming nodes when node has messaged --- Assets/Editor/Scripts/FlowNode.cs | 694 ++++++++++++++-------------- Assets/Editor/UniFlow.Editor.asmdef | 3 +- Assets/Scripts/ConnectorBase.cs | 5 + Assets/Scripts/IConnector.cs | 6 +- 4 files changed, 365 insertions(+), 343 deletions(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 97bbec2..e3fb65c 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -1,341 +1,353 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.RegularExpressions; -using UnityEditor; -using UnityEditor.Experimental.GraphView; -using UnityEditor.UIElements; -using UnityEngine; -using UnityEngine.UIElements; -using Object = UnityEngine.Object; - -namespace UniFlow.Editor -{ - public class FlowNode : Node, IRemovableElement - { - public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener) - { - ConnectorInfo = connectorInfo; - EdgeConnectorListener = edgeConnectorListener; - } - - public void Initialize() - { - name = ConnectorInfo.Name; - title = ConnectorInfo.Name; - styleSheets.Add(AssetReferences.Instance.FlowNode); - capabilities = - Capabilities.Selectable | -// Capabilities.Collapsible | -// Capabilities.Resizable | - Capabilities.Movable | - Capabilities.Deletable | - Capabilities.Droppable | - Capabilities.Ascendable | - Capabilities.Renamable; - - if (ConnectorInfo.GameObject == default) - { - ConnectorInfo.GameObject = DeterminateGameObject(); - } - - if (ConnectorInfo.Connector == default) - { - ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; - } - - AddParameters(); - AddPorts(); - RegisterCallback((GeometryChangedEvent e) => ApplyPosition()); - } - - public Port InputPort { get; private set; } - public Port OutputPort { get; private set; } - - internal ConnectorInfo ConnectorInfo { get; } - - private IEdgeConnectorListener EdgeConnectorListener { get; } - - private const string DefaultTargetGameObjectName = "UniFlowController"; - private static IEnumerable ParameterNamesHideInNode { get; } = new List - { - "actAsTrigger", - "targetComponents", - "targetIds", - }; - - private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> - { - {typeof(string), CreateBindableElement}, - {typeof(int), CreateBindableElement}, - {typeof(float), CreateBindableElement}, - {typeof(double), CreateBindableElement}, - {typeof(bool), CreateBindableElement}, - {typeof(Object), CreateBindableElement}, - }; - - void IRemovableElement.RemoveFromGraphView() - { - if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is Component component)) - { - return; - } - - Undo.DestroyObjectImmediate(component); - FlowEditorWindow.Window.FlowGraphView.SetupActAsTrigger(); - } - - public Vector2 GetRecordedPosition() - { - return ((ConnectorBase) ConnectorInfo.Connector).FlowGraphNodePosition; - } - - public void ApplyPosition() - { - if (!(ConnectorInfo.Connector is ConnectorBase connector) || connector == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) - { - return; - } - - Undo.RecordObject(connector, "Move Node"); - // ReSharper disable once InvertIf - if (connector.FlowGraphNodePosition != layout.position) - { - connector.FlowGraphNodePosition = layout.position; - EditorUtility.SetDirty(connector); - } - } - - public void ApplyTargetConnectors() - { - if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is ConnectorBase connector) || connector == default) - { - return; - } - - Undo.RecordObject(connector, "Apply Target Connectors"); - connector.TargetComponents = OutputPort? - .connections - .Select(x => x.input.node as FlowNode) - .Where(x => x != default) - .Select(x => x.ConnectorInfo.Connector) - .OfType(); - EditorUtility.SetDirty(connector); - } - - private void AddParameters() - { - var contentsElement = this.Q("contents"); - - var parametersElement = new VisualElement {name = "parameters"}; - { - var dividerElement = new VisualElement {name = "divider"}; - dividerElement.AddToClassList("horizontal"); - parametersElement.Add(dividerElement); - - var itemsElement = new VisualElement {name = "items"}; - parametersElement.Add(itemsElement); - - { - var element = new VisualElement(); - var field = new ObjectField("GameObject") {value = ConnectorInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; - field.RegisterValueChangedCallback( - x => - { - var groupId = Undo.GetCurrentGroup(); - - if (x.previousValue != default && ConnectorInfo.Connector is Component component && component != default) - { - Undo.DestroyObjectImmediate(component); - EditorUtility.SetDirty(x.previousValue); - } - - if (x.newValue != default && x.newValue is GameObject newGameObject) - { - ConnectorInfo.GameObject = newGameObject; - ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; - ConnectorInfo.ApplyParameters(); - ApplyTargetConnectors(); - InputPort?.connections.Select(y => y.output.node).OfType().ToList().ForEach(y => y.ApplyTargetConnectors()); - EditorUtility.SetDirty(x.newValue); - } - - if (x.previousValue != default && x.previousValue is GameObject previousGameObject && previousGameObject.name == "Dummy") - { - Object.Destroy(previousGameObject); - } - - Undo.CollapseUndoOperations(groupId); - } - ); - - element.Add(field); - itemsElement.Add(element); - - if (ConnectorInfo.ParameterList.Any(x => !ParameterNamesHideInNode.Contains(x.Name))) - { - var innerDividerElement = new VisualElement {name = "divider"}; - innerDividerElement.AddToClassList("horizontal"); - itemsElement.Add(innerDividerElement); - } - } - - foreach (var parameter in ConnectorInfo.ParameterList) - { - if (ParameterNamesHideInNode.Contains(parameter.Name)) - { - continue; - } - - var element = new VisualElement(); - var field = CreateField(ConnectorInfo, parameter); - element.Add(field); - itemsElement.Add(element); - } - } - - contentsElement.Add(parametersElement); - } - - private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) - { - // Generic types field only be rendered by PropertyField - if ( - parameter.Type.IsGenericType - && ( - typeof(List<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) - || typeof(ExposedReference<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) - ) - ) - { - if (connectorInfo.GameObject == default || connectorInfo.Connector == default) - { - return null; - } - - var serializedObject = new SerializedObject(connectorInfo.Connector as Component); - var field = new PropertyField(serializedObject.FindProperty(parameter.Name), ToDisplayName(parameter.Name)); - field.Bind(serializedObject); - return field; - } - - // EnumField does not work unless the initial value is given to the second argument - if (parameter.Type.IsEnum) - { - var field = new EnumField(ToDisplayName(parameter.Name), parameter.Value == default ? (Enum) Activator.CreateInstance(parameter.Type) : (Enum) parameter.Value); - field.RegisterValueChangedCallback( - x => - { - parameter.Value = x.newValue; - Undo.RecordObject(connectorInfo.Connector as Component, $"Change {connectorInfo.Name}.{parameter.Name}"); - connectorInfo.ApplyParameter(parameter); - EditorUtility.SetDirty(connectorInfo.Connector as Component); - } - ); - return field; - } - - var fieldType = parameter.Type; - - if (typeof(Object).IsAssignableFrom(parameter.Type)) - { - fieldType = typeof(Object); - } - - return CreateFieldFunctions[fieldType](connectorInfo, parameter); - } - - private static BindableElement CreateBindableElement(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) where TResult : BaseField, new() - { - var field = new TResult - { - label = ToDisplayName(parameter.Name), - }; - if (parameter.Value != default) - { - field.value = (TValue) parameter.Value; - } - - if (field is INotifyValueChanged notifyValueChanged) - { - notifyValueChanged.RegisterValueChangedCallback( - x => - { - // 直接 Component 監視させちゃう? - Undo.RecordObject(FlowEditorWindow.Window, "Change Value"); - parameter.Value = x.newValue; - connectorInfo.ApplyParameter(parameter); - FlowEditorWindow.Window.ForceRegisterUndo(); - EditorUtility.SetDirty(connectorInfo.Connector as Component); - } - ); - } - - // ReSharper disable once InvertIf - if (typeof(TValue) == typeof(Object) && field is ObjectField objectField) - { - objectField.objectType = parameter.Type; - objectField.allowSceneObjects = true; - } - - return field; - } - - private static GameObject DeterminateGameObject() - { - if (Selection.activeGameObject != default) - { - return Selection.activeGameObject; - } - - if (GameObject.Find(DefaultTargetGameObjectName) != default) - { - return GameObject.Find(DefaultTargetGameObjectName); - } - - var go = new GameObject(DefaultTargetGameObjectName); - Undo.RegisterCreatedObjectUndo(go, "New UniFlowController"); - return go; - } - - private void AddPorts() - { - if (typeof(IConnector).IsAssignableFrom(ConnectorInfo.Type)) - { - OutputPort = FlowPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, EdgeConnectorListener); - OutputPort.portName = "Out"; - outputContainer.Add(OutputPort); - } - else - { - outputContainer.RemoveFromHierarchy(); - } - - InputPort = FlowPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi); - InputPort.portName = "In"; - inputContainer.Add(InputPort); - - foreach (var suppliableParameter in ConnectorInfo.SuppliableParameterList) - { - var suppliedPort = FlowPort.Create(Orientation.Vertical, Direction.Input, Port.Capacity.Multi); - suppliedPort.portName = suppliableParameter.Name; - inputContainer.Add(suppliedPort); - } - } - - private static string ToDisplayName(string original) - { - if (Regex.IsMatch(original, "ControlMethod$")) - { - return "Control Method"; - } - - if (Regex.IsMatch(original, "EventType$")) - { - return "Event Type"; - } - - return original.Substring(0, 1).ToUpper() + Regex.Replace(original.Substring(1), "([A-Z]+[a-z])", " $1"); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using UniRx; +using UnityEditor; +using UnityEditor.Experimental.GraphView; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; +using Object = UnityEngine.Object; + +namespace UniFlow.Editor +{ + public class FlowNode : Node, IRemovableElement + { + public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener) + { + ConnectorInfo = connectorInfo; + EdgeConnectorListener = edgeConnectorListener; + } + + public void Initialize() + { + name = ConnectorInfo.Name; + title = ConnectorInfo.Name; + styleSheets.Add(AssetReferences.Instance.FlowNode); + capabilities = + Capabilities.Selectable | +// Capabilities.Collapsible | +// Capabilities.Resizable | + Capabilities.Movable | + Capabilities.Deletable | + Capabilities.Droppable | + Capabilities.Ascendable | + Capabilities.Renamable; + + if (ConnectorInfo.GameObject == default) + { + ConnectorInfo.GameObject = DeterminateGameObject(); + } + + if (ConnectorInfo.Connector == default) + { + ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; + } + + AddParameters(); + AddPorts(); + RegisterCallback((GeometryChangedEvent e) => ApplyPosition()); + ConnectorInfo + .Connector? + .OnConnectSubject + .Subscribe( + x => + { + var messagedBorder = new VisualElement {name = "messaged-border"}; + Add(messagedBorder); + Observable.Timer(TimeSpan.FromSeconds(1.0)).Subscribe(_ => Remove(messagedBorder)); + } + ); + } + + public Port InputPort { get; private set; } + public Port OutputPort { get; private set; } + + internal ConnectorInfo ConnectorInfo { get; } + + private IEdgeConnectorListener EdgeConnectorListener { get; } + + private const string DefaultTargetGameObjectName = "UniFlowController"; + private static IEnumerable ParameterNamesHideInNode { get; } = new List + { + "actAsTrigger", + "targetComponents", + "targetIds", + }; + + private static IDictionary> CreateFieldFunctions { get; } = new Dictionary> + { + {typeof(string), CreateBindableElement}, + {typeof(int), CreateBindableElement}, + {typeof(float), CreateBindableElement}, + {typeof(double), CreateBindableElement}, + {typeof(bool), CreateBindableElement}, + {typeof(Object), CreateBindableElement}, + }; + + void IRemovableElement.RemoveFromGraphView() + { + if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is Component component)) + { + return; + } + + Undo.DestroyObjectImmediate(component); + FlowEditorWindow.Window.FlowGraphView.SetupActAsTrigger(); + } + + public Vector2 GetRecordedPosition() + { + return ((ConnectorBase) ConnectorInfo.Connector).FlowGraphNodePosition; + } + + public void ApplyPosition() + { + if (!(ConnectorInfo.Connector is ConnectorBase connector) || connector == default || Mathf.Approximately(layout.position.magnitude, 0.0f)) + { + return; + } + + Undo.RecordObject(connector, "Move Node"); + // ReSharper disable once InvertIf + if (connector.FlowGraphNodePosition != layout.position) + { + connector.FlowGraphNodePosition = layout.position; + EditorUtility.SetDirty(connector); + } + } + + public void ApplyTargetConnectors() + { + if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is ConnectorBase connector) || connector == default) + { + return; + } + + Undo.RecordObject(connector, "Apply Target Connectors"); + connector.TargetComponents = OutputPort? + .connections + .Select(x => x.input.node as FlowNode) + .Where(x => x != default) + .Select(x => x.ConnectorInfo.Connector) + .OfType(); + EditorUtility.SetDirty(connector); + } + + private void AddParameters() + { + var contentsElement = this.Q("contents"); + + var parametersElement = new VisualElement {name = "parameters"}; + { + var dividerElement = new VisualElement {name = "divider"}; + dividerElement.AddToClassList("horizontal"); + parametersElement.Add(dividerElement); + + var itemsElement = new VisualElement {name = "items"}; + parametersElement.Add(itemsElement); + + { + var element = new VisualElement(); + var field = new ObjectField("GameObject") {value = ConnectorInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; + field.RegisterValueChangedCallback( + x => + { + var groupId = Undo.GetCurrentGroup(); + + if (x.previousValue != default && ConnectorInfo.Connector is Component component && component != default) + { + Undo.DestroyObjectImmediate(component); + EditorUtility.SetDirty(x.previousValue); + } + + if (x.newValue != default && x.newValue is GameObject newGameObject) + { + ConnectorInfo.GameObject = newGameObject; + ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; + ConnectorInfo.ApplyParameters(); + ApplyTargetConnectors(); + InputPort?.connections.Select(y => y.output.node).OfType().ToList().ForEach(y => y.ApplyTargetConnectors()); + EditorUtility.SetDirty(x.newValue); + } + + if (x.previousValue != default && x.previousValue is GameObject previousGameObject && previousGameObject.name == "Dummy") + { + Object.Destroy(previousGameObject); + } + + Undo.CollapseUndoOperations(groupId); + } + ); + + element.Add(field); + itemsElement.Add(element); + + if (ConnectorInfo.ParameterList.Any(x => !ParameterNamesHideInNode.Contains(x.Name))) + { + var innerDividerElement = new VisualElement {name = "divider"}; + innerDividerElement.AddToClassList("horizontal"); + itemsElement.Add(innerDividerElement); + } + } + + foreach (var parameter in ConnectorInfo.ParameterList) + { + if (ParameterNamesHideInNode.Contains(parameter.Name)) + { + continue; + } + + var element = new VisualElement(); + var field = CreateField(ConnectorInfo, parameter); + element.Add(field); + itemsElement.Add(element); + } + } + + contentsElement.Add(parametersElement); + } + + private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) + { + // Generic types field only be rendered by PropertyField + if ( + parameter.Type.IsGenericType + && ( + typeof(List<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) + || typeof(ExposedReference<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) + ) + ) + { + if (connectorInfo.GameObject == default || connectorInfo.Connector == default) + { + return null; + } + + var serializedObject = new SerializedObject(connectorInfo.Connector as Component); + var field = new PropertyField(serializedObject.FindProperty(parameter.Name), ToDisplayName(parameter.Name)); + field.Bind(serializedObject); + return field; + } + + // EnumField does not work unless the initial value is given to the second argument + if (parameter.Type.IsEnum) + { + var field = new EnumField(ToDisplayName(parameter.Name), parameter.Value == default ? (Enum) Activator.CreateInstance(parameter.Type) : (Enum) parameter.Value); + field.RegisterValueChangedCallback( + x => + { + parameter.Value = x.newValue; + Undo.RecordObject(connectorInfo.Connector as Component, $"Change {connectorInfo.Name}.{parameter.Name}"); + connectorInfo.ApplyParameter(parameter); + EditorUtility.SetDirty(connectorInfo.Connector as Component); + } + ); + return field; + } + + var fieldType = parameter.Type; + + if (typeof(Object).IsAssignableFrom(parameter.Type)) + { + fieldType = typeof(Object); + } + + return CreateFieldFunctions[fieldType](connectorInfo, parameter); + } + + private static BindableElement CreateBindableElement(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) where TResult : BaseField, new() + { + var field = new TResult + { + label = ToDisplayName(parameter.Name), + }; + if (parameter.Value != default) + { + field.value = (TValue) parameter.Value; + } + + if (field is INotifyValueChanged notifyValueChanged) + { + notifyValueChanged.RegisterValueChangedCallback( + x => + { + // 直接 Component 監視させちゃう? + Undo.RecordObject(FlowEditorWindow.Window, "Change Value"); + parameter.Value = x.newValue; + connectorInfo.ApplyParameter(parameter); + FlowEditorWindow.Window.ForceRegisterUndo(); + EditorUtility.SetDirty(connectorInfo.Connector as Component); + } + ); + } + + // ReSharper disable once InvertIf + if (typeof(TValue) == typeof(Object) && field is ObjectField objectField) + { + objectField.objectType = parameter.Type; + objectField.allowSceneObjects = true; + } + + return field; + } + + private static GameObject DeterminateGameObject() + { + if (Selection.activeGameObject != default) + { + return Selection.activeGameObject; + } + + if (GameObject.Find(DefaultTargetGameObjectName) != default) + { + return GameObject.Find(DefaultTargetGameObjectName); + } + + var go = new GameObject(DefaultTargetGameObjectName); + Undo.RegisterCreatedObjectUndo(go, "New UniFlowController"); + return go; + } + + private void AddPorts() + { + if (typeof(IConnector).IsAssignableFrom(ConnectorInfo.Type)) + { + OutputPort = FlowPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, EdgeConnectorListener); + OutputPort.portName = "Out"; + outputContainer.Add(OutputPort); + } + else + { + outputContainer.RemoveFromHierarchy(); + } + + InputPort = FlowPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi); + InputPort.portName = "In"; + inputContainer.Add(InputPort); + + foreach (var suppliableParameter in ConnectorInfo.SuppliableParameterList) + { + var suppliedPort = FlowPort.Create(Orientation.Vertical, Direction.Input, Port.Capacity.Multi); + suppliedPort.portName = suppliableParameter.Name; + inputContainer.Add(suppliedPort); + } + } + + private static string ToDisplayName(string original) + { + if (Regex.IsMatch(original, "ControlMethod$")) + { + return "Control Method"; + } + + if (Regex.IsMatch(original, "EventType$")) + { + return "Event Type"; + } + + return original.Substring(0, 1).ToUpper() + Regex.Replace(original.Substring(1), "([A-Z]+[a-z])", " $1"); + } + } +} diff --git a/Assets/Editor/UniFlow.Editor.asmdef b/Assets/Editor/UniFlow.Editor.asmdef index a264c8d..6a7678e 100644 --- a/Assets/Editor/UniFlow.Editor.asmdef +++ b/Assets/Editor/UniFlow.Editor.asmdef @@ -1,7 +1,8 @@ { "name": "UniFlow.Editor", "references": [ - "GUID:04f82f1ff3df44e29a1b2cce70510c34" + "GUID:04f82f1ff3df44e29a1b2cce70510c34", + "GUID:560b04d1a97f54a4e82edc0cbbb69285" ], "includePlatforms": [ "Editor" diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 7059395..5c54602 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -49,6 +49,8 @@ public Vector2 FlowGraphNodePosition get => flowGraphNodePosition; set => flowGraphNodePosition = value; } + + public ISubject OnConnectSubject { get; } = new Subject(); #endif [UsedImplicitly] public virtual bool ActAsTrigger @@ -78,6 +80,9 @@ void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> Messages = massages; return (this as IConnector) .OnConnectAsObservable(latestMessage) +#if UNITY_EDITOR + .Do(OnConnectSubject.OnNext) +#endif .Select(x => (latestMessage: x, messages: (massages ?? Messages.Create()).Append(x))); } ); diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index 0ec0e0e..92532d7 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -1,4 +1,5 @@ using System; +using UniRx; namespace UniFlow { @@ -6,5 +7,8 @@ public interface IConnector { IObservable OnConnectAsObservable(IMessage latestMessage); void Connect(IObservable<(IMessage latestMessage, Messages massages)> source); +#if UNITY_EDITOR + ISubject OnConnectSubject { get; } +#endif } -} \ No newline at end of file +} From 09504b6124e0541074b7e20d703868b206353884 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:34:09 +0900 Subject: [PATCH 166/453] :sparkles: Add injectable type --- Assets/Scripts/ValueInjectionType.cs | 23 +++++++++++++++++++++++ Assets/Scripts/ValueInjectionType.cs.meta | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 Assets/Scripts/ValueInjectionType.cs create mode 100644 Assets/Scripts/ValueInjectionType.cs.meta diff --git a/Assets/Scripts/ValueInjectionType.cs b/Assets/Scripts/ValueInjectionType.cs new file mode 100644 index 0000000..8694bdd --- /dev/null +++ b/Assets/Scripts/ValueInjectionType.cs @@ -0,0 +1,23 @@ +using JetBrains.Annotations; + +namespace UniFlow +{ + [PublicAPI] + public enum ValueInjectionType + { + Bool, + Int, + Float, + String, + Enum, + Object, + Vector2, + Vector3, + Vector4, + Quaternion, + Vector2Int, + Vector3Int, + Color, + Color32, + } +} diff --git a/Assets/Scripts/ValueInjectionType.cs.meta b/Assets/Scripts/ValueInjectionType.cs.meta new file mode 100644 index 0000000..1e58056 --- /dev/null +++ b/Assets/Scripts/ValueInjectionType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 863bfd7492954f2fae78a0a6aef429f9 +timeCreated: 1569820671 \ No newline at end of file From b12797d26c92eb963caac025a97704a64315e72d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:35:19 +0900 Subject: [PATCH 167/453] :sparkles: Add type based value provider --- .../Scripts/Connector/ValueProvider/Bool.cs | 21 +++++++++++++++++ .../Connector/ValueProvider/Bool.cs.meta | 3 +++ .../Scripts/Connector/ValueProvider/Color.cs | 23 +++++++++++++++++++ .../Connector/ValueProvider/Color.cs.meta | 3 +++ .../Connector/ValueProvider/Color32.cs | 23 +++++++++++++++++++ .../Connector/ValueProvider/Color32.cs.meta | 3 +++ .../Scripts/Connector/ValueProvider/Float.cs | 21 +++++++++++++++++ .../Connector/ValueProvider/Float.cs.meta | 3 +++ Assets/Scripts/Connector/ValueProvider/Int.cs | 21 +++++++++++++++++ .../Connector/ValueProvider/Int.cs.meta | 3 +++ .../Scripts/Connector/ValueProvider/Object.cs | 21 +++++++++++++++++ .../Connector/ValueProvider/Object.cs.meta | 3 +++ .../Connector/ValueProvider/Quaternion.cs | 23 +++++++++++++++++++ .../ValueProvider/Quaternion.cs.meta | 3 +++ .../Scripts/Connector/ValueProvider/String.cs | 21 +++++++++++++++++ .../Connector/ValueProvider/String.cs.meta | 3 +++ .../Connector/ValueProvider/Vector2.cs | 23 +++++++++++++++++++ .../Connector/ValueProvider/Vector2.cs.meta | 3 +++ .../Connector/ValueProvider/Vector2Int.cs | 23 +++++++++++++++++++ .../ValueProvider/Vector2Int.cs.meta | 3 +++ .../Connector/ValueProvider/Vector3.cs | 23 +++++++++++++++++++ .../Connector/ValueProvider/Vector3.cs.meta | 3 +++ .../Connector/ValueProvider/Vector3Int.cs | 23 +++++++++++++++++++ .../ValueProvider/Vector3Int.cs.meta | 3 +++ .../Connector/ValueProvider/Vector4.cs | 23 +++++++++++++++++++ .../Connector/ValueProvider/Vector4.cs.meta | 3 +++ 26 files changed, 328 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueProvider/Bool.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Bool.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Color.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Color.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Color32.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Color32.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Float.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Float.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Int.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Int.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Object.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Object.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Quaternion.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Quaternion.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/String.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/String.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2Int.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2Int.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3Int.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3Int.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector4.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector4.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs b/Assets/Scripts/Connector/ValueProvider/Bool.cs new file mode 100644 index 0000000..067f4b4 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Bool.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] + public class Bool : ValueProviderBase + { + [SerializeField] private bool value = default; + private bool Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Bool)] private PublishBoolEvent publisher = default; + private PublishBoolEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); + + protected override bool Provide() + { + Publisher.Invoke(Value); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs.meta b/Assets/Scripts/Connector/ValueProvider/Bool.cs.meta new file mode 100644 index 0000000..1940882 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Bool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f40afbbd3c18478284b25f52e2391fbb +timeCreated: 1569827844 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs b/Assets/Scripts/Connector/ValueProvider/Color.cs new file mode 100644 index 0000000..0cfb61e --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Color.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] + public class Color : ValueProviderBase + { + [SerializeField] private UnityEngine.Color value = default; + private UnityEngine.Color Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Color)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Color Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs.meta b/Assets/Scripts/Connector/ValueProvider/Color.cs.meta new file mode 100644 index 0000000..78a184d --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Color.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0639b3698c8f436b8ccf44a4bd6e4305 +timeCreated: 1569828511 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs b/Assets/Scripts/Connector/ValueProvider/Color32.cs new file mode 100644 index 0000000..762afee --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Color32.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] + public class Color32 : ValueProviderBase + { + [SerializeField] private UnityEngine.Color32 value = default; + private UnityEngine.Color32 Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Color32)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Color32 Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs.meta b/Assets/Scripts/Connector/ValueProvider/Color32.cs.meta new file mode 100644 index 0000000..48badab --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Color32.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f7b8fae7b3e84afdb21533393417dc38 +timeCreated: 1569828529 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs b/Assets/Scripts/Connector/ValueProvider/Float.cs new file mode 100644 index 0000000..f6c53fd --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Float.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] + public class Float : ValueProviderBase + { + [SerializeField] private float value = default; + private float Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Float)] private PublishFloatEvent publisher = default; + private PublishFloatEvent Publisher => publisher ?? (publisher = new PublishFloatEvent()); + + protected override float Provide() + { + Publisher.Invoke(Value); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs.meta b/Assets/Scripts/Connector/ValueProvider/Float.cs.meta new file mode 100644 index 0000000..c443565 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Float.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c9eb534fafe24ff5be75bd0979935c75 +timeCreated: 1569827937 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs b/Assets/Scripts/Connector/ValueProvider/Int.cs new file mode 100644 index 0000000..19027de --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Int.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] + public class Int : ValueProviderBase + { + [SerializeField] private int value = default; + private int Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Int)] private PublishIntEvent publisher = default; + private PublishIntEvent Publisher => publisher ?? (publisher = new PublishIntEvent()); + + protected override int Provide() + { + Publisher.Invoke(Value); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs.meta b/Assets/Scripts/Connector/ValueProvider/Int.cs.meta new file mode 100644 index 0000000..ec90f3d --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Int.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9f73964dfd154496ba8800ec1ac003c8 +timeCreated: 1569822622 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs b/Assets/Scripts/Connector/ValueProvider/Object.cs new file mode 100644 index 0000000..0e48db4 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Object.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] + public class Object : ValueProviderBase + { + [SerializeField] private UnityEngine.Object value = default; + private UnityEngine.Object Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Object)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Object Provide() + { + Publisher.Invoke(Value); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs.meta b/Assets/Scripts/Connector/ValueProvider/Object.cs.meta new file mode 100644 index 0000000..8d9fbd2 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Object.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 421990897f1b4ef7aeba179ca09d18d8 +timeCreated: 1569828035 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs new file mode 100644 index 0000000..faab3ce --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] + public class Quaternion : ValueProviderBase + { + [SerializeField] private UnityEngine.Quaternion value = default; + private UnityEngine.Quaternion Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Quaternion)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Quaternion Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs.meta b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs.meta new file mode 100644 index 0000000..c4a1a21 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1c5281b90d9b43acbf7f93ad83b830a8 +timeCreated: 1569828300 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs b/Assets/Scripts/Connector/ValueProvider/String.cs new file mode 100644 index 0000000..f1244cc --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/String.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] + public class String : ValueProviderBase + { + [SerializeField] private string value = default; + private string Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.String)] private PublishStringEvent publisher = default; + private PublishStringEvent Publisher => publisher ?? (publisher = new PublishStringEvent()); + + protected override string Provide() + { + Publisher.Invoke(Value); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs.meta b/Assets/Scripts/Connector/ValueProvider/String.cs.meta new file mode 100644 index 0000000..d258b71 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/String.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1856ef2ce1ab49259056493a0ffa28d7 +timeCreated: 1569827955 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs b/Assets/Scripts/Connector/ValueProvider/Vector2.cs new file mode 100644 index 0000000..c642525 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector2.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] + public class Vector2 : ValueProviderBase + { + [SerializeField] private UnityEngine.Vector2 value = default; + private UnityEngine.Vector2 Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector2)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Vector2 Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector2.cs.meta new file mode 100644 index 0000000..92aac38 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector2.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3cdec89c4b7845deb0657984ca4038e7 +timeCreated: 1569828093 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs new file mode 100644 index 0000000..41bbaa2 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] + public class Vector2Int : ValueProviderBase + { + [SerializeField] private UnityEngine.Vector2Int value = default; + private UnityEngine.Vector2Int Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector2Int)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Vector2Int Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs.meta new file mode 100644 index 0000000..475f1c4 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 73b7633e5fb241d09505f87c560d2117 +timeCreated: 1569828365 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs b/Assets/Scripts/Connector/ValueProvider/Vector3.cs new file mode 100644 index 0000000..d939793 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector3.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] + public class Vector3 : ValueProviderBase + { + [SerializeField] private UnityEngine.Vector3 value = default; + private UnityEngine.Vector3 Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector3)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Vector3 Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector3.cs.meta new file mode 100644 index 0000000..a406fc6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector3.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 869351b3bbde4d79b360931737e3c6cb +timeCreated: 1569828247 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs new file mode 100644 index 0000000..fdaefa9 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] + public class Vector3Int : ValueProviderBase + { + [SerializeField] private UnityEngine.Vector3Int value = default; + private UnityEngine.Vector3Int Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector3Int)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Vector3Int Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs.meta new file mode 100644 index 0000000..090d1df --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: af13c05aadb54ce3932cb8f0622b6ecf +timeCreated: 1569828386 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs b/Assets/Scripts/Connector/ValueProvider/Vector4.cs new file mode 100644 index 0000000..1a160a7 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector4.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] + public class Vector4 : ValueProviderBase + { + [SerializeField] private UnityEngine.Vector4 value = default; + private UnityEngine.Vector4 Value => value; + + [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector4)] private PublishObjectEvent publisher = default; + private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override UnityEngine.Vector4 Provide() + { + var publishValue = ScriptableObject.CreateInstance(); + publishValue.Value = Value; + Publisher.Invoke(publishValue); + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector4.cs.meta new file mode 100644 index 0000000..515ba9f --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector4.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7e2b547557774f59acd6942e843c1680 +timeCreated: 1569828269 \ No newline at end of file From 4398e51ea470a35b62c8a028dc355d516ad94c33 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:35:39 +0900 Subject: [PATCH 168/453] :sparkles: Add attributes --- .../Attribute/ValuePublisherAttribute.cs | 17 +++++++++++++++++ .../Attribute/ValuePublisherAttribute.cs.meta | 3 +++ .../Scripts/Attribute/ValueReceiverAttribute.cs | 17 +++++++++++++++++ .../Attribute/ValueReceiverAttribute.cs.meta | 3 +++ 4 files changed, 40 insertions(+) create mode 100644 Assets/Scripts/Attribute/ValuePublisherAttribute.cs create mode 100644 Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta create mode 100644 Assets/Scripts/Attribute/ValueReceiverAttribute.cs create mode 100644 Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs new file mode 100644 index 0000000..ea6f1ce --- /dev/null +++ b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace UniFlow.Attribute +{ + [AttributeUsage(AttributeTargets.Field)] + public class ValuePublisherAttribute : System.Attribute + { + public ValuePublisherAttribute(string name, ValueInjectionType type) + { + Name = name; + Type = type; + } + + public string Name { get; } + public ValueInjectionType Type { get; } + } +} diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta new file mode 100644 index 0000000..7df1805 --- /dev/null +++ b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f05906e8214546feb5e722595acdac6a +timeCreated: 1569328347 \ No newline at end of file diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs new file mode 100644 index 0000000..aab5dee --- /dev/null +++ b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace UniFlow.Attribute +{ + [AttributeUsage(AttributeTargets.Method)] + public class ValueReceiverAttribute : System.Attribute + { + public ValueReceiverAttribute(string name, ValueInjectionType type) + { + Name = name; + Type = type; + } + + public string Name { get; } + public ValueInjectionType Type { get; } + } +} diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta new file mode 100644 index 0000000..bf5f9fd --- /dev/null +++ b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c282cbfa2c94c2a8bfe683cfa504cf5 +timeCreated: 1569313783 \ No newline at end of file From 22963407b009cf038773505614e8d46354aa1467 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:36:23 +0900 Subject: [PATCH 169/453] :sparkles: Add StructObject for UnityEvent * UnityEvent only supports bool, int, float, string and Object --- Assets/Scripts/StructObject.cs | 65 +++++++++++++++++++++++++++++ Assets/Scripts/StructObject.cs.meta | 3 ++ 2 files changed, 68 insertions(+) create mode 100644 Assets/Scripts/StructObject.cs create mode 100644 Assets/Scripts/StructObject.cs.meta diff --git a/Assets/Scripts/StructObject.cs b/Assets/Scripts/StructObject.cs new file mode 100644 index 0000000..83c3663 --- /dev/null +++ b/Assets/Scripts/StructObject.cs @@ -0,0 +1,65 @@ +using System; +using UnityEngine; + +namespace UniFlow +{ + [Serializable] + public abstract class StructObject : ScriptableObject where T : struct + { + [SerializeField] private T value = default; + + public T Value + { + get => value; + set => this.value = value; + } + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector2", fileName = "Vector2Object", order = (int) ValueInjectionType.Vector2)] + public class Vector2Object : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector3", fileName = "Vector3Object", order = (int) ValueInjectionType.Vector3)] + public class Vector3Object : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector4", fileName = "Vector4Object", order = (int) ValueInjectionType.Vector4)] + public class Vector4Object : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Quaternion", fileName = "QuaternionObject", order = (int) ValueInjectionType.Quaternion)] + public class QuaternionObject : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector2Int", fileName = "Vector2IntObject", order = (int) ValueInjectionType.Vector2Int)] + public class Vector2IntObject : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector3Int", fileName = "Vector3IntObject", order = (int) ValueInjectionType.Vector3Int)] + public class Vector3IntObject : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Color", fileName = "ColorObject", order = (int) ValueInjectionType.Color)] + public class ColorObject : StructObject + { + } + + [Serializable] + [CreateAssetMenu(menuName = "UniFlow/StructObject/Color32", fileName = "Color32Object", order = (int) ValueInjectionType.Color32)] + public class Color32Object : StructObject + { + } +} diff --git a/Assets/Scripts/StructObject.cs.meta b/Assets/Scripts/StructObject.cs.meta new file mode 100644 index 0000000..0a92f9c --- /dev/null +++ b/Assets/Scripts/StructObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1f3fb379b2344c4bbcf255134d676047 +timeCreated: 1569823587 \ No newline at end of file From 32ea056b86d1669c4ba59a26be89523bf5474ee0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:37:15 +0900 Subject: [PATCH 170/453] :sparkles: Add ConnectorType enum --- Assets/Scripts/ConnectorType.cs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 123dac9..d46116d 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -40,6 +40,20 @@ public enum ConnectorType UnloadScene_Enum, ValueProvider = 1000, + ValueProviderBool, + ValueProviderInt, + ValueProviderFloat, + ValueProviderString, + ValueProviderEnum, + ValueProviderObject, + ValueProviderVector2, + ValueProviderVector3, + ValueProviderVector4, + ValueProviderQuaternion, + ValueProviderVector2Int, + ValueProviderVector3Int, + ValueProviderColor, + ValueProviderColor32, ValueComparerBool = 2000, ValueComparerInt, @@ -47,6 +61,14 @@ public enum ConnectorType ValueComparerString, ValueComparerEnum, ValueComparerObject, + ValueComparerVector2, + ValueComparerVector3, + ValueComparerVector4, + ValueComparerQuaternion, + ValueComparerVector2Int, + ValueComparerVector3Int, + ValueComparerColor, + ValueComparerColor32, Timer = 9000, Interval, From 1920af16dad27313f8499cb1bfc3861eca01c99f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:37:52 +0900 Subject: [PATCH 171/453] :name_badge: Rename connector --- .../Connector/Controller/CreateInstance.cs | 57 --------------- .../Connector/Controller/InstantiateObject.cs | 73 +++++++++++++++++++ ...ance.cs.meta => InstantiateObject.cs.meta} | 0 Assets/Scripts/ConnectorType.cs | 4 +- 4 files changed, 75 insertions(+), 59 deletions(-) delete mode 100644 Assets/Scripts/Connector/Controller/CreateInstance.cs create mode 100644 Assets/Scripts/Connector/Controller/InstantiateObject.cs rename Assets/Scripts/Connector/Controller/{CreateInstance.cs.meta => InstantiateObject.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs b/Assets/Scripts/Connector/Controller/CreateInstance.cs deleted file mode 100644 index 074bdeb..0000000 --- a/Assets/Scripts/Connector/Controller/CreateInstance.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/CreateInstance", (int) ConnectorType.CreateInstance)] - public class CreateInstance : ConnectorBase, IValueProvider - { - [SerializeField] private GameObject source = default; - private GameObject Source => source == default ? gameObject : source; - - [SerializeField] private Transform parent = default; - private Transform Parent => parent == default ? transform : parent; - - private ISubject GameObjectSubject { get; } = new Subject(); - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - var go = Instantiate(Source, Parent); - GameObjectSubject.OnNext(go); - return Observable.Return(Message.Create(this, go)); - -// return Observable -// .Create( -// observer => -// { -// var go = Instantiate(Source, Parent); -// GameObjectSubject.OnNext(go); -// observer.OnNext(Message.Create(this, go)); -// return Disposable; -// } -// ); - } - - public class Message : MessageBase, IValueHolder - { - GameObject IValueHolder.Value => Data; - - public static Message Create(CreateInstance connectable, GameObject gameObject) - { - return Create(ConnectorType.Custom, connectable, gameObject); - } - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - IObservable IValueProvider.OnProvideAsObservable() - { - return GameObjectSubject; - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateObject.cs new file mode 100644 index 0000000..b8733a5 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/InstantiateObject.cs @@ -0,0 +1,73 @@ +using System; +using JetBrains.Annotations; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/InstantiateObject", (int) ConnectorType.InstantiateObject)] + public class InstantiateObject : ConnectorBase, IValueProvider + { + [SerializeField] private Object source = default; + + [SerializeField] private Transform parent = default; + + [SerializeField] [ValuePublisher("Instantiated", ValueInjectionType.Object)] private PublishObjectEvent publishInstantiatedGameObject = default; + private PublishObjectEvent PublishInstantiatedGameObject => publishInstantiatedGameObject ?? (publishInstantiatedGameObject = new PublishObjectEvent()); + + [SerializeField] [ValuePublisher("Vecror2", ValueInjectionType.Vector2)] private PublishObjectEvent publishVector2 = default; + private PublishObjectEvent PublishVector2 => publishVector2 ?? (publishVector2 = new PublishObjectEvent()); + + [SerializeField] [ValuePublisher("Int", ValueInjectionType.Int)] private PublishIntEvent publishInt = default; + private PublishIntEvent PublishInt => publishInt ?? (publishInt = new PublishIntEvent()); + + [UsedImplicitly] public Object Source + { + get => source == default ? gameObject : source; + set => source = value; + } + [UsedImplicitly] public Transform Parent + { + get => parent == default ? transform : parent; + set => parent = value; + } + + private ISubject ObjectSubject { get; } = new Subject(); + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + if (latestMessage.IsValueHolder()) + { + Source = latestMessage.GetHeldValue(); + } + + var go = Instantiate(Source, Parent); + PublishInstantiatedGameObject.Invoke(go as GameObject); + ObjectSubject.OnNext(go); + return Observable.Return(Message.Create(this, go)); + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + + IObservable IValueProvider.OnProvideAsObservable() + { + return ObjectSubject; + } + + public class Message : MessageBase, IValueHolder + { + Object IValueHolder.Value => Data; + + public static Message Create(InstantiateObject connectable, Object obj) + { + return Create(ConnectorType.InstantiateObject, connectable, obj); + } + } + } +} diff --git a/Assets/Scripts/Connector/Controller/CreateInstance.cs.meta b/Assets/Scripts/Connector/Controller/InstantiateObject.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Controller/CreateInstance.cs.meta rename to Assets/Scripts/Connector/Controller/InstantiateObject.cs.meta diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index d46116d..f707830 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -19,7 +19,7 @@ public enum ConnectorType PhysicsTrigger2DEvent, ActivationController = 300, - CreateInstance, + InstantiateObject, DestroyInstance, SimpleAnimationController, SimpleAnimationEvent, @@ -84,4 +84,4 @@ public enum ConnectorType Custom = -1, } -} \ No newline at end of file +} From 09022dca79344c7987c57f08092fdbb342241112 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:38:45 +0900 Subject: [PATCH 172/453] :sparkles: Add publish event --- Assets/Scripts/PublishValueEvent.cs | 31 ++++++++++++++++++++++++ Assets/Scripts/PublishValueEvent.cs.meta | 3 +++ 2 files changed, 34 insertions(+) create mode 100644 Assets/Scripts/PublishValueEvent.cs create mode 100644 Assets/Scripts/PublishValueEvent.cs.meta diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs new file mode 100644 index 0000000..62e4f00 --- /dev/null +++ b/Assets/Scripts/PublishValueEvent.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine.Events; +using Object = UnityEngine.Object; + +namespace UniFlow +{ + [Serializable] + public class PublishBoolEvent : UnityEvent + { + } + + [Serializable] + public class PublishIntEvent : UnityEvent + { + } + + [Serializable] + public class PublishFloatEvent : UnityEvent + { + } + + [Serializable] + public class PublishStringEvent : UnityEvent + { + } + + [Serializable] + public class PublishObjectEvent : UnityEvent + { + } +} diff --git a/Assets/Scripts/PublishValueEvent.cs.meta b/Assets/Scripts/PublishValueEvent.cs.meta new file mode 100644 index 0000000..28c9daf --- /dev/null +++ b/Assets/Scripts/PublishValueEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f00df9e057254dd38a2b9a28780cfdf5 +timeCreated: 1569330168 \ No newline at end of file From 2e05570a106d8d7d12a9227d2d76e94c76e7bcbf Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 16:51:39 +0900 Subject: [PATCH 173/453] :name_badge: Rename base class --- .../{ComparerBase.cs => Base.cs} | 14 ++-- .../{ComparerBase.cs.meta => Base.cs.meta} | 0 .../Scripts/Connector/ValueComparer/Bool.cs | 2 +- .../Scripts/Connector/ValueComparer/Enum.cs | 2 +- .../Scripts/Connector/ValueComparer/Float.cs | 2 +- Assets/Scripts/Connector/ValueComparer/Int.cs | 2 +- .../Scripts/Connector/ValueComparer/Object.cs | 2 +- .../Scripts/Connector/ValueComparer/String.cs | 2 +- .../{ValueProviderBase.cs => Base.cs} | 64 +++++++++---------- ...ValueProviderBase.cs.meta => Base.cs.meta} | 0 .../Scripts/Connector/ValueProvider/Bool.cs | 2 +- .../Scripts/Connector/ValueProvider/Color.cs | 2 +- .../Connector/ValueProvider/Color32.cs | 2 +- .../Scripts/Connector/ValueProvider/Float.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Int.cs | 2 +- .../Scripts/Connector/ValueProvider/Object.cs | 2 +- .../Connector/ValueProvider/Quaternion.cs | 2 +- .../Scripts/Connector/ValueProvider/String.cs | 2 +- .../Connector/ValueProvider/Vector2.cs | 2 +- .../Connector/ValueProvider/Vector2Int.cs | 2 +- .../Connector/ValueProvider/Vector3.cs | 2 +- .../Connector/ValueProvider/Vector3Int.cs | 2 +- .../Connector/ValueProvider/Vector4.cs | 2 +- 23 files changed, 58 insertions(+), 58 deletions(-) rename Assets/Scripts/Connector/ValueComparer/{ComparerBase.cs => Base.cs} (76%) rename Assets/Scripts/Connector/ValueComparer/{ComparerBase.cs.meta => Base.cs.meta} (100%) rename Assets/Scripts/Connector/ValueProvider/{ValueProviderBase.cs => Base.cs} (69%) rename Assets/Scripts/Connector/ValueProvider/{ValueProviderBase.cs.meta => Base.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/Base.cs similarity index 76% rename from Assets/Scripts/Connector/ValueComparer/ComparerBase.cs rename to Assets/Scripts/Connector/ValueComparer/Base.cs index b9bfa70..1e4d065 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/Base.cs @@ -5,16 +5,16 @@ namespace UniFlow.Connector.ValueComparer { - public abstract class ComparerBase : ConnectorBase + public abstract class Base : ConnectorBase where TOperator : Enum { - [SerializeField] private TValue value = default; + [SerializeField] private TValue expect = default; [SerializeField] private TOperator @operator = default; [UsedImplicitly] public TValue Value { - get => value; - set => this.value = value; + get => expect; + set => expect = value; } [UsedImplicitly] public TOperator Operator { @@ -41,12 +41,12 @@ private void OnDestroy() Disposable.Dispose(); } - public class Message : MessageBase> + public class Message : MessageBase> { - public static Message Create(ComparerBase sender) + public static Message Create(Base sender) { return Create(ConnectorType.ValueComparerEnum, sender); } } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta b/Assets/Scripts/Connector/ValueComparer/Base.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta rename to Assets/Scripts/Connector/ValueComparer/Base.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/Bool.cs b/Assets/Scripts/Connector/ValueComparer/Bool.cs index 5beaba9..61693a1 100644 --- a/Assets/Scripts/Connector/ValueComparer/Bool.cs +++ b/Assets/Scripts/Connector/ValueComparer/Bool.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Bool", (int) ConnectorType.ValueComparerBool)] - public class Bool : ComparerBase + public class Bool : Base { protected override bool Compare(bool compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Enum.cs b/Assets/Scripts/Connector/ValueComparer/Enum.cs index 430548d..e594752 100644 --- a/Assets/Scripts/Connector/ValueComparer/Enum.cs +++ b/Assets/Scripts/Connector/ValueComparer/Enum.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueComparer { - public abstract class Enum : ComparerBase.OperatorType> where TEnum : Enum + public abstract class Enum : Base.OperatorType> where TEnum : Enum { protected override bool Compare(TEnum compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Float.cs b/Assets/Scripts/Connector/ValueComparer/Float.cs index b435443..8eaff50 100644 --- a/Assets/Scripts/Connector/ValueComparer/Float.cs +++ b/Assets/Scripts/Connector/ValueComparer/Float.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Float", (int) ConnectorType.ValueComparerFloat)] - public class Float : ComparerBase + public class Float : Base { protected override bool Compare(float compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Int.cs b/Assets/Scripts/Connector/ValueComparer/Int.cs index 9c6b59f..ad3a7a1 100644 --- a/Assets/Scripts/Connector/ValueComparer/Int.cs +++ b/Assets/Scripts/Connector/ValueComparer/Int.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Int", (int) ConnectorType.ValueComparerInt)] - public class Int : ComparerBase + public class Int : Base { protected override bool Compare(int compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Object.cs b/Assets/Scripts/Connector/ValueComparer/Object.cs index 6c3fd0d..aa309ac 100644 --- a/Assets/Scripts/Connector/ValueComparer/Object.cs +++ b/Assets/Scripts/Connector/ValueComparer/Object.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Object", (int) ConnectorType.ValueComparerObject)] - public class Object : ComparerBase + public class Object : Base { protected override bool Compare(UnityEngine.Object compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/String.cs b/Assets/Scripts/Connector/ValueComparer/String.cs index 4aed886..0441438 100644 --- a/Assets/Scripts/Connector/ValueComparer/String.cs +++ b/Assets/Scripts/Connector/ValueComparer/String.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/String", (int) ConnectorType.ValueComparerString)] - public class String : ComparerBase + public class String : Base { protected override bool Compare(string compareValue) { diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/Base.cs similarity index 69% rename from Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs rename to Assets/Scripts/Connector/ValueProvider/Base.cs index fc6673f..d64b7a3 100644 --- a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/Base.cs @@ -1,32 +1,32 @@ -using System; -using UniRx; - -namespace UniFlow.Connector.ValueProvider -{ - public abstract class ValueProviderBase : ConnectorBase - { - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return Observable.Return(Message.Create(this, Provide())); - } - - protected abstract TValue Provide(); - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase, TValue>, IValueHolder - { - public static Message Create(ValueProviderBase sender, TValue value) - { - return Create(ConnectorType.ValueProvider, sender, value); - } - - public TValue Value => Data; - } - } -} \ No newline at end of file +using System; +using UniRx; + +namespace UniFlow.Connector.ValueProvider +{ + public abstract class Base : ConnectorBase + { + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + return Observable.Return(Message.Create(this, Provide())); + } + + protected abstract TValue Provide(); + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase, TValue>, IValueHolder + { + public static Message Create(Base sender, TValue value) + { + return Create(ConnectorType.ValueProvider, sender, value); + } + + public TValue Value => Data; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/Base.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Base.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs b/Assets/Scripts/Connector/ValueProvider/Bool.cs index 067f4b4..81da362 100644 --- a/Assets/Scripts/Connector/ValueProvider/Bool.cs +++ b/Assets/Scripts/Connector/ValueProvider/Bool.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class Bool : ValueProviderBase + public class Bool : Base { [SerializeField] private bool value = default; private bool Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs b/Assets/Scripts/Connector/ValueProvider/Color.cs index 0cfb61e..6e08aeb 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class Color : ValueProviderBase + public class Color : Base { [SerializeField] private UnityEngine.Color value = default; private UnityEngine.Color Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs b/Assets/Scripts/Connector/ValueProvider/Color32.cs index 762afee..3760637 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32 : ValueProviderBase + public class Color32 : Base { [SerializeField] private UnityEngine.Color32 value = default; private UnityEngine.Color32 Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs b/Assets/Scripts/Connector/ValueProvider/Float.cs index f6c53fd..d685bdf 100644 --- a/Assets/Scripts/Connector/ValueProvider/Float.cs +++ b/Assets/Scripts/Connector/ValueProvider/Float.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class Float : ValueProviderBase + public class Float : Base { [SerializeField] private float value = default; private float Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs b/Assets/Scripts/Connector/ValueProvider/Int.cs index 19027de..a3f7dc8 100644 --- a/Assets/Scripts/Connector/ValueProvider/Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Int.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class Int : ValueProviderBase + public class Int : Base { [SerializeField] private int value = default; private int Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs b/Assets/Scripts/Connector/ValueProvider/Object.cs index 0e48db4..402d886 100644 --- a/Assets/Scripts/Connector/ValueProvider/Object.cs +++ b/Assets/Scripts/Connector/ValueProvider/Object.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class Object : ValueProviderBase + public class Object : Base { [SerializeField] private UnityEngine.Object value = default; private UnityEngine.Object Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs index faab3ce..98026eb 100644 --- a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs +++ b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class Quaternion : ValueProviderBase + public class Quaternion : Base { [SerializeField] private UnityEngine.Quaternion value = default; private UnityEngine.Quaternion Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs b/Assets/Scripts/Connector/ValueProvider/String.cs index f1244cc..d89749c 100644 --- a/Assets/Scripts/Connector/ValueProvider/String.cs +++ b/Assets/Scripts/Connector/ValueProvider/String.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class String : ValueProviderBase + public class String : Base { [SerializeField] private string value = default; private string Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs b/Assets/Scripts/Connector/ValueProvider/Vector2.cs index c642525..510ef82 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2 : ValueProviderBase + public class Vector2 : Base { [SerializeField] private UnityEngine.Vector2 value = default; private UnityEngine.Vector2 Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs index 41bbaa2..16ad248 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2Int : ValueProviderBase + public class Vector2Int : Base { [SerializeField] private UnityEngine.Vector2Int value = default; private UnityEngine.Vector2Int Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs b/Assets/Scripts/Connector/ValueProvider/Vector3.cs index d939793..5ff8547 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3 : ValueProviderBase + public class Vector3 : Base { [SerializeField] private UnityEngine.Vector3 value = default; private UnityEngine.Vector3 Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs index fdaefa9..f158eaa 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3Int : ValueProviderBase + public class Vector3Int : Base { [SerializeField] private UnityEngine.Vector3Int value = default; private UnityEngine.Vector3Int Value => value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs b/Assets/Scripts/Connector/ValueProvider/Vector4.cs index 1a160a7..58f435a 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4 : ValueProviderBase + public class Vector4 : Base { [SerializeField] private UnityEngine.Vector4 value = default; private UnityEngine.Vector4 Value => value; From 064a4b83ea079afe2443d9f608a8e972646ee363 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:03:08 +0900 Subject: [PATCH 174/453] :sparkles: Add enum --- Assets/Scripts/ConnectorType.cs | 6 ++++++ Assets/Scripts/ValueInjectionType.cs | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index f707830..ed7c251 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -46,6 +46,9 @@ public enum ConnectorType ValueProviderString, ValueProviderEnum, ValueProviderObject, + ValueProviderGameObject, + ValueProviderTransform, + ValueProviderRectTransform, ValueProviderVector2, ValueProviderVector3, ValueProviderVector4, @@ -61,6 +64,9 @@ public enum ConnectorType ValueComparerString, ValueComparerEnum, ValueComparerObject, + ValueComparerGameObject, + ValueComparerTransform, + ValueComparerRectTransform, ValueComparerVector2, ValueComparerVector3, ValueComparerVector4, diff --git a/Assets/Scripts/ValueInjectionType.cs b/Assets/Scripts/ValueInjectionType.cs index 8694bdd..ddb3383 100644 --- a/Assets/Scripts/ValueInjectionType.cs +++ b/Assets/Scripts/ValueInjectionType.cs @@ -11,6 +11,9 @@ public enum ValueInjectionType String, Enum, Object, + GameObject, + Transform, + RectTransform, Vector2, Vector3, Vector4, From b920d7e217efec78eac406a4bc7e07e4727b946a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:09:56 +0900 Subject: [PATCH 175/453] :fire: Remove unnecessary interface: IValueHolder --- .../Controller/RaycastTargetController.cs | 234 +++++++++--------- .../Controller/RaycasterController.cs | 138 +++++------ .../Scripts/Connector/Event/TimelineSignal.cs | 16 +- .../Scripts/Connector/ValueComparer/Base.cs | 7 +- .../Scripts/Connector/ValueProvider/Base.cs | 4 +- Assets/Scripts/IValueHolder.cs | 7 - Assets/Scripts/IValueHolder.cs.meta | 3 - 7 files changed, 188 insertions(+), 221 deletions(-) delete mode 100644 Assets/Scripts/IValueHolder.cs delete mode 100644 Assets/Scripts/IValueHolder.cs.meta diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 8557301..052d42f 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -1,118 +1,116 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; -using UnityEngine.UI; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] - public class RaycastTargetController : ConnectorBase - { - [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = RaycastTargetControlMethod.Activate; - [SerializeField] private List graphics = default; - [SerializeField] private List colliders = default; - [SerializeField] private List collider2Ds = default; - - [UsedImplicitly] private RaycastTargetControlMethod RaycastTargetControlMethod - { - get => raycastTargetControlMethod; - set => raycastTargetControlMethod = value; - } - [UsedImplicitly] public IEnumerable Graphics - { - get => graphics; - set => graphics = value.ToList(); - } - [UsedImplicitly] public IEnumerable Colliders - { - get => colliders; - set => colliders = value.ToList(); - } - [UsedImplicitly] public IEnumerable Collider2Ds - { - get => collider2Ds; - set => collider2Ds = value.ToList(); - } - - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - var count = HandleActivation(); - return Observable.Return(Message.Create(this, count)); -// return Observable -// .Create( -// observer => -// { -// var count = HandleActivation(); -// observer.OnNext(Message.Create(this, count)); -// return Disposable; -// } -// ); - } - - private int HandleActivation() - { - var handleTargets = new Action[0] - .Concat( - Graphics - .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - .Select(x => new Action(() => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - ) - .Concat( - Colliders - .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - ) - .Concat( - Collider2Ds - .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - ) - .Concat( - GetComponents() - .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - .Select(x => new Action(() => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - ) - .Concat( - GetComponents() - .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - ) - .Concat( - GetComponents() - .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) - ) - .ToList(); - var count = handleTargets.Count; - handleTargets.ForEach(x => x.Invoke()); - return count; - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase, IValueHolder - { - int IValueHolder.Value => Data; - - public static Message Create(RaycastTargetController sender, int count) - { - return Create(ConnectorType.RaycastTargetController, sender, count); - } - } - } - - [PublicAPI] - public enum RaycastTargetControlMethod - { - Activate, - Deactivate, - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/RaycastTargetController", (int) ConnectorType.RaycastTargetController)] + public class RaycastTargetController : ConnectorBase + { + [SerializeField] private RaycastTargetControlMethod raycastTargetControlMethod = RaycastTargetControlMethod.Activate; + [SerializeField] private List graphics = default; + [SerializeField] private List colliders = default; + [SerializeField] private List collider2Ds = default; + + [UsedImplicitly] private RaycastTargetControlMethod RaycastTargetControlMethod + { + get => raycastTargetControlMethod; + set => raycastTargetControlMethod = value; + } + [UsedImplicitly] public IEnumerable Graphics + { + get => graphics; + set => graphics = value.ToList(); + } + [UsedImplicitly] public IEnumerable Colliders + { + get => colliders; + set => colliders = value.ToList(); + } + [UsedImplicitly] public IEnumerable Collider2Ds + { + get => collider2Ds; + set => collider2Ds = value.ToList(); + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + var count = HandleActivation(); + return Observable.Return(Message.Create(this, count)); +// return Observable +// .Create( +// observer => +// { +// var count = HandleActivation(); +// observer.OnNext(Message.Create(this, count)); +// return Disposable; +// } +// ); + } + + private int HandleActivation() + { + var handleTargets = new Action[0] + .Concat( + Graphics + .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + Colliders + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + Collider2Ds + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + GetComponents() + .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.raycastTarget = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + GetComponents() + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .Concat( + GetComponents() + .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) + .ToList(); + var count = handleTargets.Count; + handleTargets.ForEach(x => x.Invoke()); + return count; + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase + { + public static Message Create(RaycastTargetController sender, int count) + { + return Create(ConnectorType.RaycastTargetController, sender, count); + } + } + } + + [PublicAPI] + public enum RaycastTargetControlMethod + { + Activate, + Deactivate, + } +} diff --git a/Assets/Scripts/Connector/Controller/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs index a3f0183..d5ae5fc 100644 --- a/Assets/Scripts/Connector/Controller/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -1,70 +1,68 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; -using UnityEngine.EventSystems; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/RaycasterController", (int) ConnectorType.RaycasterController)] - public class RaycasterController : ConnectorBase - { - [SerializeField] private RaycasterControlMethod raycasterControlMethod = RaycasterControlMethod.Activate; - [SerializeField] private List raycasters = default; - - [UsedImplicitly] private RaycasterControlMethod RaycasterControlMethod - { - get => raycasterControlMethod; - set => raycasterControlMethod = value; - } - [UsedImplicitly] private IEnumerable Raycasters - { - get => raycasters; - set => raycasters = value.ToList(); - } - - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - var count = HandleActivation(); - return Observable.Return(Message.Create(this, count)); -// return Observable -// .Create( -// observer => -// { -// var count = HandleActivation(); -// observer.OnNext(Message.Create(this, count)); -// return Disposable; -// } -// ); - } - - private int HandleActivation() - { - var targets = Raycasters.Where(x => x.enabled != (RaycasterControlMethod == RaycasterControlMethod.Activate)).ToList(); - var count = targets.Count; - targets.ForEach(x => x.enabled = RaycasterControlMethod == RaycasterControlMethod.Activate); - return count; - } - - public class Message : MessageBase, IValueHolder - { - public static Message Create(RaycasterController sender, int count) - { - return Create(ConnectorType.RaycasterController, sender, count); - } - - public int Value => Data; - } - } - - [PublicAPI] - public enum RaycasterControlMethod - { - Activate, - Deactivate, - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/RaycasterController", (int) ConnectorType.RaycasterController)] + public class RaycasterController : ConnectorBase + { + [SerializeField] private RaycasterControlMethod raycasterControlMethod = RaycasterControlMethod.Activate; + [SerializeField] private List raycasters = default; + + [UsedImplicitly] private RaycasterControlMethod RaycasterControlMethod + { + get => raycasterControlMethod; + set => raycasterControlMethod = value; + } + [UsedImplicitly] private IEnumerable Raycasters + { + get => raycasters; + set => raycasters = value.ToList(); + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + var count = HandleActivation(); + return Observable.Return(Message.Create(this, count)); +// return Observable +// .Create( +// observer => +// { +// var count = HandleActivation(); +// observer.OnNext(Message.Create(this, count)); +// return Disposable; +// } +// ); + } + + private int HandleActivation() + { + var targets = Raycasters.Where(x => x.enabled != (RaycasterControlMethod == RaycasterControlMethod.Activate)).ToList(); + var count = targets.Count; + targets.ForEach(x => x.enabled = RaycasterControlMethod == RaycasterControlMethod.Activate); + return count; + } + + public class Message : MessageBase + { + public static Message Create(RaycasterController sender, int count) + { + return Create(ConnectorType.RaycasterController, sender, count); + } + } + } + + [PublicAPI] + public enum RaycasterControlMethod + { + Activate, + Deactivate, + } +} diff --git a/Assets/Scripts/Connector/Event/TimelineSignal.cs b/Assets/Scripts/Connector/Event/TimelineSignal.cs index 8355f58..bc3d320 100644 --- a/Assets/Scripts/Connector/Event/TimelineSignal.cs +++ b/Assets/Scripts/Connector/Event/TimelineSignal.cs @@ -51,24 +51,12 @@ public void Dispatch(Object objectReferenceParameter) Subject.OnNext((default, default, default, objectReferenceParameter)); } - public class Message : MessageBase, - IValueHolder, - IValueHolder, - IValueHolder, - IValueHolder + public class Message : MessageBase { public static Message Create(TimelineSignal sender, (int, float, string, Object) data) { return Create(ConnectorType.TimelineSignal, sender, data); } - - int IValueHolder.Value => Data.intParameter; - - float IValueHolder.Value => Data.floatParameter; - - string IValueHolder.Value => Data.stringParameter; - - Object IValueHolder.Value => Data.objectParameter; } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/Base.cs b/Assets/Scripts/Connector/ValueComparer/Base.cs index 1e4d065..e841809 100644 --- a/Assets/Scripts/Connector/ValueComparer/Base.cs +++ b/Assets/Scripts/Connector/ValueComparer/Base.cs @@ -26,12 +26,7 @@ [UsedImplicitly] public TOperator Operator public override IObservable OnConnectAsObservable(IMessage latestMessage) { - if (latestMessage.Is>() && Compare(latestMessage.As>().Value)) - { - return Observable.Return(Message.Create(this)); - } - - return Observable.Empty(); + return Observable.Return(Message.Create(this)); } protected abstract bool Compare(TValue compareValue); diff --git a/Assets/Scripts/Connector/ValueProvider/Base.cs b/Assets/Scripts/Connector/ValueProvider/Base.cs index d64b7a3..d05de5e 100644 --- a/Assets/Scripts/Connector/ValueProvider/Base.cs +++ b/Assets/Scripts/Connector/ValueProvider/Base.cs @@ -19,14 +19,12 @@ private void OnDestroy() Disposable.Dispose(); } - public class Message : MessageBase, TValue>, IValueHolder + public class Message : MessageBase, TValue> { public static Message Create(Base sender, TValue value) { return Create(ConnectorType.ValueProvider, sender, value); } - - public TValue Value => Data; } } } diff --git a/Assets/Scripts/IValueHolder.cs b/Assets/Scripts/IValueHolder.cs deleted file mode 100644 index 41a34d6..0000000 --- a/Assets/Scripts/IValueHolder.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow -{ - public interface IValueHolder : IMessage - { - T Value { get; } - } -} \ No newline at end of file diff --git a/Assets/Scripts/IValueHolder.cs.meta b/Assets/Scripts/IValueHolder.cs.meta deleted file mode 100644 index 294c458..0000000 --- a/Assets/Scripts/IValueHolder.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9e7a4d8b6e5c4144aac3f37fed11858d -timeCreated: 1568130049 \ No newline at end of file From 6fc1ac459f22634f51125c80887adf6ecd31edf4 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:10:55 +0900 Subject: [PATCH 176/453] :fire: Remove unnecessary interface: IValueProvider --- .../Connector/Controller/InstantiateObject.cs | 16 ++-------------- Assets/Scripts/IValueProvider.cs | 13 ------------- Assets/Scripts/IValueProvider.cs.meta | 3 --- 3 files changed, 2 insertions(+), 30 deletions(-) delete mode 100644 Assets/Scripts/IValueProvider.cs delete mode 100644 Assets/Scripts/IValueProvider.cs.meta diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateObject.cs index b8733a5..d0df2ef 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateObject.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/InstantiateObject", (int) ConnectorType.InstantiateObject)] - public class InstantiateObject : ConnectorBase, IValueProvider + public class InstantiateObject : ConnectorBase { [SerializeField] private Object source = default; @@ -39,11 +39,6 @@ [UsedImplicitly] public Transform Parent public override IObservable OnConnectAsObservable(IMessage latestMessage) { - if (latestMessage.IsValueHolder()) - { - Source = latestMessage.GetHeldValue(); - } - var go = Instantiate(Source, Parent); PublishInstantiatedGameObject.Invoke(go as GameObject); ObjectSubject.OnNext(go); @@ -55,15 +50,8 @@ private void OnDestroy() Disposable.Dispose(); } - IObservable IValueProvider.OnProvideAsObservable() + public class Message : MessageBase { - return ObjectSubject; - } - - public class Message : MessageBase, IValueHolder - { - Object IValueHolder.Value => Data; - public static Message Create(InstantiateObject connectable, Object obj) { return Create(ConnectorType.InstantiateObject, connectable, obj); diff --git a/Assets/Scripts/IValueProvider.cs b/Assets/Scripts/IValueProvider.cs deleted file mode 100644 index 9f0ef74..0000000 --- a/Assets/Scripts/IValueProvider.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace UniFlow -{ - public interface IValueProvider - { - } - - public interface IValueProvider : IValueProvider - { - IObservable OnProvideAsObservable(); - } -} \ No newline at end of file diff --git a/Assets/Scripts/IValueProvider.cs.meta b/Assets/Scripts/IValueProvider.cs.meta deleted file mode 100644 index 130d256..0000000 --- a/Assets/Scripts/IValueProvider.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 42eb283f78d54e9bad1360889ce40e0d -timeCreated: 1568256105 \ No newline at end of file From e14297659c88534530b9cb04fa3dd05996af2e22 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:11:37 +0900 Subject: [PATCH 177/453] :sparkles: Tweak MoveParentTransform --- .../Controller/MoveParentTransform.cs | 145 +++++++++--------- 1 file changed, 69 insertions(+), 76 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 2f4dfaf..1676f41 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,76 +1,69 @@ -using System; -using JetBrains.Annotations; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/MoveParentTransform", (int) ConnectorType.MoveParentTransform)] - public class MoveParentTransform : ConnectorBase - { - // ReSharper disable once InconsistentNaming - [SerializeField] private Transform targetTransform = default; - [SerializeField] private Transform parentTransform = default; - [SerializeField] private bool worldPositionStays = true; - - [SerializeField][SuppliableType(typeof(GameObject))] private ConnectorBase targetGameObjectProvider = default; - [SerializeField][SuppliableType(typeof(GameObject))] private ConnectorBase parentGameObjectProvider = default; - - [UsedImplicitly] public Transform Transform - { - get => targetTransform != default - ? targetTransform - : targetTransform = transform; - set => targetTransform = value; - } - [UsedImplicitly] public Transform ParentTransform - { - get => parentTransform; - set => parentTransform = value; - } - [UsedImplicitly] public bool WorldPositionStays - { - get => worldPositionStays; - set => worldPositionStays = value; - } - [UsedImplicitly] public IValueProvider TargetGameObjectProvider => targetGameObjectProvider as IValueProvider; - [UsedImplicitly] public IValueProvider ParentGameObjectProvider => parentGameObjectProvider as IValueProvider; - - private IDisposable Disposable { get; } = new CompositeDisposable(); - - protected override void CollectSuppliedValues() - { - TargetGameObjectProvider?.OnProvideAsObservable().Subscribe(x => Transform = x.transform); - ParentGameObjectProvider?.OnProvideAsObservable().Subscribe(x => ParentTransform = x.transform); - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - Transform.SetParent(ParentTransform, WorldPositionStays); - return Observable.Return(Message.Create(this, Transform)); -// return Observable -// .Create( -// observer => -// { -// Transform.SetParent(ParentTransform, WorldPositionStays); -// observer.OnNext(Message.Create(this, Transform)); -// return Disposable; -// } -// ); - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase - { - public static Message Create(MoveParentTransform sender, Transform movedTransform) - { - return Create(ConnectorType.MoveParentTransform, sender, movedTransform); - } - } - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/MoveParentTransform", (int) ConnectorType.MoveParentTransform)] + public class MoveParentTransform : ConnectorBase + { + // ReSharper disable once InconsistentNaming + [SerializeField] private Transform targetTransform = default; + [SerializeField] private Transform parentTransform = default; + [SerializeField] private bool worldPositionStays = true; + + [UsedImplicitly] public Transform TargetTransform + { + get => targetTransform != default + ? targetTransform + : targetTransform = transform; + set => targetTransform = value; + } + [UsedImplicitly] public Transform ParentTransform + { + get => parentTransform; + set => parentTransform = value; + } + [UsedImplicitly] public bool WorldPositionStays + { + get => worldPositionStays; + set => worldPositionStays = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + TargetTransform.SetParent(ParentTransform, WorldPositionStays); + return Observable.Return(Message.Create(this, TargetTransform)); + } + + [ValueReceiver("Target Transform", ValueInjectionType.Transform)] + public void ReceiveTargetTransform(Object target) + { + TargetTransform = target as Transform; + } + + [ValueReceiver("Parent Transform", ValueInjectionType.Transform)] + public void ReceiveParentTransform(Object parent) + { + ParentTransform = parent as Transform; + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase + { + public static Message Create(MoveParentTransform sender, Transform movedTransform) + { + return Create(ConnectorType.MoveParentTransform, sender, movedTransform); + } + } + } +} From b94c168510169072ea5ec725befa5fb0eb0ceb52 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:54:53 +0900 Subject: [PATCH 178/453] :fire: Remove SuppliableTypeAttribute --- Assets/Editor/Scripts/ConnectorInfo.cs | 358 ++++++++++-------- .../Attribute/SuppliableTypeAttribute.cs | 15 - .../Attribute/SuppliableTypeAttribute.cs.meta | 3 - 3 files changed, 201 insertions(+), 175 deletions(-) delete mode 100644 Assets/Scripts/Attribute/SuppliableTypeAttribute.cs delete mode 100644 Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index e1edeed..d9d6dfb 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -1,157 +1,201 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using JetBrains.Annotations; -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Editor -{ - [Serializable] - public class ConnectorInfo - { - private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) - { - GameObject = gameObject; - Connector = connector; - Type = type; - Name = name; - parameterList = parameters.ToList(); - suppliableParameterList = suppliableParameters.ToList(); - } - - public GameObject GameObject { get; set; } - public IConnector Connector { get; set; } - public Type Type { get; } - public string Name { get; } - [SerializeField] private List parameterList = default; - public IEnumerable ParameterList => parameterList; - [SerializeField] private List suppliableParameterList = default; - public IEnumerable SuppliableParameterList => suppliableParameterList; - - public void ApplyParameter(Parameter parameter) - { - if (Connector == default) - { - return; - } - - GetFieldRecursive(Type, parameter.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? - .SetValue(Connector, parameter.Value); - } - - private static FieldInfo GetFieldRecursive(Type type, string name, BindingFlags bindingFlags) - { - do - { - var fieldInfo = type.GetField(name, bindingFlags); - if (fieldInfo != default) - { - return fieldInfo; - } - - if (type.BaseType == default) - { - break; - } - - type = type.BaseType; - } while (true); - return default; - } - - public void ApplyParameters() - { - if (Connector == default) - { - return; - } - - ParameterList.ToList().ForEach(ApplyParameter); - } - - [PublicAPI] - public static ConnectorInfo Create(IConnector instance) - { - return Create(instance.GetType(), instance); - } - - [PublicAPI] - public static ConnectorInfo Create(Type type, IConnector instance = default) - { - return Create( - ((Component) instance)?.gameObject, - instance, - type, - type.Name, - CollectFields(type) - .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() == null && x.GetCustomAttribute() == null) - .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), - CollectFields(type) - .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() != null && x.GetCustomAttribute() == null) - .Select(x => SuppliableParameter.Create(x.Name, x.GetCustomAttribute().Types.ToArray())) - ); - } - - private static IEnumerable CollectFields(Type type) - { - var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - if (typeof(IConnector).IsAssignableFrom(type.BaseType)) - { - fields = fields.Concat(CollectFields(type.BaseType)).ToArray(); - } - - return fields; - } - - [PublicAPI] - public static ConnectorInfo Create(GameObject gameObject, IConnector instance, Type type, string name, IEnumerable parameters, IEnumerable suppliableParameters) - { - return new ConnectorInfo(gameObject, instance, type, name, parameters, suppliableParameters); - } - - [Serializable] - public class Parameter - { - private Parameter(Type type, string name, object value) - { - Type = type; - Name = name; - Value = value; - } - - [SerializeField] private object value = default; - - public Type Type { get; } - public string Name { get; } - public object Value - { - get => value; - set => this.value = value; - } - - public static Parameter Create(Type type, string name, object value) - { - return new Parameter(type, name, value); - } - } - - public class SuppliableParameter - { - public SuppliableParameter(string name, IEnumerable types) - { - Name = name; - Types = types; - } - - public string Name { get; } - public IEnumerable Types { get; } - - public static SuppliableParameter Create(string name, params Type[] types) - { - return new SuppliableParameter(name, types); - } - } - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using JetBrains.Annotations; +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Editor +{ + [Serializable] + public class ConnectorInfo + { + private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, string name, IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers) + { + GameObject = gameObject; + Connector = connector; + Type = type; + Name = name; + parameterList = parameters.ToList(); + ValuePublishers = valuePublishers; + ValueReceivers = valueReceivers; + } + + public GameObject GameObject { get; set; } + public IConnector Connector { get; set; } + public Type Type { get; } + public string Name { get; } + [SerializeField] private List parameterList = default; + public IEnumerable ParameterList => parameterList; + public IEnumerable ValuePublishers { get; } + public IEnumerable ValueReceivers { get; } + + public void ApplyParameter(Parameter parameter) + { + if (Connector == default) + { + return; + } + + GetFieldRecursive(Type, parameter.Name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? + .SetValue(Connector, parameter.Value); + } + + private static FieldInfo GetFieldRecursive(Type type, string name, BindingFlags bindingFlags) + { + do + { + var fieldInfo = type.GetField(name, bindingFlags); + if (fieldInfo != default) + { + return fieldInfo; + } + + if (type.BaseType == default) + { + break; + } + + type = type.BaseType; + } while (true); + return default; + } + + public void ApplyParameters() + { + if (Connector == default) + { + return; + } + + ParameterList.ToList().ForEach(ApplyParameter); + } + + [PublicAPI] + public static ConnectorInfo Create(IConnector instance) + { + return Create(instance.GetType(), instance); + } + + [PublicAPI] + public static ConnectorInfo Create(Type type, IConnector instance) + { + return Create( + ((Component) instance)?.gameObject, + instance, + type, + type.Name, + CollectFields(type) + .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() == null) + .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), + CollectProperties(type) + .Where(x => typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) + .Where(x => x.GetCustomAttribute() != null) + .Select(x => ValuePublisherInfo.Create(x, instance)), + CollectProperties(type) + .Where(x => x.GetCustomAttribute() != null) + .Select(x => ValueReceiverInfo.Create(x, instance)) + ); + } + + [PublicAPI] + public static ConnectorInfo Create(GameObject gameObject, IConnector instance, Type type, string name, IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers) + { + return new ConnectorInfo(gameObject, instance, type, name, parameters, valuePublishers, valueReceivers); + } + + private static IEnumerable CollectFields(Type type) + { + var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (typeof(IConnector).IsAssignableFrom(type.BaseType)) + { + fields = fields.Concat(CollectFields(type.BaseType)).ToArray(); + } + + return fields; + } + + private static IEnumerable CollectProperties(Type type) + { + var fields = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + if (typeof(IConnector).IsAssignableFrom(type.BaseType)) + { + fields = fields.Concat(CollectProperties(type.BaseType)).ToArray(); + } + + return fields; + } + + [Serializable] + public class Parameter + { + private Parameter(Type type, string name, object value) + { + Type = type; + Name = name; + Value = value; + } + + [SerializeField] private object value = default; + + public Type Type { get; } + public string Name { get; } + public object Value + { + get => value; + set => this.value = value; + } + + public static Parameter Create(Type type, string name, object value) + { + return new Parameter(type, name, value); + } + } + + public class ValuePublisherInfo + { + private ValuePublisherInfo(PropertyInfo propertyInfo, object instance) + { + var attribute = propertyInfo.GetCustomAttribute(); + Name = attribute.Name; + Type = attribute.Type; + Instance = instance; + PropertyInfo = propertyInfo; + } + + public string Name { get; } + public ValueInjectionType Type { get; } + public object Instance { get; } + public PropertyInfo PropertyInfo { get; } + + public static ValuePublisherInfo Create(PropertyInfo propertyInfo, object instance) + { + return new ValuePublisherInfo(propertyInfo, instance); + } + } + + public class ValueReceiverInfo + { + private ValueReceiverInfo(PropertyInfo propertyInfo, object instance) + { + var attribute = propertyInfo.GetCustomAttribute(); + Name = attribute.Name; + Type = attribute.Type; + Instance = instance; + PropertyInfo = propertyInfo; + } + + public string Name { get; } + public ValueInjectionType Type { get; } + public object Instance { get; } + public PropertyInfo PropertyInfo { get; } + + public static ValueReceiverInfo Create(PropertyInfo propertyInfo, object instance) + { + return new ValueReceiverInfo(propertyInfo, instance); + } + } + } +} diff --git a/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs b/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs deleted file mode 100644 index 4b3197e..0000000 --- a/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace UniFlow.Attribute -{ - public class SuppliableTypeAttribute : System.Attribute - { - public SuppliableTypeAttribute(params Type[] types) - { - Types = types; - } - - public IEnumerable Types { get; } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta b/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta deleted file mode 100644 index 19493cd..0000000 --- a/Assets/Scripts/Attribute/SuppliableTypeAttribute.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cfada1e41d8e4fd2867141b29f244f76 -timeCreated: 1568279430 \ No newline at end of file From ce354fe6395c4d4fde72c6a2047d9d11ccb2cdf5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:55:59 +0900 Subject: [PATCH 179/453] :wrench: Change attribute usage to Property instead of Field or Method --- Assets/Scripts/Attribute/ValuePublisherAttribute.cs | 2 +- Assets/Scripts/Attribute/ValueReceiverAttribute.cs | 2 +- .../Scripts/Connector/Controller/InstantiateObject.cs | 9 ++++++--- .../Connector/Controller/MoveParentTransform.cs | 11 +++++++---- Assets/Scripts/Connector/ValueProvider/Bool.cs | 4 ++-- Assets/Scripts/Connector/ValueProvider/Color.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Color32.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Float.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Int.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Object.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Quaternion.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/String.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Vector2.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Vector2Int.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Vector3.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Vector3Int.cs | 3 ++- Assets/Scripts/Connector/ValueProvider/Vector4.cs | 3 ++- 17 files changed, 41 insertions(+), 23 deletions(-) diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs index ea6f1ce..f74e8df 100644 --- a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs +++ b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs @@ -2,7 +2,7 @@ namespace UniFlow.Attribute { - [AttributeUsage(AttributeTargets.Field)] + [AttributeUsage(AttributeTargets.Property)] public class ValuePublisherAttribute : System.Attribute { public ValuePublisherAttribute(string name, ValueInjectionType type) diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs index aab5dee..c4098df 100644 --- a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs +++ b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs @@ -2,7 +2,7 @@ namespace UniFlow.Attribute { - [AttributeUsage(AttributeTargets.Method)] + [AttributeUsage(AttributeTargets.Property)] public class ValueReceiverAttribute : System.Attribute { public ValueReceiverAttribute(string name, ValueInjectionType type) diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateObject.cs index d0df2ef..6d99446 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateObject.cs @@ -14,13 +14,16 @@ public class InstantiateObject : ConnectorBase [SerializeField] private Transform parent = default; - [SerializeField] [ValuePublisher("Instantiated", ValueInjectionType.Object)] private PublishObjectEvent publishInstantiatedGameObject = default; + [SerializeField] private PublishObjectEvent publishInstantiatedGameObject = default; + [ValuePublisher("Instantiated", ValueInjectionType.GameObject)] private PublishObjectEvent PublishInstantiatedGameObject => publishInstantiatedGameObject ?? (publishInstantiatedGameObject = new PublishObjectEvent()); - [SerializeField] [ValuePublisher("Vecror2", ValueInjectionType.Vector2)] private PublishObjectEvent publishVector2 = default; + [SerializeField] private PublishObjectEvent publishVector2 = default; + [ValuePublisher("Vecror2", ValueInjectionType.Vector2)] private PublishObjectEvent PublishVector2 => publishVector2 ?? (publishVector2 = new PublishObjectEvent()); - [SerializeField] [ValuePublisher("Int", ValueInjectionType.Int)] private PublishIntEvent publishInt = default; + [SerializeField] private PublishIntEvent publishInt = default; + [ValuePublisher("Int", ValueInjectionType.Int)] private PublishIntEvent PublishInt => publishInt ?? (publishInt = new PublishIntEvent()); [UsedImplicitly] public Object Source diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 1676f41..69e718e 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -15,14 +15,18 @@ public class MoveParentTransform : ConnectorBase [SerializeField] private Transform parentTransform = default; [SerializeField] private bool worldPositionStays = true; - [UsedImplicitly] public Transform TargetTransform + [UsedImplicitly] + [ValueReceiver("Target Transform", ValueInjectionType.Transform)] + public Transform TargetTransform { get => targetTransform != default ? targetTransform : targetTransform = transform; set => targetTransform = value; } - [UsedImplicitly] public Transform ParentTransform + [UsedImplicitly] + [ValueReceiver("Parent Transform", ValueInjectionType.Transform)] + public Transform ParentTransform { get => parentTransform; set => parentTransform = value; @@ -41,13 +45,12 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa return Observable.Return(Message.Create(this, TargetTransform)); } - [ValueReceiver("Target Transform", ValueInjectionType.Transform)] public void ReceiveTargetTransform(Object target) { TargetTransform = target as Transform; } - [ValueReceiver("Parent Transform", ValueInjectionType.Transform)] + public void ReceiveParentTransform(Object parent) { ParentTransform = parent as Transform; diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs b/Assets/Scripts/Connector/ValueProvider/Bool.cs index 81da362..775d6f2 100644 --- a/Assets/Scripts/Connector/ValueProvider/Bool.cs +++ b/Assets/Scripts/Connector/ValueProvider/Bool.cs @@ -9,8 +9,8 @@ public class Bool : Base [SerializeField] private bool value = default; private bool Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Bool)] private PublishBoolEvent publisher = default; - private PublishBoolEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); + [SerializeField] private PublishBoolEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Bool)] private PublishBoolEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); protected override bool Provide() { diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs b/Assets/Scripts/Connector/ValueProvider/Color.cs index 6e08aeb..3d20119 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color.cs @@ -9,7 +9,8 @@ public class Color : Base [SerializeField] private UnityEngine.Color value = default; private UnityEngine.Color Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Color)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Color)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Color Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs b/Assets/Scripts/Connector/ValueProvider/Color32.cs index 3760637..5d1aa40 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32.cs @@ -9,7 +9,8 @@ public class Color32 : Base [SerializeField] private UnityEngine.Color32 value = default; private UnityEngine.Color32 Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Color32)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Color32)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Color32 Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs b/Assets/Scripts/Connector/ValueProvider/Float.cs index d685bdf..bf7292d 100644 --- a/Assets/Scripts/Connector/ValueProvider/Float.cs +++ b/Assets/Scripts/Connector/ValueProvider/Float.cs @@ -9,7 +9,8 @@ public class Float : Base [SerializeField] private float value = default; private float Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Float)] private PublishFloatEvent publisher = default; + [SerializeField] private PublishFloatEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Float)] private PublishFloatEvent Publisher => publisher ?? (publisher = new PublishFloatEvent()); protected override float Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs b/Assets/Scripts/Connector/ValueProvider/Int.cs index a3f7dc8..d951acc 100644 --- a/Assets/Scripts/Connector/ValueProvider/Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Int.cs @@ -9,7 +9,8 @@ public class Int : Base [SerializeField] private int value = default; private int Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Int)] private PublishIntEvent publisher = default; + [SerializeField] private PublishIntEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Int)] private PublishIntEvent Publisher => publisher ?? (publisher = new PublishIntEvent()); protected override int Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs b/Assets/Scripts/Connector/ValueProvider/Object.cs index 402d886..6a20a7b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Object.cs +++ b/Assets/Scripts/Connector/ValueProvider/Object.cs @@ -9,7 +9,8 @@ public class Object : Base [SerializeField] private UnityEngine.Object value = default; private UnityEngine.Object Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Object)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Object)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Object Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs index 98026eb..14b76f3 100644 --- a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs +++ b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs @@ -9,7 +9,8 @@ public class Quaternion : Base [SerializeField] private UnityEngine.Quaternion value = default; private UnityEngine.Quaternion Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Quaternion)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Quaternion)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Quaternion Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs b/Assets/Scripts/Connector/ValueProvider/String.cs index d89749c..a1007e5 100644 --- a/Assets/Scripts/Connector/ValueProvider/String.cs +++ b/Assets/Scripts/Connector/ValueProvider/String.cs @@ -9,7 +9,8 @@ public class String : Base [SerializeField] private string value = default; private string Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.String)] private PublishStringEvent publisher = default; + [SerializeField] private PublishStringEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.String)] private PublishStringEvent Publisher => publisher ?? (publisher = new PublishStringEvent()); protected override string Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs b/Assets/Scripts/Connector/ValueProvider/Vector2.cs index 510ef82..4c020db 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2.cs @@ -9,7 +9,8 @@ public class Vector2 : Base [SerializeField] private UnityEngine.Vector2 value = default; private UnityEngine.Vector2 Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector2)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Vector2)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Vector2 Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs index 16ad248..e39d0e0 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs @@ -9,7 +9,8 @@ public class Vector2Int : Base [SerializeField] private UnityEngine.Vector2Int value = default; private UnityEngine.Vector2Int Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector2Int)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Vector2Int)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Vector2Int Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs b/Assets/Scripts/Connector/ValueProvider/Vector3.cs index 5ff8547..c5311be 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3.cs @@ -9,7 +9,8 @@ public class Vector3 : Base [SerializeField] private UnityEngine.Vector3 value = default; private UnityEngine.Vector3 Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector3)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Vector3)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Vector3 Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs index f158eaa..64a9f95 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs @@ -9,7 +9,8 @@ public class Vector3Int : Base [SerializeField] private UnityEngine.Vector3Int value = default; private UnityEngine.Vector3Int Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector3Int)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Vector3Int)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Vector3Int Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs b/Assets/Scripts/Connector/ValueProvider/Vector4.cs index 58f435a..9a7151b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4.cs @@ -9,7 +9,8 @@ public class Vector4 : Base [SerializeField] private UnityEngine.Vector4 value = default; private UnityEngine.Vector4 Value => value; - [SerializeField] [ValuePublisher("Value", ValueInjectionType.Vector4)] private PublishObjectEvent publisher = default; + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value", ValueInjectionType.Vector4)] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Vector4 Provide() From 159b29d903f5b661725fe607989d2c942128b1d6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 17:57:13 +0900 Subject: [PATCH 180/453] :shirt: Add last line feed --- Assets/Scripts/IMessage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/IMessage.cs b/Assets/Scripts/IMessage.cs index ef3b1b4..3ec8757 100644 --- a/Assets/Scripts/IMessage.cs +++ b/Assets/Scripts/IMessage.cs @@ -27,4 +27,4 @@ public static TMessage As(this IMessage message) where TMessage : clas return message as TMessage; } } -} \ No newline at end of file +} From d263e0dd0c07513b661480e9f4a7ac6f52f15835 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 22:12:38 +0900 Subject: [PATCH 181/453] :sparkles: Add handle type extension --- Assets/Scripts/SystemTypeExtensions.cs | 60 +++++++++++++++++++++ Assets/Scripts/SystemTypeExtensions.cs.meta | 3 ++ 2 files changed, 63 insertions(+) create mode 100644 Assets/Scripts/SystemTypeExtensions.cs create mode 100644 Assets/Scripts/SystemTypeExtensions.cs.meta diff --git a/Assets/Scripts/SystemTypeExtensions.cs b/Assets/Scripts/SystemTypeExtensions.cs new file mode 100644 index 0000000..d03512d --- /dev/null +++ b/Assets/Scripts/SystemTypeExtensions.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using JetBrains.Annotations; + +namespace UniFlow +{ + [PublicAPI] + public static class SystemTypeExtensions + { + public static FieldInfo GetFieldRecursive(this Type type, string name, BindingFlags bindingFlags) + { + return type.GetFieldsRecursive(bindingFlags).First(x => x.Name == name); + } + + public static IEnumerable GetFieldsRecursive(this Type type, BindingFlags bindingFlags) + { + var fields = type.GetFields(bindingFlags); + if (type.BaseType != default) + { + fields = fields.Concat(type.BaseType.GetFieldsRecursive(bindingFlags)).ToArray(); + } + + return fields; + } + + public static PropertyInfo GetPropertyRecursive(this Type type, string name, BindingFlags bindingFlags) + { + return type.GetPropertiesRecursive(bindingFlags).First(x => x.Name == name); + } + + public static IEnumerable GetPropertiesRecursive(this Type type, BindingFlags bindingFlags) + { + var properties = type.GetProperties(bindingFlags); + if (type.BaseType != default) + { + properties = properties.Concat(type.BaseType.GetPropertiesRecursive(bindingFlags)).ToArray(); + } + + return properties; + } + + public static MethodInfo GetMethodRecursive(this Type type, string name, BindingFlags bindingFlags) + { + return type.GetMethodsRecursive(bindingFlags).First(x => x.Name == name); + } + + public static IEnumerable GetMethodsRecursive(this Type type, BindingFlags bindingFlags) + { + var properties = type.GetMethods(bindingFlags); + if (type.BaseType != default) + { + properties = properties.Concat(type.BaseType.GetMethodsRecursive(bindingFlags)).ToArray(); + } + + return properties; + } + } +} diff --git a/Assets/Scripts/SystemTypeExtensions.cs.meta b/Assets/Scripts/SystemTypeExtensions.cs.meta new file mode 100644 index 0000000..d2c8b38 --- /dev/null +++ b/Assets/Scripts/SystemTypeExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 737ed94cc1b044638a4758a91f151407 +timeCreated: 1569836956 \ No newline at end of file From 756a7c912befd8af2a7fc57e96a0be168c18d021 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 22:13:19 +0900 Subject: [PATCH 182/453] :sparkles: Change attributes parameter --- .../Attribute/ValuePublisherAttribute.cs | 4 +- .../Attribute/ValueReceiverAttribute.cs | 4 +- .../Connector/Controller/InstantiateObject.cs | 10 +- .../Controller/MoveParentTransform.cs | 4 +- .../Controller/SimpleAnimationController.cs | 329 +++++++++--------- .../Scripts/Connector/ValueProvider/Bool.cs | 2 +- .../Scripts/Connector/ValueProvider/Color.cs | 10 +- .../Connector/ValueProvider/Color32.cs | 10 +- .../Scripts/Connector/ValueProvider/Float.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Int.cs | 2 +- .../Scripts/Connector/ValueProvider/Object.cs | 2 +- .../Connector/ValueProvider/Quaternion.cs | 10 +- .../Scripts/Connector/ValueProvider/String.cs | 2 +- .../Connector/ValueProvider/Vector2.cs | 10 +- .../Connector/ValueProvider/Vector2Int.cs | 10 +- .../Connector/ValueProvider/Vector3.cs | 10 +- .../Connector/ValueProvider/Vector3Int.cs | 10 +- .../Connector/ValueProvider/Vector4.cs | 10 +- Assets/Scripts/PublishValueEvent.cs | 56 +++ 19 files changed, 262 insertions(+), 235 deletions(-) diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs index f74e8df..d80fe30 100644 --- a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs +++ b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs @@ -5,13 +5,11 @@ namespace UniFlow.Attribute [AttributeUsage(AttributeTargets.Property)] public class ValuePublisherAttribute : System.Attribute { - public ValuePublisherAttribute(string name, ValueInjectionType type) + public ValuePublisherAttribute(string name = "") { Name = name; - Type = type; } public string Name { get; } - public ValueInjectionType Type { get; } } } diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs index c4098df..0f6c586 100644 --- a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs +++ b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs @@ -5,13 +5,11 @@ namespace UniFlow.Attribute [AttributeUsage(AttributeTargets.Property)] public class ValueReceiverAttribute : System.Attribute { - public ValueReceiverAttribute(string name, ValueInjectionType type) + public ValueReceiverAttribute(string name = "") { Name = name; - Type = type; } public string Name { get; } - public ValueInjectionType Type { get; } } } diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateObject.cs index 6d99446..bb25f03 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateObject.cs @@ -15,15 +15,15 @@ public class InstantiateObject : ConnectorBase [SerializeField] private Transform parent = default; [SerializeField] private PublishObjectEvent publishInstantiatedGameObject = default; - [ValuePublisher("Instantiated", ValueInjectionType.GameObject)] + [ValuePublisher("Instantiated")] private PublishObjectEvent PublishInstantiatedGameObject => publishInstantiatedGameObject ?? (publishInstantiatedGameObject = new PublishObjectEvent()); - [SerializeField] private PublishObjectEvent publishVector2 = default; - [ValuePublisher("Vecror2", ValueInjectionType.Vector2)] - private PublishObjectEvent PublishVector2 => publishVector2 ?? (publishVector2 = new PublishObjectEvent()); + [SerializeField] private PublishVector2Event publishVector2 = default; + [ValuePublisher] + private PublishVector2Event PublishVector2 => publishVector2 ?? (publishVector2 = new PublishVector2Event()); [SerializeField] private PublishIntEvent publishInt = default; - [ValuePublisher("Int", ValueInjectionType.Int)] + [ValuePublisher] private PublishIntEvent PublishInt => publishInt ?? (publishInt = new PublishIntEvent()); [UsedImplicitly] public Object Source diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 69e718e..d2761ef 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -16,7 +16,7 @@ public class MoveParentTransform : ConnectorBase [SerializeField] private bool worldPositionStays = true; [UsedImplicitly] - [ValueReceiver("Target Transform", ValueInjectionType.Transform)] + [ValueReceiver] public Transform TargetTransform { get => targetTransform != default @@ -25,7 +25,7 @@ public Transform TargetTransform set => targetTransform = value; } [UsedImplicitly] - [ValueReceiver("Parent Transform", ValueInjectionType.Transform)] + [ValueReceiver] public Transform ParentTransform { get => parentTransform; diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index b75e3bc..687ec17 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -1,169 +1,160 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] - public class SimpleAnimationController : ConnectorBase - { - [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = SimpleAnimationControlMethod.Play; - [SerializeField] - [Tooltip("If you do not specify it will be used SimpleAnimation setting")] - private AnimationClip animationClip = default; - [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; - [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - [SerializeField] private Animator animator = default; - [SerializeField] private SimpleAnimation simpleAnimation = default; - - [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod - { - get => simpleAnimationControlMethod; - set => simpleAnimationControlMethod = value; - } - [UsedImplicitly] public AnimationClip AnimationClip - { - get => animationClip; - set => animationClip = value; - } - [UsedImplicitly] public AnimatorCullingMode CullingMode - { - get => cullingMode; - set => cullingMode = value; - } - [UsedImplicitly] public AnimatorUpdateMode UpdateMode - { - get => updateMode; - set => updateMode = value; - } - [UsedImplicitly] public Animator Animator - { - get => - animator != default - ? animator - : animator = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); - set => animator = value; - } - [UsedImplicitly] public SimpleAnimation SimpleAnimation - { - get => - simpleAnimation != default - ? simpleAnimation - : simpleAnimation = - Animator.GetComponent() != default - ? Animator.GetComponent() - : Animator.gameObject.AddComponent() - ; - set => simpleAnimation = value; - } - - private IDisposable Disposable { get; } = new CompositeDisposable(); - - [SuppressMessage("ReSharper", "SuspiciousTypeConversion.Global")] - [SuppressMessage("ReSharper", "ConvertIfStatementToSwitchStatement")] - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { -// if (latestMessage is IValueHolder simpleAnimationControlMethodHolder) -// { -// SimpleAnimationControlMethod = simpleAnimationControlMethodHolder.Value; -// } -// -// if (latestMessage is IValueHolder animationClipHolder) -// { -// AnimationClip = animationClipHolder.Value; -// } -// -// if (latestMessage is IValueHolder animatorCullingModeHolder) -// { -// CullingMode = animatorCullingModeHolder.Value; -// } -// -// if (latestMessage is IValueHolder animatorUpdateModeHolder) -// { -// UpdateMode = animatorUpdateModeHolder.Value; -// } - - InvokeSimpleAnimationMethod(); - return Observable.Return(Message.Create(this)); -// return Observable -// .Create( -// observer => -// { -// InvokeSimpleAnimationMethod(); -// observer.OnNext(Message.Create(this)); -// return Disposable; -// } -// ); - } - - protected override void Awake() - { - base.Awake(); - // ReSharper disable once InvertIf - // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. - if (AnimationClip != default && Animator != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) - { - SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); - SimpleAnimation.cullingMode = CullingMode; - SimpleAnimation.playAutomatically = false; - Animator.updateMode = UpdateMode; - } - } - - private void InvokeSimpleAnimationMethod() - { - switch (SimpleAnimationControlMethod) - { - case SimpleAnimationControlMethod.Play: - if (AnimationClip == default) - { - SimpleAnimation.Rewind(); - SimpleAnimation.Play(); - } - else - { - SimpleAnimation.Rewind(AnimationClip.GetInstanceID().ToString()); - SimpleAnimation.Play(AnimationClip.GetInstanceID().ToString()); - } - break; - case SimpleAnimationControlMethod.Stop: - if (AnimationClip == default) - { - SimpleAnimation.Stop(); - } - else - { - SimpleAnimation.Stop(AnimationClip.GetInstanceID().ToString()); - } - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase - { - public static Message Create(SimpleAnimationController sender) - { - return Create(ConnectorType.SimpleAnimationController, sender); - } - } - } - - public enum SimpleAnimationControlMethod - { - Play, - Stop, - } -} \ No newline at end of file +using System; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using JetBrains.Annotations; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] + public class SimpleAnimationController : ConnectorBase + { + [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = SimpleAnimationControlMethod.Play; + [SerializeField] + [Tooltip("If you do not specify it will be used SimpleAnimation setting")] + private AnimationClip animationClip = default; + [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; + [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; + + [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod + { + get => simpleAnimationControlMethod; + set => simpleAnimationControlMethod = value; + } + [UsedImplicitly] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } + [UsedImplicitly] public AnimatorCullingMode CullingMode + { + get => cullingMode; + set => cullingMode = value; + } + [UsedImplicitly] public AnimatorUpdateMode UpdateMode + { + get => updateMode; + set => updateMode = value; + } + [UsedImplicitly] public Animator Animator + { + get => + animator != default + ? animator + : animator = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => animator = value; + } + [UsedImplicitly] public SimpleAnimation SimpleAnimation + { + get => + simpleAnimation != default + ? simpleAnimation + : simpleAnimation = + Animator.GetComponent() != default + ? Animator.GetComponent() + : Animator.gameObject.AddComponent() + ; + set => simpleAnimation = value; + } + + private GameObject baseGameObject; + [UsedImplicitly] + [ValueReceiver] + public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + [SuppressMessage("ReSharper", "SuspiciousTypeConversion.Global")] + [SuppressMessage("ReSharper", "ConvertIfStatementToSwitchStatement")] + public override IObservable OnConnectAsObservable(IMessage latestMessage) + { + InvokeSimpleAnimationMethod(); + return Observable.Return(Message.Create(this)); + } + + [ValueReceiver] + public GameObject Piyo { get; set; } + + [ValueReceiver] + public Vector2 Hoge { get; set; } + + [ValueReceiver] + public int Fuga { get; set; } + + protected override void Awake() + { + base.Awake(); + // ReSharper disable once InvertIf + // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. + if (AnimationClip != default && Animator != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) + { + SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); + SimpleAnimation.cullingMode = CullingMode; + SimpleAnimation.playAutomatically = false; + Animator.updateMode = UpdateMode; + } + } + + private void InvokeSimpleAnimationMethod() + { + switch (SimpleAnimationControlMethod) + { + case SimpleAnimationControlMethod.Play: + if (AnimationClip == default) + { + SimpleAnimation.Rewind(); + SimpleAnimation.Play(); + } + else + { + SimpleAnimation.Rewind(AnimationClip.GetInstanceID().ToString()); + SimpleAnimation.Play(AnimationClip.GetInstanceID().ToString()); + } + break; + case SimpleAnimationControlMethod.Stop: + if (AnimationClip == default) + { + SimpleAnimation.Stop(); + } + else + { + SimpleAnimation.Stop(AnimationClip.GetInstanceID().ToString()); + } + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + + public class Message : MessageBase + { + public static Message Create(SimpleAnimationController sender) + { + return Create(ConnectorType.SimpleAnimationController, sender); + } + } + } + + public enum SimpleAnimationControlMethod + { + Play, + Stop, + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs b/Assets/Scripts/Connector/ValueProvider/Bool.cs index 775d6f2..8380738 100644 --- a/Assets/Scripts/Connector/ValueProvider/Bool.cs +++ b/Assets/Scripts/Connector/ValueProvider/Bool.cs @@ -10,7 +10,7 @@ public class Bool : Base private bool Value => value; [SerializeField] private PublishBoolEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Bool)] private PublishBoolEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); + [ValuePublisher("Value")] private PublishBoolEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); protected override bool Provide() { diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs b/Assets/Scripts/Connector/ValueProvider/Color.cs index 3d20119..8b7ea00 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color.cs @@ -9,15 +9,13 @@ public class Color : Base [SerializeField] private UnityEngine.Color value = default; private UnityEngine.Color Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Color)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishColorEvent publisher = default; + [ValuePublisher("Value")] + private PublishColorEvent Publisher => publisher ?? (publisher = new PublishColorEvent()); protected override UnityEngine.Color Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs b/Assets/Scripts/Connector/ValueProvider/Color32.cs index 5d1aa40..69d0648 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32.cs @@ -9,15 +9,13 @@ public class Color32 : Base [SerializeField] private UnityEngine.Color32 value = default; private UnityEngine.Color32 Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Color32)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishColor32Event publisher = default; + [ValuePublisher("Value")] + private PublishColor32Event Publisher => publisher ?? (publisher = new PublishColor32Event()); protected override UnityEngine.Color32 Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs b/Assets/Scripts/Connector/ValueProvider/Float.cs index bf7292d..e621800 100644 --- a/Assets/Scripts/Connector/ValueProvider/Float.cs +++ b/Assets/Scripts/Connector/ValueProvider/Float.cs @@ -10,7 +10,7 @@ public class Float : Base private float Value => value; [SerializeField] private PublishFloatEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Float)] + [ValuePublisher("Value")] private PublishFloatEvent Publisher => publisher ?? (publisher = new PublishFloatEvent()); protected override float Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs b/Assets/Scripts/Connector/ValueProvider/Int.cs index d951acc..4d4f462 100644 --- a/Assets/Scripts/Connector/ValueProvider/Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Int.cs @@ -10,7 +10,7 @@ public class Int : Base private int Value => value; [SerializeField] private PublishIntEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Int)] + [ValuePublisher("Value")] private PublishIntEvent Publisher => publisher ?? (publisher = new PublishIntEvent()); protected override int Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs b/Assets/Scripts/Connector/ValueProvider/Object.cs index 6a20a7b..7611024 100644 --- a/Assets/Scripts/Connector/ValueProvider/Object.cs +++ b/Assets/Scripts/Connector/ValueProvider/Object.cs @@ -10,7 +10,7 @@ public class Object : Base private UnityEngine.Object Value => value; [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Object)] + [ValuePublisher("Value")] private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); protected override UnityEngine.Object Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs index 14b76f3..77cb9aa 100644 --- a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs +++ b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs @@ -9,15 +9,13 @@ public class Quaternion : Base [SerializeField] private UnityEngine.Quaternion value = default; private UnityEngine.Quaternion Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Quaternion)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishQuaternionEvent publisher = default; + [ValuePublisher("Value")] + private PublishQuaternionEvent Publisher => publisher ?? (publisher = new PublishQuaternionEvent()); protected override UnityEngine.Quaternion Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs b/Assets/Scripts/Connector/ValueProvider/String.cs index a1007e5..24205bb 100644 --- a/Assets/Scripts/Connector/ValueProvider/String.cs +++ b/Assets/Scripts/Connector/ValueProvider/String.cs @@ -10,7 +10,7 @@ public class String : Base private string Value => value; [SerializeField] private PublishStringEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.String)] + [ValuePublisher("Value")] private PublishStringEvent Publisher => publisher ?? (publisher = new PublishStringEvent()); protected override string Provide() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs b/Assets/Scripts/Connector/ValueProvider/Vector2.cs index 4c020db..938b7c1 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2.cs @@ -9,15 +9,13 @@ public class Vector2 : Base [SerializeField] private UnityEngine.Vector2 value = default; private UnityEngine.Vector2 Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Vector2)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishVector2Event publisher = default; + [ValuePublisher("Value")] + private PublishVector2Event Publisher => publisher ?? (publisher = new PublishVector2Event()); protected override UnityEngine.Vector2 Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs index e39d0e0..6b91f9d 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs @@ -9,15 +9,13 @@ public class Vector2Int : Base [SerializeField] private UnityEngine.Vector2Int value = default; private UnityEngine.Vector2Int Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Vector2Int)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishVector2IntEvent publisher = default; + [ValuePublisher("Value")] + private PublishVector2IntEvent Publisher => publisher ?? (publisher = new PublishVector2IntEvent()); protected override UnityEngine.Vector2Int Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs b/Assets/Scripts/Connector/ValueProvider/Vector3.cs index c5311be..58c889d 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3.cs @@ -9,15 +9,13 @@ public class Vector3 : Base [SerializeField] private UnityEngine.Vector3 value = default; private UnityEngine.Vector3 Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Vector3)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishVector3Event publisher = default; + [ValuePublisher("Value")] + private PublishVector3Event Publisher => publisher ?? (publisher = new PublishVector3Event()); protected override UnityEngine.Vector3 Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs index 64a9f95..32a8530 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs @@ -9,15 +9,13 @@ public class Vector3Int : Base [SerializeField] private UnityEngine.Vector3Int value = default; private UnityEngine.Vector3Int Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Vector3Int)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishVector3IntEvent publisher = default; + [ValuePublisher("Value")] + private PublishVector3IntEvent Publisher => publisher ?? (publisher = new PublishVector3IntEvent()); protected override UnityEngine.Vector3Int Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs b/Assets/Scripts/Connector/ValueProvider/Vector4.cs index 9a7151b..a01ce0b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4.cs @@ -9,15 +9,13 @@ public class Vector4 : Base [SerializeField] private UnityEngine.Vector4 value = default; private UnityEngine.Vector4 Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value", ValueInjectionType.Vector4)] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + [SerializeField] private PublishVector4Event publisher = default; + [ValuePublisher("Value")] + private PublishVector4Event Publisher => publisher ?? (publisher = new PublishVector4Event()); protected override UnityEngine.Vector4 Provide() { - var publishValue = ScriptableObject.CreateInstance(); - publishValue.Value = Value; - Publisher.Invoke(publishValue); + Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs index 62e4f00..cd73486 100644 --- a/Assets/Scripts/PublishValueEvent.cs +++ b/Assets/Scripts/PublishValueEvent.cs @@ -1,4 +1,5 @@ using System; +using UnityEngine; using UnityEngine.Events; using Object = UnityEngine.Object; @@ -28,4 +29,59 @@ public class PublishStringEvent : UnityEvent public class PublishObjectEvent : UnityEvent { } + + [Serializable] + public class PublishGameObjectEvent : UnityEvent + { + } + + [Serializable] + public class PublishTransformEvent : UnityEvent + { + } + + [Serializable] + public class PublishRectTransformEvent : UnityEvent + { + } + + [Serializable] + public class PublishVector2Event : UnityEvent + { + } + + [Serializable] + public class PublishVector3Event : UnityEvent + { + } + + [Serializable] + public class PublishVector4Event : UnityEvent + { + } + + [Serializable] + public class PublishQuaternionEvent : UnityEvent + { + } + + [Serializable] + public class PublishVector2IntEvent : UnityEvent + { + } + + [Serializable] + public class PublishVector3IntEvent : UnityEvent + { + } + + [Serializable] + public class PublishColorEvent : UnityEvent + { + } + + [Serializable] + public class PublishColor32Event : UnityEvent + { + } } From 8ea6ef7761b009b3798d8549d90479534b3ff9d2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 22:13:57 +0900 Subject: [PATCH 183/453] :sparkles: WIP: Implement connect values --- Assets/Editor/Scripts/ConnectorInfo.cs | 40 +- .../Editor/Scripts/EdgeConnectorListener.cs | 68 +- Assets/Editor/Scripts/FlowGraphView.cs | 681 +++++++++--------- Assets/Editor/Scripts/FlowNode.cs | 69 +- Assets/Editor/Scripts/FlowPort.cs | 57 +- Assets/Editor/Scripts/FlowValuePublishPort.cs | 32 + .../Scripts/FlowValuePublishPort.cs.meta | 3 + Assets/Editor/Scripts/FlowValueReceivePort.cs | 32 + .../Scripts/FlowValueReceivePort.cs.meta | 3 + Assets/Editor/Scripts/SearchWindowProvider.cs | 228 +++--- .../ValueInjectionConnectorListener.cs | 124 ++++ .../ValueInjectionConnectorListener.cs.meta | 3 + 12 files changed, 793 insertions(+), 547 deletions(-) create mode 100644 Assets/Editor/Scripts/FlowValuePublishPort.cs create mode 100644 Assets/Editor/Scripts/FlowValuePublishPort.cs.meta create mode 100644 Assets/Editor/Scripts/FlowValueReceivePort.cs create mode 100644 Assets/Editor/Scripts/FlowValueReceivePort.cs.meta create mode 100644 Assets/Editor/Scripts/ValueInjectionConnectorListener.cs create mode 100644 Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index d9d6dfb..5a5e994 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -87,14 +87,14 @@ public static ConnectorInfo Create(Type type, IConnector instance) instance, type, type.Name, - CollectFields(type) + type.GetFieldsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() == null) .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), - CollectProperties(type) + type.GetPropertiesRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) .Where(x => x.GetCustomAttribute() != null) .Select(x => ValuePublisherInfo.Create(x, instance)), - CollectProperties(type) + type.GetPropertiesRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => x.GetCustomAttribute() != null) .Select(x => ValueReceiverInfo.Create(x, instance)) ); @@ -106,28 +106,6 @@ public static ConnectorInfo Create(GameObject gameObject, IConnector instance, T return new ConnectorInfo(gameObject, instance, type, name, parameters, valuePublishers, valueReceivers); } - private static IEnumerable CollectFields(Type type) - { - var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - if (typeof(IConnector).IsAssignableFrom(type.BaseType)) - { - fields = fields.Concat(CollectFields(type.BaseType)).ToArray(); - } - - return fields; - } - - private static IEnumerable CollectProperties(Type type) - { - var fields = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - if (typeof(IConnector).IsAssignableFrom(type.BaseType)) - { - fields = fields.Concat(CollectProperties(type.BaseType)).ToArray(); - } - - return fields; - } - [Serializable] public class Parameter { @@ -159,14 +137,14 @@ public class ValuePublisherInfo private ValuePublisherInfo(PropertyInfo propertyInfo, object instance) { var attribute = propertyInfo.GetCustomAttribute(); - Name = attribute.Name; - Type = attribute.Type; + Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; + Type = propertyInfo.PropertyType.BaseType?.GetGenericArguments().First(); Instance = instance; PropertyInfo = propertyInfo; } public string Name { get; } - public ValueInjectionType Type { get; } + public Type Type { get; } public object Instance { get; } public PropertyInfo PropertyInfo { get; } @@ -181,14 +159,14 @@ public class ValueReceiverInfo private ValueReceiverInfo(PropertyInfo propertyInfo, object instance) { var attribute = propertyInfo.GetCustomAttribute(); - Name = attribute.Name; - Type = attribute.Type; + Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; + Type = propertyInfo.PropertyType; Instance = instance; PropertyInfo = propertyInfo; } public string Name { get; } - public ValueInjectionType Type { get; } + public Type Type { get; } public object Instance { get; } public PropertyInfo PropertyInfo { get; } diff --git a/Assets/Editor/Scripts/EdgeConnectorListener.cs b/Assets/Editor/Scripts/EdgeConnectorListener.cs index aaa827c..02cf8f6 100644 --- a/Assets/Editor/Scripts/EdgeConnectorListener.cs +++ b/Assets/Editor/Scripts/EdgeConnectorListener.cs @@ -1,33 +1,35 @@ -using UnityEditor.Experimental.GraphView; -using UnityEngine; - -namespace UniFlow.Editor -{ - public class EdgeConnectorListener : IEdgeConnectorListener - { - public EdgeConnectorListener(FlowGraphView flowGraphView, SearchWindowProvider searchWindowProvider) - { - FlowGraphView = flowGraphView; - SearchWindowProvider = searchWindowProvider; - } - - private FlowGraphView FlowGraphView { get; } - private SearchWindowProvider SearchWindowProvider { get; } - - void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) - { - SearchWindowProvider.FlowPort = (FlowPort) (edge.output?.edgeConnector.edgeDragHelper.draggedPort ?? edge.input?.edgeConnector.edgeDragHelper.draggedPort); - SearchWindow - .Open( - new SearchWindowContext(GUIUtility.GUIToScreenPoint(Event.current.mousePosition)), - SearchWindowProvider - ); - } - - void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) - { - FlowGraphView.AddEdge((FlowPort) edge.output, (FlowPort) edge.input); - (edge.output.node as FlowNode)?.ApplyTargetConnectors(); - } - } -} \ No newline at end of file +using UnityEditor.Experimental.GraphView; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class EdgeConnectorListener : IEdgeConnectorListener + { + public EdgeConnectorListener(FlowGraphView flowGraphView, SearchWindowProvider searchWindowProvider) + { + FlowGraphView = flowGraphView; + SearchWindowProvider = searchWindowProvider; + } + + private FlowGraphView FlowGraphView { get; } + private SearchWindowProvider SearchWindowProvider { get; } + + void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) + { + SearchWindowProvider.FlowPort = (FlowPort) (edge.output?.edgeConnector.edgeDragHelper.draggedPort ?? edge.input?.edgeConnector.edgeDragHelper.draggedPort); + SearchWindow + .Open( + new SearchWindowContext(GUIUtility.GUIToScreenPoint(Event.current.mousePosition)), + SearchWindowProvider + ); + } + + void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) + { + FlowGraphView.AddEdge((FlowPort) edge.output, (FlowPort) edge.input); + (edge.output.node as FlowNode)?.ApplyTargetConnectors(); + FlowGraphView.AddElement(edge); + FlowGraphView.SetupActAsTrigger(); + } + } +} diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index b83b6f7..b2988f3 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -1,326 +1,355 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEditor; -using UnityEditor.Experimental.GraphView; -using UnityEngine; -using UnityEngine.SceneManagement; -using UnityEngine.UIElements; - -namespace UniFlow.Editor -{ - public class FlowGraphView : GraphView - { - private IDictionary> DestinationConnectors { get; } = new Dictionary>(); - private IDictionary> SourceConnectors { get; } = new Dictionary>(); - private IDictionary RenderedNodes { get; } = new Dictionary(); - private IDictionary NormalizedPositionDictionary { get; } = new Dictionary(); - private SearchWindowProvider SearchWindowProvider { get; set; } - private EdgeConnectorListener EdgeConnectorListener { get; set; } - - private const float NodeWidth = 300.0f; - private static Vector2 NodesOffset { get; } = new Vector2(50.0f, 50.0f); - private static Vector2 NodeMargin { get; } = new Vector2(50.0f, 50.0f); - - public void Initialize() - { - UpdateViewTransform(UniFlowSettings.instance.LatestPosition, UniFlowSettings.instance.LatestScale); - styleSheets.Add(AssetReferences.Instance.FlowGraphView); - SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); - this.AddManipulator(new ContentDragger()); - this.AddManipulator(new SelectionDragger()); - this.AddManipulator(new RectangleSelector()); - this.AddManipulator(new ClickSelector()); - - var flowGridBackground = new FlowGridBackground - { - name = typeof(FlowGridBackground).Name, - }; - Insert(0, flowGridBackground); - - SearchWindowProvider = ScriptableObject.CreateInstance(); - SearchWindowProvider.Initialize(this); - EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); - - viewTransformChanged += graphView => - { - UniFlowSettings.instance.LatestPosition = graphView.viewTransform.position; - UniFlowSettings.instance.LatestScale = graphView.viewTransform.scale; - }; - - nodeCreationRequest += context => - { - SearchWindowProvider.FlowPort = null; - SearchWindow - .Open( - new SearchWindowContext(context.screenMousePosition), - SearchWindowProvider - ); - }; - - deleteSelection += (operationName, user) => - { - DeleteSelection(); - SetupActAsTrigger(); - }; - - elementsRemovedFromStackNode += (stackNode, removedGraphElements) => - { - removedGraphElements.ToList().ForEach(Debug.Log); - SetupActAsTrigger(); - }; - elementsRemovedFromGroup += (group, removedGraphElements) => - { - removedGraphElements.ToList().ForEach(Debug.Log); - SetupActAsTrigger(); - }; - - graphViewChanged += change => - { - change - .elementsToRemove? - .OfType() - .ToList() - .ForEach( - x => x.RemoveFromGraphView() - ); - SetupActAsTrigger(); - return change; - }; - - CreateNodesFromInstance(); - - CreateEdges(); - - RegisterCallback( - (GeometryChangedEvent e) => - { - Relocation(); - } - ); - RegisterCallback( - (KeyDownEvent e) => - { - // ReSharper disable once SwitchStatementMissingSomeCases - switch (e.keyCode) - { - case KeyCode.C: - SearchWindowProvider.FlowPort = null; - SearchWindow - .Open( - new SearchWindowContext(GUIUtility.GUIToScreenPoint(layout.position) + new Vector2(125.0f, 55.0f)), - SearchWindowProvider - ); - break; - } - } - ); - } - - public void Relocation(bool forceReset = false) - { - var nextYList = new List(); - - var groupId = Undo.GetCurrentGroup(); - - foreach (var pair in NormalizedPositionDictionary) - { - var node = pair.Key; - var normalizedPosition = pair.Value; - if (nextYList.Count <= normalizedPosition.x) - { - nextYList.Add(0.0f); - } - - if (!forceReset && node.GetRecordedPosition().magnitude > 0.0f) - { - node.SetPosition(new Rect(node.GetRecordedPosition(), node.layout.size)); - } - else - { - node.SetPosition( - new Rect( - new Vector2(normalizedPosition.x * (NodeWidth + NodeMargin.x) + NodesOffset.x, nextYList[normalizedPosition.x] + NodesOffset.y), - node.layout.size - ) - ); - node.ApplyPosition(); - } - - nextYList[normalizedPosition.x] += node.layout.height + NodeMargin.y; - } - - Undo.CollapseUndoOperations(groupId); - } - - internal Vector2 NormalizeMousePosition(Vector2 mousePosition) - { - return contentViewContainer - .WorldToLocal( - FlowEditorWindow - .Window - .rootVisualElement - .ChangeCoordinatesTo( - FlowEditorWindow.Window.rootVisualElement.parent, - mousePosition - FlowEditorWindow.Window.position.position - ) - ); - } - - internal void SetupActAsTrigger() - { - this.Query() - .Children() - .Where(x => x.ConnectorInfo.Connector is ConnectorBase) - .ForEach(x => ((ConnectorBase) x.ConnectorInfo.Connector).ActAsTrigger = (x.InputPort.connections == null || !x.InputPort.connections.Any())); - } - - private void CreateNodesFromInstance() - { - var connectables = UniFlowSettings.instance.IsPrefabMode - ? UniFlowSettings.instance.SelectedGameObject - .GetComponentsInChildren(true) - .ToArray() - : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) - .GetRootGameObjects() - .SelectMany(x => x.GetComponentsInChildren(true)) - .ToArray(); - - - foreach (var connectable in connectables) - { - if (!DestinationConnectors.ContainsKey(connectable)) - { - DestinationConnectors[connectable] = new List(); - } - - var connector = connectable; - if (connector == default || connector.TargetComponents == null) - { - continue; - } - - foreach (var targetConnector in connector.TargetComponents) - { - if (targetConnector == default) - { - continue; - } - - if (!SourceConnectors.ContainsKey(targetConnector)) - { - SourceConnectors[targetConnector] = new List(); - } - - DestinationConnectors[connectable].Add(targetConnector); - SourceConnectors[targetConnector].Add(connectable); - } - } - - var rootConnectables = connectables.Where(x => !SourceConnectors.ContainsKey(x)).ToArray(); - if (!rootConnectables.Any() && connectables.Any()) - { - rootConnectables = new[] {connectables.First()}; - } - - if (UniFlowSettings.instance.SelectedGameObject != default && !UniFlowSettings.instance.IsPrefabMode) - { - rootConnectables = rootConnectables.Where(x => x is ConnectorBase connector && connector != default && ContainsSelectedGameObjectInConnectableTree(connector)).ToArray(); - } - - foreach (var (rootConnectable, index) in rootConnectables.Select((v, i) => (v, i))) - { - CreateNodeRecursive(rootConnectable, new Vector2Int(0, index)); - } - } - - private static bool ContainsSelectedGameObjectInConnectableTree(ConnectorBase haystack) - { - if (haystack.gameObject == UniFlowSettings.instance.SelectedGameObject) - { - return true; - } - - return haystack - .TargetComponents - .Where(x => x != default) - .Any( - x => - x.gameObject == UniFlowSettings.instance.SelectedGameObject - || x is ConnectorBase child && child != default && ContainsSelectedGameObjectInConnectableTree(child) - ); - } - - private void CreateNodeRecursive(IConnector connectable, Vector2Int normalizedPosition) - { - var node = AddNode(connectable.GetType(), connectable, Vector2.zero); - NormalizedPositionDictionary[node] = normalizedPosition; - RenderedNodes[connectable] = node; - - // ReSharper disable once InvertIf - if (DestinationConnectors.ContainsKey(connectable)) - { - foreach (var (targetConnectable, index) in DestinationConnectors[connectable].Select((v, i) => (v, i))) - { - if (!RenderedNodes.ContainsKey(targetConnectable)) - { - CreateNodeRecursive(targetConnectable, new Vector2Int(normalizedPosition.x + 1, normalizedPosition.y + index)); - } - else if (NormalizedPositionDictionary[RenderedNodes[targetConnectable]].x < normalizedPosition.x + 1) - { - NormalizedPositionDictionary[RenderedNodes[targetConnectable]] = new Vector2Int(normalizedPosition.x + 1, normalizedPosition.y + index); - } - } - } - } - - private void CreateEdges() - { - foreach (var (connectable, targetConnectables) in DestinationConnectors.Select(x => (x.Key, x.Value))) - { - foreach (var targetConnectable in targetConnectables) - { - if (!RenderedNodes.ContainsKey(connectable) || !RenderedNodes.ContainsKey(targetConnectable)) - { - continue; - } - - AddElement(AddEdge((FlowPort) RenderedNodes[connectable].OutputPort, (FlowPort) RenderedNodes[targetConnectable].InputPort)); - } - } - } - - public FlowNode AddNode(Type connectableType, IConnector connectableInstance, Vector2 position) - { - var connectableInfo = ConnectorInfo.Create(connectableType, connectableInstance); - FlowEditorWindow.Window.ConnectableInfoList.Add(connectableInfo); - var node = new FlowNode(connectableInfo, EdgeConnectorListener); - node.Initialize(); - node.SetPosition(new Rect(position.x, position.y, 0, 0)); - AddElement(node); - return node; - } - - public FlowEdge AddEdge(FlowPort outputPort, FlowPort inputPort) - { - var edge = new FlowEdge - { - output = outputPort, - input = inputPort, - }; - edge.output.Connect(edge); - edge.input.Connect(edge); - AddElement(edge); - SetupActAsTrigger(); - return edge; - } - - public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAdapter) - { - return ports - .ToList() - .Where(x => x.direction != startPort.direction && x.node != startPort.node) - .ToList(); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.Experimental.GraphView; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowGraphView : GraphView + { + private IDictionary> DestinationConnectors { get; } = new Dictionary>(); + private IDictionary> SourceConnectors { get; } = new Dictionary>(); + private IDictionary RenderedNodes { get; } = new Dictionary(); + private IDictionary NormalizedPositionDictionary { get; } = new Dictionary(); + private SearchWindowProvider SearchWindowProvider { get; set; } + private EdgeConnectorListener EdgeConnectorListener { get; set; } + private ValueInjectionConnectorListener ValueInjectionConnectorListener { get; set; } + + private const float NodeWidth = 300.0f; + private static Vector2 NodesOffset { get; } = new Vector2(50.0f, 50.0f); + private static Vector2 NodeMargin { get; } = new Vector2(50.0f, 50.0f); + + public void Initialize() + { + UpdateViewTransform(UniFlowSettings.instance.LatestPosition, UniFlowSettings.instance.LatestScale); + styleSheets.Add(AssetReferences.Instance.FlowGraphView); + SetupZoom(0.05f, ContentZoomer.DefaultMaxScale); + this.AddManipulator(new ContentDragger()); + this.AddManipulator(new SelectionDragger()); + this.AddManipulator(new RectangleSelector()); + this.AddManipulator(new ClickSelector()); + + var flowGridBackground = new FlowGridBackground + { + name = typeof(FlowGridBackground).Name, + }; + Insert(0, flowGridBackground); + + SearchWindowProvider = ScriptableObject.CreateInstance(); + SearchWindowProvider.Initialize(this); + EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); + ValueInjectionConnectorListener = new ValueInjectionConnectorListener(this); + + viewTransformChanged += graphView => + { + UniFlowSettings.instance.LatestPosition = graphView.viewTransform.position; + UniFlowSettings.instance.LatestScale = graphView.viewTransform.scale; + }; + + nodeCreationRequest += context => + { + SearchWindowProvider.FlowPort = null; + SearchWindow + .Open( + new SearchWindowContext(context.screenMousePosition), + SearchWindowProvider + ); + }; + + deleteSelection += (operationName, user) => + { + DeleteSelection(); + SetupActAsTrigger(); + }; + + elementsRemovedFromStackNode += (stackNode, removedGraphElements) => + { + removedGraphElements.ToList().ForEach(Debug.Log); + SetupActAsTrigger(); + }; + elementsRemovedFromGroup += (group, removedGraphElements) => + { + removedGraphElements.ToList().ForEach(Debug.Log); + SetupActAsTrigger(); + }; + + graphViewChanged += change => + { + change + .elementsToRemove? + .OfType() + .ToList() + .ForEach( + x => x.RemoveFromGraphView() + ); + SetupActAsTrigger(); + return change; + }; + + CreateNodesFromInstance(); + + CreateEdges(); + + RegisterCallback( + (GeometryChangedEvent e) => + { + Relocation(); + } + ); + RegisterCallback( + (KeyDownEvent e) => + { + // ReSharper disable once SwitchStatementMissingSomeCases + switch (e.keyCode) + { + case KeyCode.C: + SearchWindowProvider.FlowPort = null; + SearchWindow + .Open( + new SearchWindowContext(GUIUtility.GUIToScreenPoint(layout.position) + new Vector2(125.0f, 55.0f)), + SearchWindowProvider + ); + break; + } + } + ); + } + + public void Relocation(bool forceReset = false) + { + var nextYList = new List(); + + var groupId = Undo.GetCurrentGroup(); + + foreach (var pair in NormalizedPositionDictionary) + { + var node = pair.Key; + var normalizedPosition = pair.Value; + if (nextYList.Count <= normalizedPosition.x) + { + nextYList.Add(0.0f); + } + + if (!forceReset && node.GetRecordedPosition().magnitude > 0.0f) + { + node.SetPosition(new Rect(node.GetRecordedPosition(), node.layout.size)); + } + else + { + node.SetPosition( + new Rect( + new Vector2(normalizedPosition.x * (NodeWidth + NodeMargin.x) + NodesOffset.x, nextYList[normalizedPosition.x] + NodesOffset.y), + node.layout.size + ) + ); + node.ApplyPosition(); + } + + nextYList[normalizedPosition.x] += node.layout.height + NodeMargin.y; + } + + Undo.CollapseUndoOperations(groupId); + } + + internal Vector2 NormalizeMousePosition(Vector2 mousePosition) + { + return contentViewContainer + .WorldToLocal( + FlowEditorWindow + .Window + .rootVisualElement + .ChangeCoordinatesTo( + FlowEditorWindow.Window.rootVisualElement.parent, + mousePosition - FlowEditorWindow.Window.position.position + ) + ); + } + + internal void SetupActAsTrigger() + { + this.Query() + .Children() + .Where(x => x.ConnectorInfo.Connector is ConnectorBase) + .ForEach(x => ((ConnectorBase) x.ConnectorInfo.Connector).ActAsTrigger = (x.InputPort.connections == null || !x.InputPort.connections.Any())); + } + + private void CreateNodesFromInstance() + { + var connectables = UniFlowSettings.instance.IsPrefabMode + ? UniFlowSettings.instance.SelectedGameObject + .GetComponentsInChildren(true) + .ToArray() + : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) + .GetRootGameObjects() + .SelectMany(x => x.GetComponentsInChildren(true)) + .ToArray(); + + + foreach (var connectable in connectables) + { + if (!DestinationConnectors.ContainsKey(connectable)) + { + DestinationConnectors[connectable] = new List(); + } + + var connector = connectable; + if (connector == default || connector.TargetComponents == null) + { + continue; + } + + foreach (var targetConnector in connector.TargetComponents) + { + if (targetConnector == default) + { + continue; + } + + if (!SourceConnectors.ContainsKey(targetConnector)) + { + SourceConnectors[targetConnector] = new List(); + } + + DestinationConnectors[connectable].Add(targetConnector); + SourceConnectors[targetConnector].Add(connectable); + } + } + + var rootConnectables = connectables.Where(x => !SourceConnectors.ContainsKey(x)).ToArray(); + if (!rootConnectables.Any() && connectables.Any()) + { + rootConnectables = new[] {connectables.First()}; + } + + if (UniFlowSettings.instance.SelectedGameObject != default && !UniFlowSettings.instance.IsPrefabMode) + { + rootConnectables = rootConnectables.Where(x => x is ConnectorBase connector && connector != default && ContainsSelectedGameObjectInConnectableTree(connector)).ToArray(); + } + + foreach (var (rootConnectable, index) in rootConnectables.Select((v, i) => (v, i))) + { + CreateNodeRecursive(rootConnectable, new Vector2Int(0, index)); + } + } + + private static bool ContainsSelectedGameObjectInConnectableTree(ConnectorBase haystack) + { + if (haystack.gameObject == UniFlowSettings.instance.SelectedGameObject) + { + return true; + } + + return haystack + .TargetComponents + .Where(x => x != default) + .Any( + x => + x.gameObject == UniFlowSettings.instance.SelectedGameObject + || x is ConnectorBase child && child != default && ContainsSelectedGameObjectInConnectableTree(child) + ); + } + + private void CreateNodeRecursive(IConnector connectable, Vector2Int normalizedPosition) + { + var node = AddNode(connectable.GetType(), connectable, Vector2.zero); + NormalizedPositionDictionary[node] = normalizedPosition; + RenderedNodes[connectable] = node; + + // ReSharper disable once InvertIf + if (DestinationConnectors.ContainsKey(connectable)) + { + foreach (var (targetConnectable, index) in DestinationConnectors[connectable].Select((v, i) => (v, i))) + { + if (!RenderedNodes.ContainsKey(targetConnectable)) + { + CreateNodeRecursive(targetConnectable, new Vector2Int(normalizedPosition.x + 1, normalizedPosition.y + index)); + } + else if (NormalizedPositionDictionary[RenderedNodes[targetConnectable]].x < normalizedPosition.x + 1) + { + NormalizedPositionDictionary[RenderedNodes[targetConnectable]] = new Vector2Int(normalizedPosition.x + 1, normalizedPosition.y + index); + } + } + } + } + + private void CreateEdges() + { + foreach (var (connectable, targetConnectables) in DestinationConnectors.Select(x => (x.Key, x.Value))) + { + foreach (var targetConnectable in targetConnectables) + { + if (!RenderedNodes.ContainsKey(connectable) || !RenderedNodes.ContainsKey(targetConnectable)) + { + continue; + } + + var edge = AddEdge((FlowPort) RenderedNodes[connectable].OutputPort, (FlowPort) RenderedNodes[targetConnectable].InputPort); + AddElement(edge); + } + } + } + + public FlowNode AddNode(Type connectableType, IConnector connectableInstance, Vector2 position) + { + var connectableInfo = ConnectorInfo.Create(connectableType, connectableInstance); + FlowEditorWindow.Window.ConnectableInfoList.Add(connectableInfo); + var node = new FlowNode(connectableInfo, EdgeConnectorListener, ValueInjectionConnectorListener); + node.Initialize(); + node.SetPosition(new Rect(position.x, position.y, 0, 0)); + AddElement(node); + return node; + } + + public static FlowEdge AddEdge(Port outputPort, Port inputPort) + { + var edge = new FlowEdge + { + output = outputPort, + input = inputPort, + }; + edge.output.Connect(edge); + edge.input.Connect(edge); + return edge; + } + + public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAdapter) + { + if (startPort is FlowValuePublishPort startFlowValuePublishPort) + { + return ports + .ToList() + .Where( + x => + x is FlowValueReceivePort flowValueReceivePort + && startFlowValuePublishPort.ValuePublisherInfo.Type == flowValueReceivePort.ValueReceiverInfo.Type + && x.direction != startPort.direction + && x.node != startPort.node + ) + .ToList(); + } + + if (startPort is FlowValueReceivePort startFlowValueReceivePort) + { + return ports + .ToList() + .Where( + x => + x is FlowValuePublishPort flowValuePublishPort + && startFlowValueReceivePort.ValueReceiverInfo.Type == flowValuePublishPort.ValuePublisherInfo.Type + && x.direction != startPort.direction + && x.node != startPort.node + ) + .ToList(); + } + + return ports + .ToList() + .Where(x => x is FlowPort && x.direction != startPort.direction && x.node != startPort.node) + .ToList(); + } + } +} diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index e3fb65c..5a6d256 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text.RegularExpressions; using UniRx; @@ -14,10 +15,11 @@ namespace UniFlow.Editor { public class FlowNode : Node, IRemovableElement { - public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener) + public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener, ValueInjectionConnectorListener valueInjectionConnectorListener) { ConnectorInfo = connectorInfo; EdgeConnectorListener = edgeConnectorListener; + ValueInjectionConnectorListener = valueInjectionConnectorListener; } public void Initialize() @@ -67,6 +69,7 @@ public void Initialize() internal ConnectorInfo ConnectorInfo { get; } private IEdgeConnectorListener EdgeConnectorListener { get; } + private IEdgeConnectorListener ValueInjectionConnectorListener { get; } private const string DefaultTargetGameObjectName = "UniFlowController"; private static IEnumerable ParameterNamesHideInNode { get; } = new List @@ -218,6 +221,7 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI typeof(List<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) || typeof(ExposedReference<>).IsAssignableFrom(parameter.Type.GetGenericTypeDefinition()) ) + || PropertyFieldRenderableTypes.Contains(parameter.Type) ) { if (connectorInfo.GameObject == default || connectorInfo.Connector == default) @@ -254,9 +258,26 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI fieldType = typeof(Object); } + if (!CreateFieldFunctions.ContainsKey(fieldType)) + { + return null; + } + return CreateFieldFunctions[fieldType](connectorInfo, parameter); } + private static IList PropertyFieldRenderableTypes { get; } = new List + { + typeof(Vector2), + typeof(Vector3), + typeof(Vector4), + typeof(Quaternion), + typeof(Vector2Int), + typeof(Vector3Int), + typeof(Color), + typeof(Color32), + }; + private static BindableElement CreateBindableElement(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) where TResult : BaseField, new() { var field = new TResult @@ -310,29 +331,47 @@ private static GameObject DeterminateGameObject() return go; } + [SuppressMessage("ReSharper", "InvertIf")] private void AddPorts() { - if (typeof(IConnector).IsAssignableFrom(ConnectorInfo.Type)) - { - OutputPort = FlowPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, EdgeConnectorListener); - OutputPort.portName = "Out"; - outputContainer.Add(OutputPort); - } - else - { - outputContainer.RemoveFromHierarchy(); - } + OutputPort = FlowPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, EdgeConnectorListener); + OutputPort.portName = "Out"; + outputContainer.Add(OutputPort); + // Prevent grab port for input InputPort = FlowPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi); InputPort.portName = "In"; inputContainer.Add(InputPort); - foreach (var suppliableParameter in ConnectorInfo.SuppliableParameterList) + if (ConnectorInfo.ValuePublishers.Any()) { - var suppliedPort = FlowPort.Create(Orientation.Vertical, Direction.Input, Port.Capacity.Multi); - suppliedPort.portName = suppliableParameter.Name; - inputContainer.Add(suppliedPort); + var divider = new VisualElement {name = "divider"}; + divider.AddToClassList("horizontal"); + outputContainer.Add(divider); + + foreach (var publisher in ConnectorInfo.ValuePublishers) + { + var port = FlowValuePublishPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, publisher, ValueInjectionConnectorListener); + port.portName = publisher.Name; + outputContainer.Add(port); + } + } + + if (ConnectorInfo.ValueReceivers.Any()) + { + var divider = new VisualElement {name = "divider"}; + divider.AddToClassList("horizontal"); + inputContainer.Add(divider); + + foreach (var receiver in ConnectorInfo.ValueReceivers) + { + var port = FlowValueReceivePort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, receiver, ValueInjectionConnectorListener); + port.portName = receiver.Name; + inputContainer.Add(port); + } } + +// UnityEditor.Events.UnityEventTools.AddPersistentListener(new PublishGameObjectEvent(), new UnityAction()); } private static string ToDisplayName(string original) diff --git a/Assets/Editor/Scripts/FlowPort.cs b/Assets/Editor/Scripts/FlowPort.cs index 1037b7a..91bf47a 100644 --- a/Assets/Editor/Scripts/FlowPort.cs +++ b/Assets/Editor/Scripts/FlowPort.cs @@ -1,29 +1,28 @@ -using System; -using UnityEditor.Experimental.GraphView; -using UnityEngine.UIElements; - -namespace UniFlow.Editor -{ - public class FlowPort : Port - { - private FlowPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) - { - } - - public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, IEdgeConnectorListener edgeConnectorListener = default) - { - var port = new FlowPort(portOrientation, portDirection, portCapacity, typeof(FlowPort)); - - // ReSharper disable once InvertIf - if (edgeConnectorListener != default) - { - port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); - port.AddManipulator(port.m_EdgeConnector); - } - - return port; - } - - - } -} \ No newline at end of file +using System; +using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowPort : Port + { + private FlowPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + { + } + + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, IEdgeConnectorListener edgeConnectorListener = default) + { + // Should I use Port.Create()? + var port = new FlowPort(portOrientation, portDirection, portCapacity, typeof(FlowPort)); + + // ReSharper disable once InvertIf + if (edgeConnectorListener != default) + { + port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); + port.AddManipulator(port.m_EdgeConnector); + } + + return port; + } + } +} diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs b/Assets/Editor/Scripts/FlowValuePublishPort.cs new file mode 100644 index 0000000..14f59d8 --- /dev/null +++ b/Assets/Editor/Scripts/FlowValuePublishPort.cs @@ -0,0 +1,32 @@ +using System; +using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowValuePublishPort : Port + { + private FlowValuePublishPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + { + } + + public ConnectorInfo.ValuePublisherInfo ValuePublisherInfo { get; private set; } + + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ConnectorInfo.ValuePublisherInfo valuePublisherInfo, IEdgeConnectorListener edgeConnectorListener = default) + { + var port = new FlowValuePublishPort(portOrientation, portDirection, portCapacity, typeof(FlowValuePublishPort)) + { + ValuePublisherInfo = valuePublisherInfo, + }; + + // ReSharper disable once InvertIf + if (edgeConnectorListener != default) + { + port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); + port.AddManipulator(port.m_EdgeConnector); + } + + return port; + } + } +} diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs.meta b/Assets/Editor/Scripts/FlowValuePublishPort.cs.meta new file mode 100644 index 0000000..7587bd4 --- /dev/null +++ b/Assets/Editor/Scripts/FlowValuePublishPort.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 88d71ad7a2564eb6b4550185b87d182d +timeCreated: 1569585502 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowValueReceivePort.cs b/Assets/Editor/Scripts/FlowValueReceivePort.cs new file mode 100644 index 0000000..ddeaa52 --- /dev/null +++ b/Assets/Editor/Scripts/FlowValueReceivePort.cs @@ -0,0 +1,32 @@ +using System; +using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowValueReceivePort : Port + { + private FlowValueReceivePort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + { + } + + public ConnectorInfo.ValueReceiverInfo ValueReceiverInfo { get; private set; } + + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ConnectorInfo.ValueReceiverInfo valueReceiverInfo, IEdgeConnectorListener edgeConnectorListener = default) + { + var port = new FlowValueReceivePort(portOrientation, portDirection, portCapacity, typeof(FlowValueReceivePort)) + { + ValueReceiverInfo = valueReceiverInfo, + }; + + // ReSharper disable once InvertIf + if (edgeConnectorListener != default) + { + port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); + port.AddManipulator(port.m_EdgeConnector); + } + + return port; + } + } +} diff --git a/Assets/Editor/Scripts/FlowValueReceivePort.cs.meta b/Assets/Editor/Scripts/FlowValueReceivePort.cs.meta new file mode 100644 index 0000000..2fc5922 --- /dev/null +++ b/Assets/Editor/Scripts/FlowValueReceivePort.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ec2229efa2cb4e4d8437f71ad267ee91 +timeCreated: 1569585516 \ No newline at end of file diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index b0c6757..c8471c4 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -1,113 +1,115 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using UnityEditor.Experimental.GraphView; -using UnityEngine; - -namespace UniFlow.Editor -{ - public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider - { - private FlowGraphView FlowGraphView { get; set; } - - private List SearchTreeEntries { get; set; } - - private Texture2D DummyIcon { get; set; } - - public FlowPort FlowPort { get; set; } - - private IDictionary SearchTreeGroupEntries { get; } = new Dictionary(); - - private static IEnumerable DirectoryOrder { get; } = new[] - { - "Controller", - "Event", - "ValueProvider", - "ValueComparer", - "Logic", - "Receiver", - "Misc", - }; - - public void Initialize(FlowGraphView flowGraphView) - { - FlowGraphView = flowGraphView; - - DummyIcon = new Texture2D(1, 1); - DummyIcon.SetPixel(0, 0, new Color(0, 0, 0, 0)); - DummyIcon.Apply(); - - SearchTreeEntries = new List - { - new SearchTreeGroupEntry(new GUIContent("Add Node")) - }; - - AppDomain - .CurrentDomain - .GetAssemblies() - .SelectMany(x => x.GetTypes()) - .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectorBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) - .Where(x => x.GetCustomAttributes(typeof(AddComponentMenu), false).Any()) - .Select(x => (menu: x.GetCustomAttributes(typeof(AddComponentMenu), false).OfType().First(), type: x)) - .Select(x => (x.menu, x.type, entries: x.menu.componentMenu.Split('/').Skip(1).ToArray())) - .Select(x => (x.menu, x.type, x.entries, directory: x.entries.Take(x.entries.Length - 1).Aggregate((a, b) => $"{a}/{b}"))) - .Select(x => (x.menu, x.type, x.entries, x.directory, directoryOrder: DirectoryOrder.Contains(x.directory) ? DirectoryOrder.Select((directory, index) => (directory, index)).First(y => y.directory == x.directory).index : int.MaxValue)) - .OrderBy(x => x.directoryOrder) - .ThenBy(x => x.menu.componentOrder) - .ToList() - .ForEach( - item => - { - var (_, type, componentMenuEntries, _, _) = item; - var fullPath = new StringBuilder(); - foreach (var (componentMenuEntry, index) in componentMenuEntries.Select((x, i) => (x, i))) - { - fullPath.Append($"/{componentMenuEntry}"); - if (index == componentMenuEntries.Length - 1) - { - break; - } - - if (SearchTreeGroupEntries.ContainsKey(fullPath.ToString())) - { - continue; - } - - SearchTreeGroupEntries[fullPath.ToString()] = new SearchTreeGroupEntry(new GUIContent(componentMenuEntry)) {level = index + 1}; - SearchTreeEntries.Add(SearchTreeGroupEntries[fullPath.ToString()]); - } - - SearchTreeEntries.Add(new SearchTreeEntry(new GUIContent(componentMenuEntries.Last(), DummyIcon)) {level = componentMenuEntries.Length, userData = type}); - } - ); - } - - List ISearchWindowProvider.CreateSearchTree(SearchWindowContext context) - { - return SearchTreeEntries; - } - - bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) - { - if (!typeof(IConnector).IsAssignableFrom((Type) searchTreeEntry.userData)) - { - return false; - } - - var node = FlowGraphView.AddNode((Type) searchTreeEntry.userData, null, FlowGraphView.NormalizeMousePosition(context.screenMousePosition)); - - if (FlowPort != default) - { - FlowGraphView.AddEdge(FlowPort, (FlowPort) node.InputPort); - if (FlowPort.node is FlowNode targetFlowNode && targetFlowNode.ConnectorInfo.Connector is ConnectorBase targetConnector) - { - targetConnector.TargetComponents = new List {node.ConnectorInfo.Connector as ConnectorBase}; - } - } - FlowGraphView.SetupActAsTrigger(); - - return true; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor.Experimental.GraphView; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider + { + private FlowGraphView FlowGraphView { get; set; } + + private List SearchTreeEntries { get; set; } + + private Texture2D DummyIcon { get; set; } + + public FlowPort FlowPort { get; set; } + + private IDictionary SearchTreeGroupEntries { get; } = new Dictionary(); + + private static IEnumerable DirectoryOrder { get; } = new[] + { + "Controller", + "Event", + "ValueProvider", + "ValueComparer", + "Logic", + "Receiver", + "Misc", + }; + + public void Initialize(FlowGraphView flowGraphView) + { + FlowGraphView = flowGraphView; + + DummyIcon = new Texture2D(1, 1); + DummyIcon.SetPixel(0, 0, new Color(0, 0, 0, 0)); + DummyIcon.Apply(); + + SearchTreeEntries = new List + { + new SearchTreeGroupEntry(new GUIContent("Add Node")) + }; + + AppDomain + .CurrentDomain + .GetAssemblies() + .SelectMany(x => x.GetTypes()) + .Where(x => x.IsClass && x.IsSubclassOf(typeof(ConnectorBase)) && !x.IsAbstract && x.GetCustomAttributes(false).Any(y => y is AddComponentMenu)) + .Where(x => x.GetCustomAttributes(typeof(AddComponentMenu), false).Any()) + .Select(x => (menu: x.GetCustomAttributes(typeof(AddComponentMenu), false).OfType().First(), type: x)) + .Select(x => (x.menu, x.type, entries: x.menu.componentMenu.Split('/').Skip(1).ToArray())) + .Select(x => (x.menu, x.type, x.entries, directory: x.entries.Take(x.entries.Length - 1).Aggregate((a, b) => $"{a}/{b}"))) + .Select(x => (x.menu, x.type, x.entries, x.directory, directoryOrder: DirectoryOrder.Contains(x.directory) ? DirectoryOrder.Select((directory, index) => (directory, index)).First(y => y.directory == x.directory).index : int.MaxValue)) + .OrderBy(x => x.directoryOrder) + .ThenBy(x => x.menu.componentOrder) + .ToList() + .ForEach( + item => + { + var (_, type, componentMenuEntries, _, _) = item; + var fullPath = new StringBuilder(); + foreach (var (componentMenuEntry, index) in componentMenuEntries.Select((x, i) => (x, i))) + { + fullPath.Append($"/{componentMenuEntry}"); + if (index == componentMenuEntries.Length - 1) + { + break; + } + + if (SearchTreeGroupEntries.ContainsKey(fullPath.ToString())) + { + continue; + } + + SearchTreeGroupEntries[fullPath.ToString()] = new SearchTreeGroupEntry(new GUIContent(componentMenuEntry)) {level = index + 1}; + SearchTreeEntries.Add(SearchTreeGroupEntries[fullPath.ToString()]); + } + + SearchTreeEntries.Add(new SearchTreeEntry(new GUIContent(componentMenuEntries.Last(), DummyIcon)) {level = componentMenuEntries.Length, userData = type}); + } + ); + } + + List ISearchWindowProvider.CreateSearchTree(SearchWindowContext context) + { + return SearchTreeEntries; + } + + bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, SearchWindowContext context) + { + if (!typeof(IConnector).IsAssignableFrom((Type) searchTreeEntry.userData)) + { + return false; + } + + var node = FlowGraphView.AddNode((Type) searchTreeEntry.userData, null, FlowGraphView.NormalizeMousePosition(context.screenMousePosition)); + + if (FlowPort != default) + { + var edge = FlowGraphView.AddEdge(FlowPort, (FlowPort) node.InputPort); + FlowGraphView.AddElement(edge); + FlowGraphView.SetupActAsTrigger(); + if (FlowPort.node is FlowNode targetFlowNode && targetFlowNode.ConnectorInfo.Connector is ConnectorBase targetConnector) + { + targetConnector.TargetComponents = new List {node.ConnectorInfo.Connector as ConnectorBase}; + } + } + FlowGraphView.SetupActAsTrigger(); + + return true; + } + } +} diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs new file mode 100644 index 0000000..71bad59 --- /dev/null +++ b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor.Events; +using UnityEditor.Experimental.GraphView; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Editor +{ + public class ValueInjectionConnectorListener : IEdgeConnectorListener + { + public ValueInjectionConnectorListener(FlowGraphView flowGraphView) + { + FlowGraphView = flowGraphView; + } + + private FlowGraphView FlowGraphView { get; } + + private static IDictionary> AddPersistentListenerCallbackMap { get; } = new Dictionary> + { + {typeof(bool), (unityEvent, unityAction) => UnityEventTools.AddBoolPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + {typeof(int), (unityEvent, unityAction) => UnityEventTools.AddIntPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + {typeof(float), (unityEvent, unityAction) => UnityEventTools.AddFloatPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + {typeof(string), (unityEvent, unityAction) => UnityEventTools.AddStringPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + }; + + void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) + { + // Do nothing + } + + void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) + { + FlowEdge registeredEdge = default; + switch (edge.output) + { + case FlowValuePublishPort _ when edge.input is FlowValueReceivePort: + registeredEdge = FlowGraphView.AddEdge(edge.output, edge.input); + break; + case FlowValueReceivePort _ when edge.input is FlowValuePublishPort: + registeredEdge = FlowGraphView.AddEdge(edge.input, edge.output); + break; + } + + if (registeredEdge == default) + { + return; + } + + FlowGraphView.AddElement(registeredEdge); + + if (!(registeredEdge.output is FlowValuePublishPort publishPort) || !(registeredEdge.input is FlowValueReceivePort receivePort)) + { + return; + } + + var targetInstance = receivePort.ValueReceiverInfo.Instance; + var setMethodInfo = receivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(); + var unityEvent = publishPort.ValuePublisherInfo.PropertyInfo.GetValue(publishPort.ValuePublisherInfo.Instance); + var unityAction = Delegate + .CreateDelegate( + typeof(UnityAction<>).MakeGenericType(setMethodInfo.GetParameters().First().ParameterType), + targetInstance, + setMethodInfo.Name, + false + ); + + if (AddPersistentListenerCallbackMap.ContainsKey(publishPort.ValuePublisherInfo.Type)) + { + AddPersistentListenerCallbackMap[publishPort.ValuePublisherInfo.Type].Invoke(unityEvent, unityAction); + } + else if (publishPort.ValuePublisherInfo.Type.IsEnum) + { + AddPersistentListenerCallbackMap[typeof(int)].Invoke(unityEvent, unityAction); + } + else + { + // unityEvent.AddPersistentListener() + unityEvent + .GetType() + .BaseType? + .GetMethodsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? + .First(x => x.Name == "AddPersistentListener" && !x.GetParameters().Any()) + .Invoke(unityEvent, null); + // unityEvent.m_PersistentCalls + var persistentCalls = unityEvent + .GetType() + .GetFieldRecursive("m_PersistentCalls", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .GetValue(unityEvent); + // unityEvent.m_PersistentCalls.RegisterObjectPersistentListener(unityEvent.GetPersistentEventCount() - 1, targetInstance, null, methodInfo.Name); + persistentCalls + .GetType() + .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Invoke( + persistentCalls, + new[] + { + (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, + targetInstance, + null, + setMethodInfo.Name + } + ); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1) + var persistentCall = persistentCalls + .GetType() + .GetMethodRecursive("GetListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Invoke(persistentCalls, new object[] {(unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1}); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments + var argumentCache = persistentCall + .GetType() + .GetFieldRecursive("m_Arguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .GetValue(persistentCall); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments.m_ObjectArgumentAssemblyTypeName = setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName + argumentCache + .GetType() + .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); + } + } + } +} diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta new file mode 100644 index 0000000..6f3b458 --- /dev/null +++ b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cc120d6e4f2e4c7988ec959f33a67f37 +timeCreated: 1569585944 \ No newline at end of file From 70506cc7fc1827c220f93650771666023425eb4d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 30 Sep 2019 22:14:14 +0900 Subject: [PATCH 184/453] :wrench: Tweak layout --- Assets/Editor/StyleSheets/FlowNode.uss | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Assets/Editor/StyleSheets/FlowNode.uss b/Assets/Editor/StyleSheets/FlowNode.uss index a48ef1e..9d078aa 100644 --- a/Assets/Editor/StyleSheets/FlowNode.uss +++ b/Assets/Editor/StyleSheets/FlowNode.uss @@ -19,8 +19,15 @@ FlowNode #parameters #items > #divider { } FlowNode #parameters #items > VisualElement .unity-label { - min-width: 150px; - max-width: 150px; + min-width: 100px; + max-width: 100px; +} + +FlowNode #parameters #items > VisualElement #unity-x-input .unity-label, +FlowNode #parameters #items > VisualElement #unity-y-input .unity-label, +FlowNode #parameters #items > VisualElement #unity-z-input .unity-label { + min-width: 20px; + max-width: 20px; } FlowNode #messaged-border { @@ -40,7 +47,3 @@ FlowNode #messaged-border { border-left: 3px; border-right: 3px; } - -.unity-label { - min-width: 100px; -} From a689c37829807c05884109e822f32e8cde6884af Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 12:10:34 +0900 Subject: [PATCH 185/453] :wrench: Avoid warning --- Assets/Editor/StyleSheets/FlowNode.uss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/Editor/StyleSheets/FlowNode.uss b/Assets/Editor/StyleSheets/FlowNode.uss index 9d078aa..4a37239 100644 --- a/Assets/Editor/StyleSheets/FlowNode.uss +++ b/Assets/Editor/StyleSheets/FlowNode.uss @@ -42,8 +42,8 @@ FlowNode #messaged-border { margin-right: 1px; border-radius: 8px; border-color: rgba(255, 255, 0, 0.5); - border-top: 3px; - border-bottom: 3px; - border-left: 3px; - border-right: 3px; + border-top-width: 3px; + border-bottom-width: 3px; + border-left-width: 3px; + border-right-width: 3px; } From 50eca8b8746b9e7953c5dacba3ba65d20254fa2c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 12:59:15 +0900 Subject: [PATCH 186/453] :sparkles: Implement UniFlow.Logger for tests --- Assets/Scripts/Logger.cs | 32 ++++++++++++++++++++++++++++++++ Assets/Scripts/Logger.cs.meta | 3 +++ 2 files changed, 35 insertions(+) create mode 100644 Assets/Scripts/Logger.cs create mode 100644 Assets/Scripts/Logger.cs.meta diff --git a/Assets/Scripts/Logger.cs b/Assets/Scripts/Logger.cs new file mode 100644 index 0000000..cde16ca --- /dev/null +++ b/Assets/Scripts/Logger.cs @@ -0,0 +1,32 @@ +using System; +using UniRx; + +namespace UniFlow +{ + public static class Logger + { + public static bool IsEnabled { get; private set; } + + private static ISubject ConnectorSubject { get; } = new Subject(); + + public static void Activate() + { + IsEnabled = true; + } + + public static void Deactivate() + { + IsEnabled = false; + } + + public static void Log(IConnector connector) + { + ConnectorSubject.OnNext(connector); + } + + public static IObservable OnMessageAsObservable() + { + return ConnectorSubject; + } + } +} diff --git a/Assets/Scripts/Logger.cs.meta b/Assets/Scripts/Logger.cs.meta new file mode 100644 index 0000000..f6bb3eb --- /dev/null +++ b/Assets/Scripts/Logger.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dc86192205524a3a9e6a7bea68f3ebb6 +timeCreated: 1569900372 \ No newline at end of file From 32a6dde31fc59ea32d3a14f551365fa77988f854 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 12:59:35 +0900 Subject: [PATCH 187/453] :white_check_mark: Re-write tests --- Assets/Tests/Runtime/Scripts/AllTest.cs | 49 ++++------ .../Runtime/Scripts/AnimationEventTest.cs | 25 ++--- .../Runtime/Scripts/AnimatorTriggerTest.cs | 24 ++--- .../Runtime/Scripts/AudioControllerTest.cs | 23 ++--- .../Tests/Runtime/Scripts/AudioEventTest.cs | 37 ++++---- .../Tests/Runtime/Scripts/CameraEventTest.cs | 31 ++++--- Assets/Tests/Runtime/Scripts/IntervalTest.cs | 76 +++++++-------- .../Runtime/Scripts/LifecycleEventTest.cs | 18 ++-- .../Runtime/Scripts/PlayableControllerTest.cs | 93 +++++++++---------- Assets/Tests/Runtime/Scripts/TestReceiver.cs | 36 ++++--- .../Runtime/Scripts/TimelineSignalTest.cs | 17 ++-- Assets/Tests/Runtime/Scripts/TimerTest.cs | 19 ++-- .../Runtime/Scripts/UIBehaviourEventTest.cs | 16 ++-- .../Tests/Runtime/Scripts/UniFlowTestBase.cs | 7 +- 14 files changed, 229 insertions(+), 242 deletions(-) diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index 77635a8..240d5af 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -1,4 +1,6 @@ using System.Collections; +using System.Collections.Generic; +using System.Linq; using NUnit.Framework; using UniFlow.Connector.Controller; using UniFlow.Connector.Event; @@ -45,52 +47,41 @@ public IEnumerator Multiple() ); } - private void AssertAll(Messages messages) + private void AssertAll(IEnumerable sentConnectors) { - Assert.AreEqual(5, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.AreEqual(5, connectors.Count); { - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.AreEqual(message.ConnectorType, ConnectorType.UIBehaviourEventTrigger); - Assert.IsInstanceOf(message.Sender.UIBehaviour); - Assert.IsInstanceOf(message.Data); + var connector = connectors[0] as UIBehaviourEventTrigger; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.UIBehaviour); } { - Assert.True(messages[1].Is()); - var message = messages[1].As(); - Assert.IsInstanceOf(message.Sender.Animator); + var connector = connectors[1] as AnimatorTrigger; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.Animator); } { - Assert.True(messages[2].Is()); - var message = messages[2].As(); - Assert.IsInstanceOf(message.Sender.Animator); - Assert.IsInstanceOf(message.Data); - var animationEvent = message.Data; - Assert.NotNull(animationEvent); - Assert.AreEqual(222.2f, animationEvent.floatParameter); - Assert.AreEqual(333, animationEvent.intParameter); - Assert.AreEqual("444", animationEvent.stringParameter); - Assert.IsInstanceOf(animationEvent.objectReferenceParameter); - Assert.AreEqual("All", animationEvent.objectReferenceParameter.name); + var connector = connectors[2] as AnimationEvent; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.Animator); } { - Assert.True(messages[3].Is()); - var message = messages[3].As(); - Assert.IsInstanceOf(message.Sender.PlayableDirector); + var connector = connectors[3] as PlayableController; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.PlayableDirector); } { - Assert.True(messages[4].Is()); - var message = messages[4].As(); - var timelineEvent = message.Data; - Assert.AreEqual(999, timelineEvent.intParameter); + var connector = connectors[4] as TimelineSignal; + Assert.NotNull(connector); } HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs index ea42b6e..0bebb83 100644 --- a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs @@ -1,8 +1,9 @@ using System.Collections; +using System.Collections.Generic; +using System.Linq; using NUnit.Framework; -using UnityEngine; +using UniFlow.Connector.Event; using UnityEngine.TestTools; -using AnimationEvent = UniFlow.Connector.Event.AnimationEvent; namespace UniFlow.Tests.Runtime { @@ -20,21 +21,15 @@ public IEnumerator AnimationEvent() ); } - private void AssertAnimationEvent(Messages messages) + private void AssertAnimationEvent(IEnumerable sentConnectors) { - Assert.AreEqual(1, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.AreEqual(1, connectors.Count); + + var connector = connectors[0] as AnimationEvent; + Assert.NotNull(connector); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Data); - var animationEvent = message.Data; - Assert.NotNull(animationEvent); - Assert.AreEqual(11.1f, animationEvent.floatParameter); - Assert.AreEqual(22, animationEvent.intParameter); - Assert.AreEqual("33", animationEvent.stringParameter); - Assert.IsInstanceOf(animationEvent.objectReferenceParameter); - Assert.AreEqual("AnimationEvent", animationEvent.objectReferenceParameter.name); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs index 476556c..989d597 100644 --- a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs @@ -1,9 +1,9 @@ using System.Collections; +using System.Collections.Generic; +using System.Linq; using NUnit.Framework; using UniFlow.Connector.Controller; -using UnityEngine; using UnityEngine.TestTools; -using AnimationEvent = UniFlow.Connector.Event.AnimationEvent; namespace UniFlow.Tests.Runtime { @@ -21,23 +21,15 @@ public IEnumerator AnimatorTrigger() ); } - private void AssertAnimatorTrigger(Messages messages) + private void AssertAnimatorTrigger(IEnumerable sentConnectors) { - Assert.AreEqual(2, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.AreEqual(2, connectors.Count); - Assert.True(messages[0].Is()); + var connector = connectors[0] as AnimatorTrigger; + Assert.NotNull(connector); - Assert.True(messages[1].Is()); - var message = messages[1].As(); - Assert.IsInstanceOf(message.Data); - var animationEvent = message.Data; - Assert.NotNull(animationEvent); - Assert.AreEqual(22.2f, animationEvent.floatParameter); - Assert.AreEqual(33, animationEvent.intParameter); - Assert.AreEqual("44", animationEvent.stringParameter); - Assert.IsInstanceOf(animationEvent.objectReferenceParameter); - Assert.AreEqual("AnimatorTrigger", animationEvent.objectReferenceParameter.name); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs index 5f69074..17aea81 100644 --- a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Linq; using NUnit.Framework; using UniFlow.Connector.Controller; @@ -20,7 +21,6 @@ public IEnumerator Play() "AudioController", em => AssertAudioEvent( em, - AudioControlMethod.Play, audioSource => { Assert.True(audioSource.isPlaying); @@ -48,7 +48,6 @@ public IEnumerator Stop() "AudioController", em => AssertAudioEvent( em, - AudioControlMethod.Stop, audioSource => { Assert.False(audioSource.isPlaying); @@ -78,7 +77,6 @@ public IEnumerator Pause() "AudioController", em => AssertAudioEvent( em, - AudioControlMethod.Pause, audioSource => { Assert.False(audioSource.isPlaying); @@ -108,7 +106,6 @@ public IEnumerator UnPause() "AudioController", em => AssertAudioEvent( em, - AudioControlMethod.UnPause, audioSource => { Assert.True(audioSource.isPlaying); @@ -131,21 +128,19 @@ public IEnumerator UnPause() ); } - private void AssertAudioEvent(Messages messages, AudioControlMethod audioControlMethod, Action callback) + private void AssertAudioEvent(IEnumerable sentConnectors, Action callback) { - Assert.NotNull(messages); - Assert.AreEqual(2, messages.Count); + var connectors = sentConnectors.ToList(); - Assert.True(messages[1].Is()); - var message = messages[1].As(); + Assert.NotNull(connectors); + Assert.AreEqual(2, connectors.Count); - Assert.NotNull(message.Data); + var connector = connectors[1] as AudioController; + Assert.NotNull(connector); - Assert.AreEqual(audioControlMethod, message.Sender.AudioControlMethod); - - callback(message.Sender.AudioSource); + callback(connector.AudioSource); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs index 95275de..b6cb59d 100644 --- a/Assets/Tests/Runtime/Scripts/AudioEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioEventTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Linq; using NUnit.Framework; using UniFlow.Connector.Event; @@ -177,14 +178,15 @@ public IEnumerator ComplexEvent() yield return RunAssert( "AudioEvent", - em => + sentConnectors => { - Assert.NotNull(em); - Assert.AreEqual(4, em.Count); - Assert.AreEqual(AudioEventType.Play, em[0].As().Sender.AudioEventType); - Assert.AreEqual(AudioEventType.Pause, em[1].As().Sender.AudioEventType); - Assert.AreEqual(AudioEventType.UnPause, em[2].As().Sender.AudioEventType); - Assert.AreEqual(AudioEventType.Stop, em[3].As().Sender.AudioEventType); + var connectors = sentConnectors.ToList(); + Assert.NotNull(sentConnectors); + Assert.AreEqual(4, connectors.Count); + Assert.AreEqual(AudioEventType.Play, (connectors[0] as AudioEvent)?.AudioEventType); + Assert.AreEqual(AudioEventType.Pause, (connectors[1] as AudioEvent)?.AudioEventType); + Assert.AreEqual(AudioEventType.UnPause, (connectors[2] as AudioEvent)?.AudioEventType); + Assert.AreEqual(AudioEventType.Stop, (connectors[3] as AudioEvent)?.AudioEventType); HasAssert = true; }, () => @@ -204,21 +206,20 @@ public IEnumerator ComplexEvent() ); } - private void AssertAudioEvent(Messages messages, AudioEventType audioEventType, int receiveCount = 1) + private void AssertAudioEvent(IEnumerable sentConnectors, AudioEventType audioEventType, int receiveCount = 1) { - Assert.NotNull(messages); - Assert.AreEqual(1, messages.Count); - Assert.AreEqual(receiveCount, Object.FindObjectOfType().ReceiveCount); - - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender.AudioSource); + var connectors = sentConnectors.ToList(); - Assert.NotNull(message.Data); + Assert.NotNull(connectors); + Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(receiveCount, Object.FindObjectOfType().ReceiveCount); - Assert.AreEqual(audioEventType, message.Sender.AudioEventType); + var connector = connectors[0] as AudioEvent; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.AudioSource); + Assert.AreEqual(audioEventType, connector.AudioEventType); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs index 2c78d83..be8c2c7 100644 --- a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Linq; using NUnit.Framework; using UniFlow.Connector.Event; @@ -54,32 +55,32 @@ public IEnumerator CameraBecomeInvisibleEvent() ); } - private void AssertCameraBecomeVisibleEvent(Messages messages) + private void AssertCameraBecomeVisibleEvent(IEnumerable sentConnectors) { - Assert.NotNull(messages); - Assert.AreEqual(1, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.NotNull(connectors); + Assert.AreEqual(1, connectors.Count); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender); + var connector = connectors[0] as CameraEvent; + Assert.NotNull(connector); - Assert.AreEqual(CameraEventType.BecomeVisible, message.Sender.CameraEventType); + Assert.AreEqual(CameraEventType.BecomeVisible, connector.CameraEventType); HasAssert = true; } - private void AssertCameraBecomeInvisibleEvent(Messages messages) + private void AssertCameraBecomeInvisibleEvent(IEnumerable sentConnectors) { - Assert.NotNull(messages); - Assert.AreEqual(1, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.NotNull(connectors); + Assert.AreEqual(1, connectors.Count); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender); + var connector = connectors[0] as CameraEvent; + Assert.NotNull(connector); - Assert.AreEqual(CameraEventType.BecomeInvisible, message.Sender.CameraEventType); + Assert.AreEqual(CameraEventType.BecomeInvisible, connector.CameraEventType); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/IntervalTest.cs b/Assets/Tests/Runtime/Scripts/IntervalTest.cs index a302b8d..c5841c8 100644 --- a/Assets/Tests/Runtime/Scripts/IntervalTest.cs +++ b/Assets/Tests/Runtime/Scripts/IntervalTest.cs @@ -1,37 +1,39 @@ -using System.Collections; -using NUnit.Framework; -using UniFlow.Connector.Logic; -using UnityEngine; -using UnityEngine.TestTools; - -namespace UniFlow.Tests.Runtime -{ - public class IntervalTest : UniFlowTestBase - { - [UnityTest] - public IEnumerator Interval() - { - yield return - RunAssert( - "Interval", - AssertInterval, - null, - 2.5 - ); - } - - private void AssertInterval(Messages messages) - { - Assert.AreEqual(2, Object.FindObjectOfType().ReceiveCount); - Assert.AreEqual(1, messages.Count); - - Assert.AreEqual(ConnectorType.Interval, messages[0].ConnectorType); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender); - Assert.IsInstanceOf(message.Sender.Seconds); - Assert.AreEqual(1.0f, message.Sender.Seconds); - - HasAssert = true; - } - } -} \ No newline at end of file +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using UniFlow.Connector.Logic; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UniFlow.Tests.Runtime +{ + public class IntervalTest : UniFlowTestBase + { + [UnityTest] + public IEnumerator Interval() + { + yield return + RunAssert( + "Interval", + AssertInterval, + null, + 2.5 + ); + } + + private void AssertInterval(IEnumerable sentConnectors) + { + var connectors = sentConnectors.ToList(); + Assert.AreEqual(2, Object.FindObjectOfType().ReceiveCount); + Assert.AreEqual(1, connectors.Count); + + var connector = connectors[0] as Interval; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.Seconds); + Assert.AreEqual(1.0f, connector.Seconds); + + HasAssert = true; + } + } +} diff --git a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs index e251d73..d2275a6 100644 --- a/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/LifecycleEventTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using System.Linq; using NUnit.Framework; using UniFlow.Connector.Event; @@ -95,18 +96,17 @@ private IEnumerator RunAssertInternal(LifecycleEventType lifecycleEventType, Act ); } - private void AssertLifecycleEvent(Messages messages) + private void AssertLifecycleEvent(IEnumerable sentConnectors) { - Assert.NotNull(messages); - Assert.GreaterOrEqual(messages.Count, 1); + var connectors = sentConnectors.ToList(); + Assert.NotNull(connectors); + Assert.GreaterOrEqual(connectors.Count, 1); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender); - - Assert.AreEqual(CurrentLifecycleEventType, message.Sender.LifecycleEventType); + var connector = connectors[0] as LifecycleEvent; + Assert.NotNull(connector); + Assert.AreEqual(CurrentLifecycleEventType, connector.LifecycleEventType); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index b4edf87..3ce64f5 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -1,47 +1,46 @@ -using System.Collections; -using NUnit.Framework; -using UniFlow.Connector.Controller; -using UniFlow.Connector.Event; -using UnityEngine.Playables; -using UnityEngine.TestTools; - -namespace UniFlow.Tests.Runtime -{ - public class PlayableControllerTest : UniFlowTestBase - { - - [UnityTest] - public IEnumerator PlayableController() - { - yield return - RunAssert( - "PlayableController", - AssertPlayableController, - null, - 1.1 - ); - } - - private void AssertPlayableController(Messages messages) - { - Assert.AreEqual(2, messages.Count); - - { - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender.PlayableDirector); - } - - { - Assert.True(messages[1].Is()); - var message = messages[1].As(); - Assert.IsInstanceOf(message.Sender); - var timelineEvent = message.Data; - Assert.True(timelineEvent != default); - Assert.AreEqual("PlayableControllerTest", timelineEvent.stringParameter); - } - - HasAssert = true; - } - } -} \ No newline at end of file +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using UniFlow.Connector.Controller; +using UniFlow.Connector.Event; +using UnityEngine.Playables; +using UnityEngine.TestTools; + +namespace UniFlow.Tests.Runtime +{ + public class PlayableControllerTest : UniFlowTestBase + { + + [UnityTest] + public IEnumerator PlayableController() + { + yield return + RunAssert( + "PlayableController", + AssertPlayableController, + null, + 1.1 + ); + } + + private void AssertPlayableController(IEnumerable sentConnectors) + { + var connectors = sentConnectors.ToList(); + Assert.AreEqual(2, connectors.Count); + + { + var connector = connectors[0] as PlayableController; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.PlayableDirector); + } + + { + var connector = connectors[1] as TimelineSignal; + Assert.NotNull(connector); + } + + HasAssert = true; + } + } +} diff --git a/Assets/Tests/Runtime/Scripts/TestReceiver.cs b/Assets/Tests/Runtime/Scripts/TestReceiver.cs index 852b2f0..8335956 100644 --- a/Assets/Tests/Runtime/Scripts/TestReceiver.cs +++ b/Assets/Tests/Runtime/Scripts/TestReceiver.cs @@ -1,14 +1,22 @@ -namespace UniFlow.Tests.Runtime -{ - public class TestReceiver : ReceiverBase - { - public Messages SentMessages { get; private set; } - public int ReceiveCount { get; private set; } - - public override void OnReceive(Messages messages) - { - SentMessages = messages; - ReceiveCount++; - } - } -} \ No newline at end of file +using System.Collections.Generic; +using UniRx; + +namespace UniFlow.Tests.Runtime +{ + public class TestReceiver : ReceiverBase + { + public IList SentConnectors { get; private set; } = new List(); + public int ReceiveCount { get; private set; } + + protected override void Awake() + { + Logger.Activate(); + Logger.OnMessageAsObservable().Subscribe(SentConnectors.Add); + } + + public override void OnReceive() + { + ReceiveCount++; + } + } +} diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 7f3f602..61cfa7d 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -1,4 +1,6 @@ using System.Collections; +using System.Collections.Generic; +using System.Linq; using NUnit.Framework; using UniFlow.Connector.Event; using UnityEngine.TestTools; @@ -19,17 +21,14 @@ public IEnumerator TimelineSignal() ); } - private void AssertTimelineSignal(Messages messages) + private void AssertTimelineSignal(IEnumerable sentConnectors) { - Assert.AreEqual(1, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.AreEqual(1, connectors.Count); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender); - var timelineEvent = message.Data; - Assert.NotNull(timelineEvent); - Assert.AreEqual("TimelineSignalTest", timelineEvent.stringParameter); + var connector = connectors[0] as TimelineSignal; + Assert.NotNull(connector); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/TimerTest.cs b/Assets/Tests/Runtime/Scripts/TimerTest.cs index c8cd491..c997899 100644 --- a/Assets/Tests/Runtime/Scripts/TimerTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimerTest.cs @@ -1,4 +1,6 @@ using System.Collections; +using System.Collections.Generic; +using System.Linq; using NUnit.Framework; using UniFlow.Connector.Logic; using UnityEngine.TestTools; @@ -19,18 +21,17 @@ public IEnumerator Timer() ); } - private void AssertTimer(Messages messages) + private void AssertTimer(IEnumerable sentConnectors) { - Assert.AreEqual(1, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.AreEqual(1, connectors.Count); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.AreEqual(ConnectorType.Timer, message.ConnectorType); - Assert.IsInstanceOf(message.Sender); - Assert.IsInstanceOf(message.Sender.Seconds); - Assert.AreEqual(1.0f, message.Sender.Seconds); + var connector = connectors[0] as Timer; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.Seconds); + Assert.AreEqual(1.0f, connector.Seconds); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs index 930d879..2723b9f 100644 --- a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs @@ -1,4 +1,6 @@ using System.Collections; +using System.Collections.Generic; +using System.Linq; using NUnit.Framework; using UniFlow.Connector.Event; using UniRx.Triggers; @@ -25,15 +27,15 @@ public IEnumerator UIBehaviourEventTrigger() ); } - private void AssertUIBehaviourEventTrigger(Messages messages) + private void AssertUIBehaviourEventTrigger(IEnumerable sentConnectors) { - Assert.AreEqual(1, messages.Count); + var connectors = sentConnectors.ToList(); + Assert.AreEqual(1, connectors.Count); - Assert.True(messages[0].Is()); - var message = messages[0].As(); - Assert.IsInstanceOf(message.Sender.UIBehaviour); - Assert.IsInstanceOf(message.Data); + var connector = connectors[0] as UIBehaviourEventTrigger; + Assert.NotNull(connector); + Assert.IsInstanceOf(connector.UIBehaviour); HasAssert = true; } } -} \ No newline at end of file +} diff --git a/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs index 59fbb94..9336f57 100644 --- a/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs +++ b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Collections.Generic; using NUnit.Framework; using UniRx; using UnityEngine.SceneManagement; @@ -19,7 +20,7 @@ public void SetUp() HasAssert = false; } - protected IEnumerator RunAssert(string sceneName, Action assertCallback, Action beforeAssertCallback, double waitBeforeAssert = 0, int invokeCount = 1) + protected IEnumerator RunAssert(string sceneName, Action> assertCallback, Action beforeAssertCallback, double waitBeforeAssert = 0, int invokeCount = 1) { PreInstall(); yield return SceneManager.LoadSceneAsync($"{ScenePath}{sceneName}", LoadSceneMode.Additive); @@ -31,7 +32,7 @@ protected IEnumerator RunAssert(string sceneName, Action assertCallbac { yield return Observable.Timer(TimeSpan.FromSeconds(waitBeforeAssert)).StartAsCoroutine(); } - assertCallback(Object.FindObjectOfType().SentMessages); + assertCallback(Object.FindObjectOfType().SentConnectors); } Assert.GreaterOrEqual(Object.FindObjectOfType().ReceiveCount, invokeCount); Assert.True(HasAssert); @@ -41,4 +42,4 @@ protected IEnumerator RunAssert(string sceneName, Action assertCallbac PostInstall(); } } -} \ No newline at end of file +} From 329c5f061d3b79bc6349abc1e12c3260ed43321c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 14:05:57 +0900 Subject: [PATCH 188/453] :fire: Omit Message --- .../Controller/ActivationController.cs | 171 +++++-------- .../Connector/Controller/AnimatorTrigger.cs | 23 +- .../Connector/Controller/AudioController.cs | 189 +++++++------- .../Connector/Controller/DestroyInstance.cs | 26 +- .../Connector/Controller/InstantiateObject.cs | 14 +- .../Scripts/Connector/Controller/LoadScene.cs | 15 +- .../Connector/Controller/LoadSceneBase.cs | 8 +- .../Connector/Controller/LoadSceneEnumBase.cs | 15 +- .../Controller/MoveParentTransform.cs | 24 +- .../Controller/PlayableController.cs | 23 +- .../Controller/RaycastTargetController.cs | 27 +- .../Controller/RaycasterController.cs | 29 +-- .../Controller/SimpleAnimationController.cs | 29 +-- .../Controller/TimeScaleController.cs | 14 +- .../Connector/Controller/UnloadScene.cs | 15 +- .../Connector/Controller/UnloadSceneBase.cs | 8 +- .../Controller/UnloadSceneEnumBase.cs | 15 +- .../Scripts/Connector/Event/AnimationEvent.cs | 14 +- Assets/Scripts/Connector/Event/AudioEvent.cs | 234 +++++++++--------- Assets/Scripts/Connector/Event/CameraEvent.cs | 109 ++++---- Assets/Scripts/Connector/Event/KeyEvent.cs | 114 ++++----- .../Scripts/Connector/Event/LifecycleEvent.cs | 15 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 147 ++++++----- .../Scripts/Connector/Event/ParticleEvent.cs | 14 +- .../Event/PhysicsCollision2DEvent.cs | 114 ++++----- .../Connector/Event/PhysicsCollisionEvent.cs | 18 +- .../Connector/Event/PhysicsTrigger2DEvent.cs | 14 +- .../Connector/Event/PhysicsTriggerEvent.cs | 116 ++++----- .../Connector/Event/RectTransformEvent.cs | 115 ++++----- .../Connector/Event/SimpleAnimationEvent.cs | 222 ++++++++--------- .../Scripts/Connector/Event/TimelineEvent.cs | 15 +- .../Scripts/Connector/Event/TimelineSignal.cs | 12 +- .../Scripts/Connector/Event/TransformEvent.cs | 115 ++++----- .../Event/UIBehaviourEventTrigger.cs | 14 +- Assets/Scripts/Connector/Logic/Empty.cs | 12 +- Assets/Scripts/Connector/Logic/Interval.cs | 72 +++--- Assets/Scripts/Connector/Logic/Timer.cs | 14 +- Assets/Scripts/Connector/Misc/Receive.cs | 21 +- Assets/Scripts/Connector/Misc/Toss.cs | 16 +- .../Scripts/Connector/ValueComparer/Base.cs | 14 +- .../Scripts/Connector/ValueComparer/Enum.cs | 8 +- .../Scripts/Connector/ValueComparer/Float.cs | 14 +- Assets/Scripts/Connector/ValueComparer/Int.cs | 12 +- .../Scripts/Connector/ValueComparer/Object.cs | 6 +- .../Scripts/Connector/ValueComparer/String.cs | 6 +- .../Scripts/Connector/ValueProvider/Base.cs | 19 +- Assets/Scripts/ConnectorBase.cs | 28 +-- Assets/Scripts/IConnector.cs | 6 +- Assets/Scripts/IObservableReceiver.cs | 5 +- Assets/Scripts/IReceiver.cs | 4 +- Assets/Scripts/MessageBase.cs | 30 --- Assets/Scripts/MessageBase.cs.meta | 3 - Assets/Scripts/Messages.cs | 30 --- Assets/Scripts/Messages.cs.meta | 3 - Assets/Scripts/Receiver/Empty.cs | 4 +- Assets/Scripts/Receiver/Log.cs | 64 ++--- .../Receiver/ObservableReceiverBase.cs | 40 +-- Assets/Scripts/ReceiverBase.cs | 18 +- 58 files changed, 976 insertions(+), 1520 deletions(-) delete mode 100644 Assets/Scripts/MessageBase.cs delete mode 100644 Assets/Scripts/MessageBase.cs.meta delete mode 100644 Assets/Scripts/Messages.cs delete mode 100644 Assets/Scripts/Messages.cs.meta diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 81d7893..4ba4df9 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -1,105 +1,66 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/ActivationController", (int) ConnectorType.LoadScene)] - public class ActivationController : ConnectorBase - { - [SerializeField] private List targetGameObjects = default; - [SerializeField] private List targetMonoBehaviours = default; - [SerializeField] private bool controlSelfInstance = default; - [SerializeField] private bool activated = default; - - [UsedImplicitly] public IEnumerable GameObjects - { - get => targetGameObjects; - set => targetGameObjects = value.ToList(); - } - [UsedImplicitly] public IEnumerable MonoBehaviours - { - get => targetMonoBehaviours; - set => targetMonoBehaviours = value.ToList(); - } - [UsedImplicitly] public bool ControlSelfInstance - { - get => controlSelfInstance; - set => controlSelfInstance = value; - } - [UsedImplicitly] public bool Activated - { - get => activated; - set => activated = value; - } - - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - var count = 0; - var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); - count += gameObjects.Count; - gameObjects.ForEach(x => x.SetActive(Activated)); - var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); - count += monoBehaviours.Count; - monoBehaviours.ForEach(x => x.enabled = Activated); - // ReSharper disable once InvertIf - if (ControlSelfInstance) - { - if (gameObject.activeSelf != Activated) - { - count++; - gameObject.SetActive(Activated); - } - var components = GetComponents().Where(x => x.enabled != Activated).ToList(); - count += components.Count; - components.ForEach(x => x.enabled = Activated); - } - - return Observable.Return(Message.Create(this, count, gameObjects, monoBehaviours)); -// return Observable -// .Create( -// observer => -// { -// var count = 0; -// var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); -// count += gameObjects.Count; -// gameObjects.ForEach(x => x.SetActive(Activated)); -// var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); -// count += monoBehaviours.Count; -// monoBehaviours.ForEach(x => x.enabled = Activated); -// if (ControlSelfInstance) -// { -// if (gameObject.activeSelf != Activated) -// { -// count++; -// gameObject.SetActive(Activated); -// } -// var components = GetComponents().Where(x => x.enabled != Activated).ToList(); -// count += components.Count; -// components.ForEach(x => x.enabled = Activated); -// } -// observer.OnNext(Message.Create(this, count, gameObjects, monoBehaviours)); -// return Disposable; -// } -// ); - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase gameObjects, IEnumerable monoBehaviours)> - { - public static Message Create(ActivationController sender, int count, IEnumerable gameObjects, IEnumerable monoBehaviours) - { - return Create(ConnectorType.ActivationController, sender, (count, gameObjects, monoBehaviours)); - } - } - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/ActivationController", (int) ConnectorType.LoadScene)] + public class ActivationController : ConnectorBase + { + [SerializeField] private List targetGameObjects = default; + [SerializeField] private List targetMonoBehaviours = default; + [SerializeField] private bool controlSelfInstance = default; + [SerializeField] private bool activated = default; + + [UsedImplicitly] public IEnumerable GameObjects + { + get => targetGameObjects; + set => targetGameObjects = value.ToList(); + } + [UsedImplicitly] public IEnumerable MonoBehaviours + { + get => targetMonoBehaviours; + set => targetMonoBehaviours = value.ToList(); + } + [UsedImplicitly] public bool ControlSelfInstance + { + get => controlSelfInstance; + set => controlSelfInstance = value; + } + [UsedImplicitly] public bool Activated + { + get => activated; + set => activated = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); + gameObjects.ForEach(x => x.SetActive(Activated)); + var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); + monoBehaviours.ForEach(x => x.enabled = Activated); + // ReSharper disable once InvertIf + if (ControlSelfInstance) + { + if (gameObject.activeSelf != Activated) + { + gameObject.SetActive(Activated); + } + var components = GetComponents().Where(x => x.enabled != Activated).ToList(); + components.ForEach(x => x.enabled = Activated); + } + + return Observable.ReturnUnit(); + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + } +} diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 59d054f..4d162cc 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -28,32 +28,15 @@ [UsedImplicitly] public string TriggerName private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { Animator.SetTrigger(TriggerId); - return Observable.Return(Message.Create(this)); -// return Observable -// .Create( -// observer => -// { -// Animator.SetTrigger(TriggerId); -// observer.OnNext(Message.Create(this)); -// return Disposable; -// } -// ); + return Observable.ReturnUnit(); } private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(AnimatorTrigger sender) - { - return Create(ConnectorType.AnimatorTrigger, sender); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 7547e3a..7c033e0 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -1,103 +1,86 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] - public class AudioController : ConnectorBase - { - [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; - [SerializeField] - [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] - private AudioClip audioClip = default; - [SerializeField] private AudioSource audioSource = default; - - [UsedImplicitly] public AudioControlMethod AudioControlMethod - { - get => audioControlMethod; - set => audioControlMethod = value; - } - [UsedImplicitly] public AudioClip AudioClip - { - get => audioClip; - set => audioClip = value; - } - [UsedImplicitly] public AudioSource AudioSource - { - get => - audioSource != default - ? audioSource - : audioSource = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); - set => audioSource = value; - } - - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - InvokeAudioSourceMethod(); - return Observable.Return(Message.Create(this)); -// return Observable -// .Create( -// observer => -// { -// InvokeAudioSourceMethod(); -// observer.OnNext(Message.Create(this)); -// return Disposable; -// } -// ); - } - - private void InvokeAudioSourceMethod() - { - if (AudioClip != default) - { - AudioSource.clip = AudioClip; - } - - switch (AudioControlMethod) - { - case AudioControlMethod.Play: - AudioSource.Play(); - break; - case AudioControlMethod.Stop: - AudioSource.Stop(); - break; - case AudioControlMethod.Pause: - AudioSource.Pause(); - break; - case AudioControlMethod.UnPause: - AudioSource.UnPause(); - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase - { - public static Message Create(AudioController sender) - { - return Create(ConnectorType.AudioController, sender); - } - } - } - - public enum AudioControlMethod - { - Play, - Stop, - Pause, - UnPause, - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] + public class AudioController : ConnectorBase + { + [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; + [SerializeField] private AudioSource audioSource = default; + + [UsedImplicitly] public AudioControlMethod AudioControlMethod + { + get => audioControlMethod; + set => audioControlMethod = value; + } + [UsedImplicitly] public AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } + [UsedImplicitly] public AudioSource AudioSource + { + get => + audioSource != default + ? audioSource + : audioSource = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + set => audioSource = value; + } + + private IDisposable Disposable { get; } = new CompositeDisposable(); + + public override IObservable OnConnectAsObservable() + { + InvokeAudioSourceMethod(); + return Observable.ReturnUnit(); + } + + private void InvokeAudioSourceMethod() + { + if (AudioClip != default) + { + AudioSource.clip = AudioClip; + } + + switch (AudioControlMethod) + { + case AudioControlMethod.Play: + AudioSource.Play(); + break; + case AudioControlMethod.Stop: + AudioSource.Stop(); + break; + case AudioControlMethod.Pause: + AudioSource.Pause(); + break; + case AudioControlMethod.UnPause: + AudioSource.UnPause(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void OnDestroy() + { + Disposable.Dispose(); + } + } + + public enum AudioControlMethod + { + Play, + Stop, + Pause, + UnPause, + } +} diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs index 2baafae..31d795e 100644 --- a/Assets/Scripts/Connector/Controller/DestroyInstance.cs +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -27,36 +27,16 @@ [UsedImplicitly] public IEnumerable GameObjects private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { var targets = Components.Concat(GameObjects).ToList(); - var count = targets.Count; targets.ToList().ForEach(Destroy); - return Observable.Return(Message.Create(this, count)); -// return Observable -// .Create( -// observer => -// { -// var targets = Components.Concat(GameObjects).ToList(); -// var count = targets.Count; -// targets.ToList().ForEach(Destroy); -// observer.OnNext(Message.Create(this, count)); -// return Disposable; -// } -// ); + return Observable.ReturnUnit(); } private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(DestroyInstance sender, int count) - { - return Create(ConnectorType.DestroyInstance, sender, count); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateObject.cs index bb25f03..9b9be2e 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateObject.cs @@ -37,28 +37,18 @@ [UsedImplicitly] public Transform Parent set => parent = value; } - private ISubject ObjectSubject { get; } = new Subject(); private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { var go = Instantiate(Source, Parent); PublishInstantiatedGameObject.Invoke(go as GameObject); - ObjectSubject.OnNext(go); - return Observable.Return(Message.Create(this, go)); + return Observable.ReturnUnit(); } private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(InstantiateObject connectable, Object obj) - { - return Create(ConnectorType.InstantiateObject, connectable, obj); - } - } } } diff --git a/Assets/Scripts/Connector/Controller/LoadScene.cs b/Assets/Scripts/Connector/Controller/LoadScene.cs index 96a76b0..aaf092f 100644 --- a/Assets/Scripts/Connector/Controller/LoadScene.cs +++ b/Assets/Scripts/Connector/Controller/LoadScene.cs @@ -15,18 +15,5 @@ [UsedImplicitly] public override IEnumerable SceneNames get => sceneNames; set => sceneNames = value.ToList(); } - - protected override IMessage CreateMessage() - { - return Message.Create(this); - } - - public class Message : MessageBase - { - public static Message Create(LoadScene sender) - { - return Create(ConnectorType.LoadScene, sender); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs index 13292f4..2b1b2ce 100644 --- a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs @@ -12,15 +12,13 @@ public abstract class LoadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return LoadScenes() .ToObservable() - .Select(_ => CreateMessage()); + .AsUnitObservable(); } - protected abstract IMessage CreateMessage(); - private async UniTask LoadScenes() { foreach (var sceneName in SceneNames) @@ -29,4 +27,4 @@ private async UniTask LoadScenes() } } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs index 8439c8d..89442dc 100644 --- a/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs +++ b/Assets/Scripts/Connector/Controller/LoadSceneEnumBase.cs @@ -27,18 +27,5 @@ [UsedImplicitly] public override IEnumerable SceneNames ) .ToList(); } - - protected override IMessage CreateMessage() - { - return Message.Create(this); - } - - public class Message : MessageBase> - { - public static Message Create(LoadSceneEnumBase sender) - { - return Create(ConnectorType.LoadScene_Enum, sender); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index d2761ef..4e06c8f 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -3,7 +3,6 @@ using UniFlow.Attribute; using UniRx; using UnityEngine; -using Object = UnityEngine.Object; namespace UniFlow.Connector.Controller { @@ -39,34 +38,15 @@ [UsedImplicitly] public bool WorldPositionStays private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { TargetTransform.SetParent(ParentTransform, WorldPositionStays); - return Observable.Return(Message.Create(this, TargetTransform)); - } - - public void ReceiveTargetTransform(Object target) - { - TargetTransform = target as Transform; - } - - - public void ReceiveParentTransform(Object parent) - { - ParentTransform = parent as Transform; + return Observable.ReturnUnit(); } private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(MoveParentTransform sender, Transform movedTransform) - { - return Create(ConnectorType.MoveParentTransform, sender, movedTransform); - } - } } } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 3bdf8a8..c67f438 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -39,19 +39,10 @@ [UsedImplicitly] public PlayableDirector PlayableDirector private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { InvokePlayableDirectorMethod(); - return Observable.Return(Message.Create(this)); -// return Observable -// .Create( -// observer => -// { -// InvokePlayableDirectorMethod(); -// observer.OnNext(Message.Create(this)); -// return Disposable; -// } -// ); + return Observable.ReturnUnit(); } private void InvokePlayableDirectorMethod() @@ -84,14 +75,6 @@ private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(PlayableController sender) - { - return Create(ConnectorType.PlayableController, sender); - } - } } public enum PlayableControlMethod @@ -101,4 +84,4 @@ public enum PlayableControlMethod Pause, Resume, } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 052d42f..27c2d51 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -39,22 +39,13 @@ [UsedImplicitly] public IEnumerable Collider2Ds private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - var count = HandleActivation(); - return Observable.Return(Message.Create(this, count)); -// return Observable -// .Create( -// observer => -// { -// var count = HandleActivation(); -// observer.OnNext(Message.Create(this, count)); -// return Disposable; -// } -// ); + HandleActivation(); + return Observable.ReturnUnit(); } - private int HandleActivation() + private void HandleActivation() { var handleTargets = new Action[0] .Concat( @@ -88,23 +79,13 @@ private int HandleActivation() .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) ) .ToList(); - var count = handleTargets.Count; handleTargets.ForEach(x => x.Invoke()); - return count; } private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(RaycastTargetController sender, int count) - { - return Create(ConnectorType.RaycastTargetController, sender, count); - } - } } [PublicAPI] diff --git a/Assets/Scripts/Connector/Controller/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs index d5ae5fc..c23c7ed 100644 --- a/Assets/Scripts/Connector/Controller/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -25,37 +25,16 @@ [UsedImplicitly] private IEnumerable Raycasters set => raycasters = value.ToList(); } - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - var count = HandleActivation(); - return Observable.Return(Message.Create(this, count)); -// return Observable -// .Create( -// observer => -// { -// var count = HandleActivation(); -// observer.OnNext(Message.Create(this, count)); -// return Disposable; -// } -// ); + HandleActivation(); + return Observable.ReturnUnit(); } - private int HandleActivation() + private void HandleActivation() { var targets = Raycasters.Where(x => x.enabled != (RaycasterControlMethod == RaycasterControlMethod.Activate)).ToList(); - var count = targets.Count; targets.ForEach(x => x.enabled = RaycasterControlMethod == RaycasterControlMethod.Activate); - return count; - } - - public class Message : MessageBase - { - public static Message Create(RaycasterController sender, int count) - { - return Create(ConnectorType.RaycasterController, sender, count); - } } } diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 687ec17..3b44bab 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -1,11 +1,9 @@ using System; -using System.Diagnostics.CodeAnalysis; using System.Linq; using JetBrains.Annotations; using UniFlow.Attribute; using UniRx; using UnityEngine; -using Object = UnityEngine.Object; namespace UniFlow.Connector.Controller { @@ -66,9 +64,7 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation } private GameObject baseGameObject; - [UsedImplicitly] - [ValueReceiver] - public GameObject BaseGameObject + [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; @@ -76,22 +72,17 @@ public GameObject BaseGameObject private IDisposable Disposable { get; } = new CompositeDisposable(); - [SuppressMessage("ReSharper", "SuspiciousTypeConversion.Global")] - [SuppressMessage("ReSharper", "ConvertIfStatementToSwitchStatement")] - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { InvokeSimpleAnimationMethod(); - return Observable.Return(Message.Create(this)); + return Observable.ReturnUnit(); } - [ValueReceiver] - public GameObject Piyo { get; set; } + [ValueReceiver] public GameObject Piyo { get; set; } - [ValueReceiver] - public Vector2 Hoge { get; set; } + [ValueReceiver] public Vector2 Hoge { get; set; } - [ValueReceiver] - public int Fuga { get; set; } + [ValueReceiver] public int Fuga { get; set; } protected override void Awake() { @@ -142,14 +133,6 @@ private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(SimpleAnimationController sender) - { - return Create(ConnectorType.SimpleAnimationController, sender); - } - } } public enum SimpleAnimationControlMethod diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 99f7d50..4f1e094 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -30,10 +30,10 @@ [UsedImplicitly] private ObservableTween.EaseType EaseType private ISubject OnCompleteTweenSubject { get; } = new Subject(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { ChangeTimeScale(); - return OnCompleteTweenSubject.Select(_ => Message.Create(this)); + return OnCompleteTweenSubject; } private void ChangeTimeScale() @@ -57,13 +57,5 @@ private void ChangeTimeScale() ) .Subscribe(x => Time.timeScale = x); } - - public class Message : MessageBase - { - public static Message Create(TimeScaleController sender) - { - return Create(ConnectorType.TimeScaleController, sender); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/UnloadScene.cs b/Assets/Scripts/Connector/Controller/UnloadScene.cs index 2e28714..f7860b8 100644 --- a/Assets/Scripts/Connector/Controller/UnloadScene.cs +++ b/Assets/Scripts/Connector/Controller/UnloadScene.cs @@ -15,18 +15,5 @@ [UsedImplicitly] public override IEnumerable SceneNames get => sceneNames; set => sceneNames = value.ToList(); } - - protected override IMessage CreateMessage() - { - return Message.Create(this); - } - - public class Message : MessageBase - { - public static Message Create(UnloadScene sender) - { - return Create(ConnectorType.UnloadScene, sender); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs index fba6911..93cc8a0 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs @@ -12,15 +12,13 @@ public abstract class UnloadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return UnloadScenes() .ToObservable() - .Select(_ => CreateMessage()); + .AsUnitObservable(); } - protected abstract IMessage CreateMessage(); - private async UniTask UnloadScenes() { foreach (var sceneName in SceneNames) @@ -29,4 +27,4 @@ private async UniTask UnloadScenes() } } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs index 385397e..54b5976 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneEnumBase.cs @@ -27,18 +27,5 @@ [UsedImplicitly] public override IEnumerable SceneNames ) .ToList(); } - - protected override IMessage CreateMessage() - { - return Message.Create(this); - } - - public class Message : MessageBase> - { - public static Message Create(UnloadSceneEnumBase sender) - { - return Create(ConnectorType.UnloadScene_Enum, sender); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index cf977bc..44139a6 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -58,7 +58,7 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { if (AnimationClip != default && GetComponent() == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) { @@ -68,7 +68,7 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa return Subject // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) - .Select(x => Message.Create(this, x)); + .AsUnitObservable(); } /// @@ -93,13 +93,5 @@ protected override void Awake() Animator.updateMode = UpdateMode; } } - - public class Message : MessageBase - { - public static Message Create(AnimationEvent sender, UnityEngine.AnimationEvent data) - { - return Create(ConnectorType.AnimationEvent, sender, data); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 6c0d7a0..6349143 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -1,121 +1,113 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] - public class AudioEvent : ConnectorBase - { - [SerializeField] private AudioEventType audioEventType = AudioEventType.Play; - [SerializeField] - [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] - private AudioClip audioClip = default; - [SerializeField] private AudioSource audioSource = default; - - [UsedImplicitly] public AudioEventType AudioEventType - { - get => audioEventType; - set => audioEventType = value; - } - [UsedImplicitly] public AudioClip AudioClip - { - get => audioClip; - set => audioClip = value; - } - [UsedImplicitly] public AudioSource AudioSource - { - get => - audioSource != default - ? audioSource - : audioSource = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); - set => audioSource = value; - } - - private IReadOnlyReactiveProperty> TimePair { get; set; } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return OnAudioEventAsObservable() - .Select(x => Message.Create(this)); - } - - private IObservable OnAudioEventAsObservable() - { - TimePair = AudioSource - .ObserveEveryValueChanged(x => x.time) - .Pairwise() - .ToReactiveProperty(); - switch (AudioEventType) - { - case AudioEventType.Play: - case AudioEventType.Stop: - case AudioEventType.Pause: - case AudioEventType.UnPause: - return AudioSource - .ObserveEveryValueChanged(x => x.isPlaying) - .Where(_ => AudioClip == default || AudioClip == AudioSource.clip) - .Select(x => DetectAudioEventType(x, AudioSource.clip)) - .Where(x => AudioEventType == x); - case AudioEventType.Loop: - return TimePair - .Where(_ => AudioClip == default || AudioClip == AudioSource.clip) - .Where(xs => AudioSource.isPlaying && xs.Current < xs.Previous && xs.Previous > 0.0f) - .Select(_ => AudioEventType.Loop); - default: - throw new ArgumentOutOfRangeException(); - } - } - - private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) - { - if (clip == default) - { - throw new ArgumentOutOfRangeException(); - } - - if (isPlaying && Mathf.Approximately(0.0f, TimePair.Value.Previous) && TimePair.Value.Current > 0.0f) - { - return AudioEventType.Play; - } - - if (!isPlaying && (Mathf.Approximately(clip.length, TimePair.Value.Current) || Mathf.Approximately(0.0f, TimePair.Value.Current) && TimePair.Value.Previous > 0.0f)) - { - return AudioEventType.Stop; - } - - if (!isPlaying && TimePair.Value.Current > 0.0f && TimePair.Value.Current > TimePair.Value.Previous) - { - return AudioEventType.Pause; - } - - if (isPlaying && TimePair.Value.Current > 0.0f && TimePair.Value.Current > TimePair.Value.Previous) - { - return AudioEventType.UnPause; - } - - return (AudioEventType) -1; - } - - public class Message : MessageBase - { - public static Message Create(AudioEvent sender) - { - return Create(ConnectorType.AudioEvent, sender); - } - } - } - - public enum AudioEventType - { - Play, - Stop, - Pause, - UnPause, // Follow method name in AudioClip - Loop, - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] + public class AudioEvent : ConnectorBase + { + [SerializeField] private AudioEventType audioEventType = AudioEventType.Play; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; + [SerializeField] private AudioSource audioSource = default; + + [UsedImplicitly] public AudioEventType AudioEventType + { + get => audioEventType; + set => audioEventType = value; + } + [UsedImplicitly] public AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } + [UsedImplicitly] public AudioSource AudioSource + { + get => + audioSource != default + ? audioSource + : audioSource = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + set => audioSource = value; + } + + private IReadOnlyReactiveProperty> TimePair { get; set; } + + public override IObservable OnConnectAsObservable() + { + return OnAudioEventAsObservable() + .AsUnitObservable(); + } + + private IObservable OnAudioEventAsObservable() + { + TimePair = AudioSource + .ObserveEveryValueChanged(x => x.time) + .Pairwise() + .ToReactiveProperty(); + switch (AudioEventType) + { + case AudioEventType.Play: + case AudioEventType.Stop: + case AudioEventType.Pause: + case AudioEventType.UnPause: + return AudioSource + .ObserveEveryValueChanged(x => x.isPlaying) + .Where(_ => AudioClip == default || AudioClip == AudioSource.clip) + .Select(x => DetectAudioEventType(x, AudioSource.clip)) + .Where(x => AudioEventType == x); + case AudioEventType.Loop: + return TimePair + .Where(_ => AudioClip == default || AudioClip == AudioSource.clip) + .Where(xs => AudioSource.isPlaying && xs.Current < xs.Previous && xs.Previous > 0.0f) + .Select(_ => AudioEventType.Loop); + default: + throw new ArgumentOutOfRangeException(); + } + } + + private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) + { + if (clip == default) + { + throw new ArgumentOutOfRangeException(); + } + + if (isPlaying && Mathf.Approximately(0.0f, TimePair.Value.Previous) && TimePair.Value.Current > 0.0f) + { + return AudioEventType.Play; + } + + if (!isPlaying && (Mathf.Approximately(clip.length, TimePair.Value.Current) || Mathf.Approximately(0.0f, TimePair.Value.Current) && TimePair.Value.Previous > 0.0f)) + { + return AudioEventType.Stop; + } + + if (!isPlaying && TimePair.Value.Current > 0.0f && TimePair.Value.Current > TimePair.Value.Previous) + { + return AudioEventType.Pause; + } + + if (isPlaying && TimePair.Value.Current > 0.0f && TimePair.Value.Current > TimePair.Value.Previous) + { + return AudioEventType.UnPause; + } + + return (AudioEventType) -1; + } + } + + public enum AudioEventType + { + Play, + Stop, + Pause, + UnPause, // Follow method name in AudioClip + Loop, + } +} diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 4afa826..2f77372 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -1,59 +1,50 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/CameraEvent", (int) ConnectorType.CameraEvent)] - public class CameraEvent : ConnectorBase - { - [SerializeField] private CameraEventType cameraEventType = CameraEventType.BecomeVisible; - [SerializeField] private Component component = default; - - [UsedImplicitly] public CameraEventType CameraEventType - { - get => cameraEventType; - set => cameraEventType = value; - } - [UsedImplicitly] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return OnEventAsObservable() - .Select(_ => Message.Create(this)); - } - - private IObservable OnEventAsObservable() - { - switch (CameraEventType) - { - case CameraEventType.BecomeVisible: - return Component.OnBecameVisibleAsObservable(); - case CameraEventType.BecomeInvisible: - return Component.OnBecameInvisibleAsObservable(); - default: - throw new ArgumentOutOfRangeException(); - } - } - - public class Message : MessageBase - { - public static Message Create(CameraEvent sender) - { - return Create(ConnectorType.CameraEvent, sender); - } - } - } - - public enum CameraEventType - { - BecomeVisible, - BecomeInvisible, - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/CameraEvent", (int) ConnectorType.CameraEvent)] + public class CameraEvent : ConnectorBase + { + [SerializeField] private CameraEventType cameraEventType = CameraEventType.BecomeVisible; + [SerializeField] private Component component = default; + + [UsedImplicitly] public CameraEventType CameraEventType + { + get => cameraEventType; + set => cameraEventType = value; + } + [UsedImplicitly] public Component Component + { + get => component ? component : component = this; + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable(); + } + + private IObservable OnEventAsObservable() + { + switch (CameraEventType) + { + case CameraEventType.BecomeVisible: + return Component.OnBecameVisibleAsObservable(); + case CameraEventType.BecomeInvisible: + return Component.OnBecameInvisibleAsObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum CameraEventType + { + BecomeVisible, + BecomeInvisible, + } +} diff --git a/Assets/Scripts/Connector/Event/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs index 0fe82bb..4719e87 100644 --- a/Assets/Scripts/Connector/Event/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -1,61 +1,53 @@ -using System; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/KeyEvent", (int) ConnectorType.KeyEvent)] - public class KeyEvent : ConnectorBase - { - [SerializeField] private KeyEventType keyEventType = KeyEventType.Down; - [SerializeField] private KeyCode keyCode = default; - - private KeyEventType KeyEventType => keyEventType; - private KeyCode KeyCode => keyCode; - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return KeyEventAsObservable().Select(_ => Message.Create(this)); - } - - private IObservable KeyEventAsObservable() - { - switch (KeyEventType) - { - case KeyEventType.Down: - return this - .UpdateAsObservable() - .Where(_ => Input.GetKeyDown(KeyCode)) - .AsUnitObservable(); - case KeyEventType.Press: - return this - .UpdateAsObservable() - .Where(_ => Input.GetKey(KeyCode)) - .AsUnitObservable(); - case KeyEventType.Up: - return this - .UpdateAsObservable() - .Where(_ => Input.GetKeyUp(KeyCode)) - .AsUnitObservable(); - default: - throw new ArgumentOutOfRangeException(); - } - } - - public class Message : MessageBase - { - public static Message Create(KeyEvent sender) - { - return Create(ConnectorType.KeyEvent, sender); - } - } - } - - public enum KeyEventType - { - Down, - Press, - Up, - } -} \ No newline at end of file +using System; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/KeyEvent", (int) ConnectorType.KeyEvent)] + public class KeyEvent : ConnectorBase + { + [SerializeField] private KeyEventType keyEventType = KeyEventType.Down; + [SerializeField] private KeyCode keyCode = default; + + private KeyEventType KeyEventType => keyEventType; + private KeyCode KeyCode => keyCode; + + public override IObservable OnConnectAsObservable() + { + return KeyEventAsObservable(); + } + + private IObservable KeyEventAsObservable() + { + switch (KeyEventType) + { + case KeyEventType.Down: + return this + .UpdateAsObservable() + .Where(_ => Input.GetKeyDown(KeyCode)) + .AsUnitObservable(); + case KeyEventType.Press: + return this + .UpdateAsObservable() + .Where(_ => Input.GetKey(KeyCode)) + .AsUnitObservable(); + case KeyEventType.Up: + return this + .UpdateAsObservable() + .Where(_ => Input.GetKeyUp(KeyCode)) + .AsUnitObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum KeyEventType + { + Down, + Press, + Up, + } +} diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index 190ab23..69cfef8 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -26,10 +26,9 @@ [UsedImplicitly] public Component Component private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - return OnEventAsObservable() - .Select(_ => Message.Create(this)); + return OnEventAsObservable(); } protected override void Awake() @@ -76,14 +75,6 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } - - public class Message : MessageBase - { - public static Message Create(LifecycleEvent sender) - { - return Create(ConnectorType.LifecycleEvent, sender); - } - } } public enum LifecycleEventType @@ -96,4 +87,4 @@ public enum LifecycleEventType Enable, Disable, } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index d50980d..0b8e787 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -1,78 +1,69 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/MouseEvent", (int) ConnectorType.MouseEvent)] - public class MouseEvent : ConnectorBase - { - [SerializeField] private MouseEventType mouseEventType = MouseEventType.MouseDown; - [SerializeField] private Component component = default; - - [UsedImplicitly] public MouseEventType MouseEventType - { - get => mouseEventType; - set => mouseEventType = value; - } - [UsedImplicitly] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return OnEventAsObservable() - .Select(_ => Message.Create(this)); - } - - private IObservable OnEventAsObservable() - { -#if !(UNITY_IOS || UNITY_ANDROID || UNITY_METRO) - switch (MouseEventType) - { - case MouseEventType.MouseDown: - return Component.OnMouseDownAsObservable(); - case MouseEventType.MouseUp: - return Component.OnMouseUpAsObservable(); - case MouseEventType.MouseUpAsButton: - return Component.OnMouseUpAsButtonAsObservable(); - case MouseEventType.MouseEnter: - return Component.OnMouseEnterAsObservable(); - case MouseEventType.MouseExit: - return Component.OnMouseExitAsObservable(); - case MouseEventType.MouseOver: - return Component.OnMouseOverAsObservable(); - case MouseEventType.MouseDrag: - return Component.OnMouseDragAsObservable(); - default: - throw new ArgumentOutOfRangeException(); - } -#else - throw new PlatformNotSupportedException("MouseEvent does not support mobile platform"); -#endif - } - - public class Message : MessageBase - { - public static Message Create(MouseEvent sender) - { - return Create(ConnectorType.MouseEvent, sender); - } - } - } - - public enum MouseEventType - { - MouseDown, - MouseUp, - MouseUpAsButton, - MouseEnter, - MouseExit, - MouseOver, - MouseDrag, - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/MouseEvent", (int) ConnectorType.MouseEvent)] + public class MouseEvent : ConnectorBase + { + [SerializeField] private MouseEventType mouseEventType = MouseEventType.MouseDown; + [SerializeField] private Component component = default; + + [UsedImplicitly] public MouseEventType MouseEventType + { + get => mouseEventType; + set => mouseEventType = value; + } + [UsedImplicitly] public Component Component + { + get => component ? component : component = this; + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable(); + } + + private IObservable OnEventAsObservable() + { +#if !(UNITY_IOS || UNITY_ANDROID || UNITY_METRO) + switch (MouseEventType) + { + case MouseEventType.MouseDown: + return Component.OnMouseDownAsObservable(); + case MouseEventType.MouseUp: + return Component.OnMouseUpAsObservable(); + case MouseEventType.MouseUpAsButton: + return Component.OnMouseUpAsButtonAsObservable(); + case MouseEventType.MouseEnter: + return Component.OnMouseEnterAsObservable(); + case MouseEventType.MouseExit: + return Component.OnMouseExitAsObservable(); + case MouseEventType.MouseOver: + return Component.OnMouseOverAsObservable(); + case MouseEventType.MouseDrag: + return Component.OnMouseDragAsObservable(); + default: + throw new ArgumentOutOfRangeException(); + } +#else + throw new PlatformNotSupportedException("MouseEvent does not support mobile platform"); +#endif + } + } + + public enum MouseEventType + { + MouseDown, + MouseUp, + MouseUpAsButton, + MouseEnter, + MouseExit, + MouseOver, + MouseDrag, + } +} diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index 0e31f75..b0b33e8 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -23,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .Select(x => Message.Create(this)); + .AsUnitObservable(); } private IObservable OnEventAsObservable() @@ -44,14 +44,6 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } - - public class Message : MessageBase - { - public static Message Create(ParticleEvent sender) - { - return Create(ConnectorType.ParticleEvent, sender); - } - } } public enum ParticleEventType @@ -60,4 +52,4 @@ public enum ParticleEventType ParticleTrigger, // ParticleSystemStopped, } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index e69b810..17b125d 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -1,60 +1,54 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/PhysicsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] - public class PhysicsCollision2DEvent : ConnectorBase - { - [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = PhysicsCollision2DEventType.CollisionEnter2D; - [SerializeField] private Component component = default; - - [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType - { - get => physicsCollision2DEventType; - set => physicsCollision2DEventType = value; - } - [UsedImplicitly] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) => - OnEventAsObservable() - .Select(x => Message.Create(this, x)); - - private IObservable OnEventAsObservable() - { - switch (PhysicsCollision2DEventType) - { - case PhysicsCollision2DEventType.CollisionEnter2D: - return Component.OnCollisionEnter2DAsObservable(); - case PhysicsCollision2DEventType.CollisionExit2D: - return Component.OnCollisionExit2DAsObservable(); - case PhysicsCollision2DEventType.CollisionStay2D: - return Component.OnCollisionStay2DAsObservable(); - default: - throw new ArgumentOutOfRangeException(); - } - } - - public class Message : MessageBase - { - public static Message Create(PhysicsCollision2DEvent sender, Collision2D collision2D) - { - return Create(ConnectorType.PhysicsCollision2DEvent, sender, collision2D); - } - } - } - - public enum PhysicsCollision2DEventType - { - CollisionEnter2D, - CollisionExit2D, - CollisionStay2D, - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/PhysicsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] + public class PhysicsCollision2DEvent : ConnectorBase + { + [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = PhysicsCollision2DEventType.CollisionEnter2D; + [SerializeField] private Component component = default; + + [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType + { + get => physicsCollision2DEventType; + set => physicsCollision2DEventType = value; + } + [UsedImplicitly] public Component Component + { + get => component ? component : component = this; + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() + .AsUnitObservable(); + } + + private IObservable OnEventAsObservable() + { + switch (PhysicsCollision2DEventType) + { + case PhysicsCollision2DEventType.CollisionEnter2D: + return Component.OnCollisionEnter2DAsObservable(); + case PhysicsCollision2DEventType.CollisionExit2D: + return Component.OnCollisionExit2DAsObservable(); + case PhysicsCollision2DEventType.CollisionStay2D: + return Component.OnCollisionStay2DAsObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum PhysicsCollision2DEventType + { + CollisionEnter2D, + CollisionExit2D, + CollisionStay2D, + } +} diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index 79273ff..a13431d 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -23,9 +23,11 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable(IMessage latestMessage) => - OnEventAsObservable() - .Select(x => Message.Create(this, x)); + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() + .AsUnitObservable(); + } private IObservable OnEventAsObservable() { @@ -41,14 +43,6 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } - - public class Message : MessageBase - { - public static Message Create(PhysicsCollisionEvent sender, Collision collision) - { - return Create(ConnectorType.PhysicsCollisionEvent, sender, collision); - } - } } public enum PhysicsCollisionEventType @@ -57,4 +51,4 @@ public enum PhysicsCollisionEventType CollisionExit, CollisionStay, } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index c784671..9417765 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -23,10 +23,10 @@ [UsedImplicitly] public Component Component set => component = value; } - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .Select(x => Message.Create(this, x)); + .AsUnitObservable(); } private IObservable OnEventAsObservable() @@ -43,14 +43,6 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } - - public class Message : MessageBase - { - public static Message Create(PhysicsTrigger2DEvent sender, Collider2D collider2D) - { - return Create(ConnectorType.PhysicsTrigger2DEvent, sender, collider2D); - } - } } public enum PhysicsTrigger2DEventType @@ -59,4 +51,4 @@ public enum PhysicsTrigger2DEventType TriggerExit2D, TriggerStay2D, } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 2f35f63..fdb431f 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -1,62 +1,54 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/PhysicsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] - public class PhysicsTriggerEvent : ConnectorBase - { - [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = PhysicsTriggerEventType.TriggerEnter; - [SerializeField] private Component component = default; - - [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType - { - get => physicsTriggerEventType; - set => physicsTriggerEventType = value; - } - [UsedImplicitly] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return OnEventAsObservable() - .Select(x => Message.Create(this, x)); - } - - private IObservable OnEventAsObservable() - { - switch (PhysicsTriggerEventType) - { - case PhysicsTriggerEventType.TriggerEnter: - return Component.OnTriggerEnterAsObservable(); - case PhysicsTriggerEventType.TriggerExit: - return Component.OnTriggerExitAsObservable(); - case PhysicsTriggerEventType.TriggerStay: - return Component.OnTriggerStayAsObservable(); - default: - throw new ArgumentOutOfRangeException(); - } - } - - public class Message : MessageBase - { - public static Message Create(PhysicsTriggerEvent sender, Collider collider) - { - return Create(ConnectorType.PhysicsTriggerEvent, sender, collider); - } - } - } - - public enum PhysicsTriggerEventType - { - TriggerEnter, - TriggerExit, - TriggerStay, - } -} +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/PhysicsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] + public class PhysicsTriggerEvent : ConnectorBase + { + [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = PhysicsTriggerEventType.TriggerEnter; + [SerializeField] private Component component = default; + + [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType + { + get => physicsTriggerEventType; + set => physicsTriggerEventType = value; + } + [UsedImplicitly] public Component Component + { + get => component ? component : component = this; + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable() + .AsUnitObservable(); + } + + private IObservable OnEventAsObservable() + { + switch (PhysicsTriggerEventType) + { + case PhysicsTriggerEventType.TriggerEnter: + return Component.OnTriggerEnterAsObservable(); + case PhysicsTriggerEventType.TriggerExit: + return Component.OnTriggerExitAsObservable(); + case PhysicsTriggerEventType.TriggerStay: + return Component.OnTriggerStayAsObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum PhysicsTriggerEventType + { + TriggerEnter, + TriggerExit, + TriggerStay, + } +} diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index c619822..1057fed 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -1,62 +1,53 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] - public class RectTransformEvent : ConnectorBase - { - [SerializeField] private RectTransformEventType rectTransformEventType = RectTransformEventType.CanvasGroupChanged; - [SerializeField] private Component component = default; - - [UsedImplicitly] public RectTransformEventType RectTransformEventType - { - get => rectTransformEventType; - set => rectTransformEventType = value; - } - [UsedImplicitly] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return OnEventAsObservable() - .Select(_ => Message.Create(this)); - } - - private IObservable OnEventAsObservable() - { - switch (RectTransformEventType) - { - case RectTransformEventType.CanvasGroupChanged: - return Component.OnCanvasGroupChangedAsObservable(); - case RectTransformEventType.RectTransformDimensionsChange: - return Component.OnRectTransformDimensionsChangeAsObservable(); - case RectTransformEventType.RectTransformRemoved: - return Component.OnRectTransformRemovedAsObservable(); - default: - throw new ArgumentOutOfRangeException(); - } - } - - public class Message : MessageBase - { - public static Message Create(RectTransformEvent sender) - { - return Create(ConnectorType.RectTransformEvent, sender); - } - } - } - - public enum RectTransformEventType - { - CanvasGroupChanged, - RectTransformDimensionsChange, - RectTransformRemoved, - } - } \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] + public class RectTransformEvent : ConnectorBase + { + [SerializeField] private RectTransformEventType rectTransformEventType = RectTransformEventType.CanvasGroupChanged; + [SerializeField] private Component component = default; + + [UsedImplicitly] public RectTransformEventType RectTransformEventType + { + get => rectTransformEventType; + set => rectTransformEventType = value; + } + [UsedImplicitly] public Component Component + { + get => component ? component : component = this; + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable(); + } + + private IObservable OnEventAsObservable() + { + switch (RectTransformEventType) + { + case RectTransformEventType.CanvasGroupChanged: + return Component.OnCanvasGroupChangedAsObservable(); + case RectTransformEventType.RectTransformDimensionsChange: + return Component.OnRectTransformDimensionsChangeAsObservable(); + case RectTransformEventType.RectTransformRemoved: + return Component.OnRectTransformRemovedAsObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum RectTransformEventType + { + CanvasGroupChanged, + RectTransformDimensionsChange, + RectTransformRemoved, + } + } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index f1493e7..8de4c69 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -1,115 +1,107 @@ -using System; -using System.Collections.Generic; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] - public class SimpleAnimationEvent : ConnectorBase - { - [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = SimpleAnimationEventType.Play; - [SerializeField] - [Tooltip("If you do not specify it will not be filtered")] - private AnimationClip animationClip = default; - [SerializeField] private Animator animator = default; - [SerializeField] private SimpleAnimation simpleAnimation = default; - - [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType - { - get => simpleAnimationEventType; - set => simpleAnimationEventType = value; - } - [UsedImplicitly] public AnimationClip AnimationClip - { - get => animationClip; - set => animationClip = value; - } - [UsedImplicitly] public Animator Animator - { - get => - animator != default - ? animator - : animator = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); - set => animator = value; - } - [UsedImplicitly] public SimpleAnimation SimpleAnimation - { - get => - simpleAnimation != default - ? simpleAnimation - : simpleAnimation = - Animator.GetComponent() != default - ? Animator.GetComponent() - : Animator.gameObject.AddComponent() - ; - set => simpleAnimation = value; - } - - private ISubject<(SimpleAnimationEventType eventType, AnimationClip animationClip)> CurrentStateSubject { get; } = new Subject<(SimpleAnimationEventType, AnimationClip)>(); - - private IDictionary PlayingStatuses { get; } = new Dictionary(); - - private void Start() - { - ObserveSimpleAnimation(); - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return CurrentStateSubject - .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) - .Select(_ => Message.Create(this)); - } - - private void ObserveSimpleAnimation() - { - foreach (var state in SimpleAnimation.GetStates()) - { - PlayingStatuses[state] = false; - state - .ObserveEveryValueChanged(x => (SimpleAnimation.IsPlaying(x.name), x.normalizedTime)) - .Pairwise() - .SubscribeWithState(state, OnChangeAnimatorStateInfo) - .AddTo(this); - } - } - - private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTime)> pair, SimpleAnimation.State state) - { - if (!pair.Previous.isPlaying && pair.Current.isPlaying && !PlayingStatuses[state]) - { - PlayingStatuses[state] = true; - CurrentStateSubject.OnNext((SimpleAnimationEventType.Play, state.clip)); - } - else if (pair.Previous.isPlaying && !pair.Current.isPlaying && PlayingStatuses[state]) - { - PlayingStatuses[state] = false; - CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); - } - else if (pair.Previous.normalizedTime < 1.0f && Mathf.Approximately(pair.Current.normalizedTime, 1.0f) && PlayingStatuses[state]) - { - PlayingStatuses[state] = false; - CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); - } - } - - public class Message : MessageBase - { - public static Message Create(SimpleAnimationEvent sender) - { - return Create(ConnectorType.SimpleAnimationEvent, sender); - } - } - } - - public enum SimpleAnimationEventType - { - Play, - Stop, - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] + public class SimpleAnimationEvent : ConnectorBase + { + [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = SimpleAnimationEventType.Play; + [SerializeField] + [Tooltip("If you do not specify it will not be filtered")] + private AnimationClip animationClip = default; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; + + [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType + { + get => simpleAnimationEventType; + set => simpleAnimationEventType = value; + } + [UsedImplicitly] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } + [UsedImplicitly] public Animator Animator + { + get => + animator != default + ? animator + : animator = + GetComponent() != default + ? GetComponent() + : gameObject.AddComponent(); + set => animator = value; + } + [UsedImplicitly] public SimpleAnimation SimpleAnimation + { + get => + simpleAnimation != default + ? simpleAnimation + : simpleAnimation = + Animator.GetComponent() != default + ? Animator.GetComponent() + : Animator.gameObject.AddComponent() + ; + set => simpleAnimation = value; + } + + private ISubject<(SimpleAnimationEventType eventType, AnimationClip animationClip)> CurrentStateSubject { get; } = new Subject<(SimpleAnimationEventType, AnimationClip)>(); + + private IDictionary PlayingStatuses { get; } = new Dictionary(); + + private void Start() + { + ObserveSimpleAnimation(); + } + + public override IObservable OnConnectAsObservable() + { + return CurrentStateSubject + .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) + .AsUnitObservable(); + } + + private void ObserveSimpleAnimation() + { + foreach (var state in SimpleAnimation.GetStates()) + { + PlayingStatuses[state] = false; + state + .ObserveEveryValueChanged(x => (SimpleAnimation.IsPlaying(x.name), x.normalizedTime)) + .Pairwise() + .SubscribeWithState(state, OnChangeAnimatorStateInfo) + .AddTo(this); + } + } + + private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTime)> pair, SimpleAnimation.State state) + { + if (!pair.Previous.isPlaying && pair.Current.isPlaying && !PlayingStatuses[state]) + { + PlayingStatuses[state] = true; + CurrentStateSubject.OnNext((SimpleAnimationEventType.Play, state.clip)); + } + else if (pair.Previous.isPlaying && !pair.Current.isPlaying && PlayingStatuses[state]) + { + PlayingStatuses[state] = false; + CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); + } + else if (pair.Previous.normalizedTime < 1.0f && Mathf.Approximately(pair.Current.normalizedTime, 1.0f) && PlayingStatuses[state]) + { + PlayingStatuses[state] = false; + CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); + } + } + } + + public enum SimpleAnimationEventType + { + Play, + Stop, + } +} diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 6bdae93..764441f 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -90,9 +90,10 @@ private void OnDestroy() } } - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - return SignalEmittedSubject.Select(_ => Message.Create(this)); + return SignalEmittedSubject + .AsUnitObservable(); } private void RegisterSignal() @@ -141,14 +142,6 @@ private void DispatchEnd() { SignalEmittedSubject.OnNext(TimelineEventType.Stop); } - - public class Message : MessageBase - { - public static Message Create(TimelineEvent sender) - { - return Create(ConnectorType.TimelineEvent, sender); - } - } } public enum TimelineEventType @@ -156,4 +149,4 @@ public enum TimelineEventType Play, Stop, } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Event/TimelineSignal.cs b/Assets/Scripts/Connector/Event/TimelineSignal.cs index bc3d320..3ead777 100644 --- a/Assets/Scripts/Connector/Event/TimelineSignal.cs +++ b/Assets/Scripts/Connector/Event/TimelineSignal.cs @@ -13,12 +13,12 @@ public class TimelineSignal : ConnectorBase { private ISubject<(int intParameter, float floatParameter, string stringParameter, Object objectParameter)> Subject { get; } = new Subject<(int intParameter, float floatParameter, string stringParameter, Object objectParameter)>(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return Subject // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) - .Select(x => Message.Create(this, x)); + .AsUnitObservable(); } [UsedImplicitly] @@ -50,13 +50,5 @@ public void Dispatch(Object objectReferenceParameter) { Subject.OnNext((default, default, default, objectReferenceParameter)); } - - public class Message : MessageBase - { - public static Message Create(TimelineSignal sender, (int, float, string, Object) data) - { - return Create(ConnectorType.TimelineSignal, sender, data); - } - } } } diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 68716ea..5bbd413 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -1,62 +1,53 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.Triggers; -using UnityEngine; - -namespace UniFlow.Connector.Event -{ - [AddComponentMenu("UniFlow/Event/TransformEvent", (int) ConnectorType.TransformEvent)] - public class TransformEvent : ConnectorBase - { - [SerializeField] private TransformEventType transformEventType = TransformEventType.TransformChildrenChanged; - [SerializeField] private Component component = default; - - [UsedImplicitly] public TransformEventType TransformEventType - { - get => transformEventType; - set => transformEventType = value; - } - [UsedImplicitly] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return OnEventAsObservable() - .Select(_ => Message.Create(this)); - } - - private IObservable OnEventAsObservable() - { - switch (TransformEventType) - { - case TransformEventType.BeforeTransformParentChanged: - return Component.OnBeforeTransformParentChangedAsObservable(); - case TransformEventType.TransformParentChanged: - return Component.OnTransformParentChangedAsObservable(); - case TransformEventType.TransformChildrenChanged: - return Component.OnTransformChildrenChangedAsObservable(); - default: - throw new ArgumentOutOfRangeException(); - } - } - - public class Message : MessageBase - { - public static Message Create(TransformEvent sender) - { - return Create(ConnectorType.TransformEvent, sender); - } - } - } - - public enum TransformEventType - { - BeforeTransformParentChanged, - TransformParentChanged, - TransformChildrenChanged, - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/TransformEvent", (int) ConnectorType.TransformEvent)] + public class TransformEvent : ConnectorBase + { + [SerializeField] private TransformEventType transformEventType = TransformEventType.TransformChildrenChanged; + [SerializeField] private Component component = default; + + [UsedImplicitly] public TransformEventType TransformEventType + { + get => transformEventType; + set => transformEventType = value; + } + [UsedImplicitly] public Component Component + { + get => component ? component : component = this; + set => component = value; + } + + public override IObservable OnConnectAsObservable() + { + return OnEventAsObservable(); + } + + private IObservable OnEventAsObservable() + { + switch (TransformEventType) + { + case TransformEventType.BeforeTransformParentChanged: + return Component.OnBeforeTransformParentChangedAsObservable(); + case TransformEventType.TransformParentChanged: + return Component.OnTransformParentChangedAsObservable(); + case TransformEventType.TransformChildrenChanged: + return Component.OnTransformChildrenChangedAsObservable(); + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + public enum TransformEventType + { + BeforeTransformParentChanged, + TransformParentChanged, + TransformChildrenChanged, + } +} diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 30f6050..f3b89f3 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -39,7 +39,7 @@ [UsedImplicitly] public bool DeactivateAfterConnect private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return Observable .ReturnUnit() @@ -62,7 +62,7 @@ public override IObservable OnConnectAsObservable(IMessage latestMessa } } ) - .Select(x => Message.Create(this, x)); + .AsUnitObservable(); } private IObservable OnEventTriggerAsObservable() @@ -112,13 +112,5 @@ private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase - { - public static Message Create(UIBehaviourEventTrigger sender, BaseEventData baseEventData) - { - return Create(ConnectorType.UIBehaviourEventTrigger, sender, baseEventData); - } - } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Logic/Empty.cs b/Assets/Scripts/Connector/Logic/Empty.cs index 6c35b41..7d251bf 100644 --- a/Assets/Scripts/Connector/Logic/Empty.cs +++ b/Assets/Scripts/Connector/Logic/Empty.cs @@ -7,15 +7,9 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/Empty", (int) ConnectorType.Empty)] public class Empty : ConnectorBase { - public override IObservable OnConnectAsObservable(IMessage latestMessage) => - Observable.Return(Message.Create(this)); - - public class Message : MessageBase + public override IObservable OnConnectAsObservable() { - public static Message Create(Empty sender) - { - return Create(ConnectorType.Empty, sender); - } + return Observable.ReturnUnit(); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Logic/Interval.cs b/Assets/Scripts/Connector/Logic/Interval.cs index 8eba08d..a925acb 100644 --- a/Assets/Scripts/Connector/Logic/Interval.cs +++ b/Assets/Scripts/Connector/Logic/Interval.cs @@ -1,40 +1,32 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.Logic -{ - [AddComponentMenu("UniFlow/Logic/Interval", (int) ConnectorType.Interval)] - public class Interval : ConnectorBase - { - [SerializeField] private float seconds = default; - [SerializeField] private bool ignoreTimeScale = default; - - [UsedImplicitly] public float Seconds - { - get => seconds; - set => seconds = value; - } - [UsedImplicitly] private bool IgnoreTimeScale - { - get => ignoreTimeScale; - set => ignoreTimeScale = value; - } - - public override IObservable OnConnectAsObservable(IMessage latestMessage) - { - return Observable - .Interval(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) - .Select(_ => Message.Create(this)); - } - - public class Message : MessageBase - { - public static Message Create(Interval sender) - { - return Create(ConnectorType.Interval, sender); - } - } - } -} \ No newline at end of file +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Logic +{ + [AddComponentMenu("UniFlow/Logic/Interval", (int) ConnectorType.Interval)] + public class Interval : ConnectorBase + { + [SerializeField] private float seconds = default; + [SerializeField] private bool ignoreTimeScale = default; + + [UsedImplicitly] public float Seconds + { + get => seconds; + set => seconds = value; + } + [UsedImplicitly] private bool IgnoreTimeScale + { + get => ignoreTimeScale; + set => ignoreTimeScale = value; + } + + public override IObservable OnConnectAsObservable() + { + return Observable + .Interval(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) + .AsUnitObservable(); + } + } +} diff --git a/Assets/Scripts/Connector/Logic/Timer.cs b/Assets/Scripts/Connector/Logic/Timer.cs index 488d292..9d82993 100644 --- a/Assets/Scripts/Connector/Logic/Timer.cs +++ b/Assets/Scripts/Connector/Logic/Timer.cs @@ -22,19 +22,11 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { return Observable .Timer(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) - .Select(_ => Message.Create(this)); - } - - public class Message : MessageBase - { - public static Message Create(Timer sender) - { - return Create(ConnectorType.Timer, sender); - } + .AsUnitObservable(); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Misc/Receive.cs b/Assets/Scripts/Connector/Misc/Receive.cs index 80d0261..e45638f 100644 --- a/Assets/Scripts/Connector/Misc/Receive.cs +++ b/Assets/Scripts/Connector/Misc/Receive.cs @@ -16,24 +16,9 @@ public override bool ActAsTrigger } } - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - return Observable.Return(Message.Create(this)); - } - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase - { - public static Message Create(Receive sender) - { - return Create(ConnectorType.Receive, sender); - } + return Observable.ReturnUnit(); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index e38482e..2c1b840 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -11,24 +11,16 @@ public class Toss : ConnectorBase [SerializeField] private List targets = default; private IEnumerable Targets => targets; - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { foreach (var target in Targets) { if (target != default && target.activeSelf) { - (target.GetComponent() as IConnector)?.Connect(Observable.Return(((IMessage) default, Messages.Create()))); + (target.GetComponent() as IConnector)?.Connect(Observable.ReturnUnit()); } } - return Observable.Return(Message.Create(this)); - } - - public class Message : MessageBase - { - public static Message Create(Toss sender) - { - return Create(ConnectorType.Toss, sender); - } + return Observable.ReturnUnit(); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/Base.cs b/Assets/Scripts/Connector/ValueComparer/Base.cs index e841809..7f03856 100644 --- a/Assets/Scripts/Connector/ValueComparer/Base.cs +++ b/Assets/Scripts/Connector/ValueComparer/Base.cs @@ -11,7 +11,7 @@ public abstract class Base : ConnectorBase [SerializeField] private TValue expect = default; [SerializeField] private TOperator @operator = default; - [UsedImplicitly] public TValue Value + [UsedImplicitly] public TValue Expect { get => expect; set => expect = value; @@ -24,9 +24,9 @@ [UsedImplicitly] public TOperator Operator private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - return Observable.Return(Message.Create(this)); + return Observable.ReturnUnit(); } protected abstract bool Compare(TValue compareValue); @@ -35,13 +35,5 @@ private void OnDestroy() { Disposable.Dispose(); } - - public class Message : MessageBase> - { - public static Message Create(Base sender) - { - return Create(ConnectorType.ValueComparerEnum, sender); - } - } } } diff --git a/Assets/Scripts/Connector/ValueComparer/Enum.cs b/Assets/Scripts/Connector/ValueComparer/Enum.cs index e594752..f9882b2 100644 --- a/Assets/Scripts/Connector/ValueComparer/Enum.cs +++ b/Assets/Scripts/Connector/ValueComparer/Enum.cs @@ -9,11 +9,11 @@ protected override bool Compare(TEnum compareValue) switch (Operator) { case OperatorType.Equal: - return Equals(compareValue, Value); + return Equals(compareValue, Expect); case OperatorType.NotEqual: - return !Equals(compareValue, Value); + return !Equals(compareValue, Expect); case OperatorType.HasFlag: - return Value.HasFlag(compareValue); + return Expect.HasFlag(compareValue); default: throw new ArgumentOutOfRangeException(); } @@ -26,4 +26,4 @@ public enum OperatorType HasFlag, } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/Float.cs b/Assets/Scripts/Connector/ValueComparer/Float.cs index 8eaff50..b5a62cb 100644 --- a/Assets/Scripts/Connector/ValueComparer/Float.cs +++ b/Assets/Scripts/Connector/ValueComparer/Float.cs @@ -11,17 +11,17 @@ protected override bool Compare(float compareValue) switch (Operator) { case OperatorType.Equal: - return Mathf.Approximately(Value, compareValue); + return Mathf.Approximately(Expect, compareValue); case OperatorType.NotEqual: - return !Mathf.Approximately(Value, compareValue); + return !Mathf.Approximately(Expect, compareValue); case OperatorType.Greater: - return compareValue > Value; + return compareValue > Expect; case OperatorType.GreaterOrEqual: - return compareValue >= Value; + return compareValue >= Expect; case OperatorType.Less: - return compareValue < Value; + return compareValue < Expect; case OperatorType.LessOrEqual: - return compareValue <= Value; + return compareValue <= Expect; default: throw new ArgumentOutOfRangeException(); } @@ -37,4 +37,4 @@ public enum OperatorType LessOrEqual, } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/Int.cs b/Assets/Scripts/Connector/ValueComparer/Int.cs index ad3a7a1..4afd8f0 100644 --- a/Assets/Scripts/Connector/ValueComparer/Int.cs +++ b/Assets/Scripts/Connector/ValueComparer/Int.cs @@ -11,17 +11,17 @@ protected override bool Compare(int compareValue) switch (Operator) { case OperatorType.Equal: - return compareValue == Value; + return compareValue == Expect; case OperatorType.NotEqual: - return compareValue != Value; + return compareValue != Expect; case OperatorType.Greater: - return compareValue > Value; + return compareValue > Expect; case OperatorType.GreaterOrEqual: - return compareValue >= Value; + return compareValue >= Expect; case OperatorType.Less: - return compareValue < Value; + return compareValue < Expect; case OperatorType.LessOrEqual: - return compareValue <= Value; + return compareValue <= Expect; default: throw new ArgumentOutOfRangeException(); } diff --git a/Assets/Scripts/Connector/ValueComparer/Object.cs b/Assets/Scripts/Connector/ValueComparer/Object.cs index aa309ac..990c517 100644 --- a/Assets/Scripts/Connector/ValueComparer/Object.cs +++ b/Assets/Scripts/Connector/ValueComparer/Object.cs @@ -11,9 +11,9 @@ protected override bool Compare(UnityEngine.Object compareValue) switch (Operator) { case OperatorType.Equal: - return compareValue == Value; + return compareValue == Expect; case OperatorType.NotEqual: - return compareValue != Value; + return compareValue != Expect; case OperatorType.Null: return compareValue == default; case OperatorType.NotNull: @@ -31,4 +31,4 @@ public enum OperatorType NotNull, } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/String.cs b/Assets/Scripts/Connector/ValueComparer/String.cs index 0441438..c000b24 100644 --- a/Assets/Scripts/Connector/ValueComparer/String.cs +++ b/Assets/Scripts/Connector/ValueComparer/String.cs @@ -11,9 +11,9 @@ protected override bool Compare(string compareValue) switch (Operator) { case OperatorType.Equal: - return compareValue == Value; + return compareValue == Expect; case OperatorType.NotEqual: - return compareValue != Value; + return compareValue != Expect; case OperatorType.NullOrEmpty: return string.IsNullOrEmpty(compareValue); case OperatorType.NotNullOrEmpty: @@ -37,4 +37,4 @@ public enum OperatorType NotNullOrWhitespace, } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueProvider/Base.cs b/Assets/Scripts/Connector/ValueProvider/Base.cs index d05de5e..0778661 100644 --- a/Assets/Scripts/Connector/ValueProvider/Base.cs +++ b/Assets/Scripts/Connector/ValueProvider/Base.cs @@ -5,26 +5,11 @@ namespace UniFlow.Connector.ValueProvider { public abstract class Base : ConnectorBase { - private IDisposable Disposable { get; } = new CompositeDisposable(); - - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - return Observable.Return(Message.Create(this, Provide())); + return Observable.ReturnUnit(); } protected abstract TValue Provide(); - - private void OnDestroy() - { - Disposable.Dispose(); - } - - public class Message : MessageBase, TValue> - { - public static Message Create(Base sender, TValue value) - { - return Create(ConnectorType.ValueProvider, sender, value); - } - } } } diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 5c54602..dcc2f3c 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -19,8 +19,6 @@ [SerializeField] [Tooltip("Specify identifiers of IEventConnector that resolve f [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] protected bool actAsTrigger = false; - protected Messages Messages { get; private set; } - protected virtual IEnumerable TargetConnectors => new List() .Concat(targetComponents ?? new List()) @@ -50,7 +48,7 @@ public Vector2 FlowGraphNodePosition set => flowGraphNodePosition = value; } - public ISubject OnConnectSubject { get; } = new Subject(); + public ISubject OnConnectSubject { get; } = new Subject(); #endif [UsedImplicitly] public virtual bool ActAsTrigger @@ -63,27 +61,28 @@ [UsedImplicitly] public virtual bool ActAsTrigger protected virtual void Awake() { - CollectSuppliedValues(); if (ActAsTrigger) { - ((IConnector) this).Connect(Observable.Return<(IMessage, Messages)>(default)); + ((IConnector) this).Connect(Observable.ReturnUnit()); } } - void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> source) + void IConnector.Connect(IObservable source) { + if (Logger.IsEnabled) + { + OnConnectSubject.Subscribe(_ => Logger.Log(this)); + } var observable = source .SelectMany( - eventMessages => + _ => { - var (latestMessage, massages) = eventMessages; - Messages = massages; return (this as IConnector) - .OnConnectAsObservable(latestMessage) + .OnConnectAsObservable() #if UNITY_EDITOR .Do(OnConnectSubject.OnNext) #endif - .Select(x => (latestMessage: x, messages: (massages ?? Messages.Create()).Append(x))); + ; } ); if (TargetConnectors.Count() > 1) @@ -100,12 +99,7 @@ void IConnector.Connect(IObservable<(IMessage latestMessage, Messages massages)> } } - protected virtual void CollectSuppliedValues() - { - // Do nothing - } - - public abstract IObservable OnConnectAsObservable(IMessage latestMessage); + public abstract IObservable OnConnectAsObservable(); [PublicAPI] public void AddConnector(ConnectorBase connectable) diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index 92532d7..2beca75 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -5,10 +5,10 @@ namespace UniFlow { public interface IConnector { - IObservable OnConnectAsObservable(IMessage latestMessage); - void Connect(IObservable<(IMessage latestMessage, Messages massages)> source); + IObservable OnConnectAsObservable(); + void Connect(IObservable source); #if UNITY_EDITOR - ISubject OnConnectSubject { get; } + ISubject OnConnectSubject { get; } #endif } } diff --git a/Assets/Scripts/IObservableReceiver.cs b/Assets/Scripts/IObservableReceiver.cs index b4cfec7..d756c1e 100644 --- a/Assets/Scripts/IObservableReceiver.cs +++ b/Assets/Scripts/IObservableReceiver.cs @@ -1,9 +1,10 @@ using System; +using UniRx; namespace UniFlow { public interface IObservableReceiver : IReceiver { - IObservable OnReceiveAsObservable(); + IObservable OnReceiveAsObservable(); } -} \ No newline at end of file +} diff --git a/Assets/Scripts/IReceiver.cs b/Assets/Scripts/IReceiver.cs index bbfd982..14d3522 100644 --- a/Assets/Scripts/IReceiver.cs +++ b/Assets/Scripts/IReceiver.cs @@ -2,6 +2,6 @@ namespace UniFlow { public interface IReceiver : IConnector { - void OnReceive(Messages messages); + void OnReceive(); } -} \ No newline at end of file +} diff --git a/Assets/Scripts/MessageBase.cs b/Assets/Scripts/MessageBase.cs deleted file mode 100644 index b951683..0000000 --- a/Assets/Scripts/MessageBase.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UniFlow.Message; - -namespace UniFlow -{ - public class MessageBase : IMessage where TSender : IConnector - { - public ConnectorType ConnectorType { get; private set; } - public TSender Sender { get; private set; } - public TData Data { get; private set; } - - protected static TResult Create(ConnectorType connectorType, TSender sender, TData data) where TResult : MessageBase, new() - { - return new TResult - { - ConnectorType = connectorType, - Sender = sender, - Data = data, - }; - } - } - - public class MessageBase : MessageBase where TSender : IConnector - { - - protected static TResult Create(ConnectorType connectorType, TSender sender) where TResult : MessageBase, new() - { - return Create(connectorType, sender, Empty.Default); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/MessageBase.cs.meta b/Assets/Scripts/MessageBase.cs.meta deleted file mode 100644 index 5104b80..0000000 --- a/Assets/Scripts/MessageBase.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1c21c6b5d290484eaada1c1fa2f9ed93 -timeCreated: 1565329674 \ No newline at end of file diff --git a/Assets/Scripts/Messages.cs b/Assets/Scripts/Messages.cs deleted file mode 100644 index 4449b6f..0000000 --- a/Assets/Scripts/Messages.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using JetBrains.Annotations; - -namespace UniFlow -{ - [PublicAPI] - public class Messages : List - { - private Messages() - { - } - - public Messages Append(IMessage message) - { - Add(message); - return this; - } - - public Messages AppendRange(IEnumerable messages) - { - AddRange(messages); - return this; - } - - public static Messages Create() - { - return new Messages(); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Messages.cs.meta b/Assets/Scripts/Messages.cs.meta deleted file mode 100644 index 122d7b6..0000000 --- a/Assets/Scripts/Messages.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 4599e3138d254e8aa3fb6089a2256c53 -timeCreated: 1562764539 \ No newline at end of file diff --git a/Assets/Scripts/Receiver/Empty.cs b/Assets/Scripts/Receiver/Empty.cs index 797cad3..ea8b145 100644 --- a/Assets/Scripts/Receiver/Empty.cs +++ b/Assets/Scripts/Receiver/Empty.cs @@ -5,9 +5,9 @@ namespace UniFlow.Receiver [AddComponentMenu("UniFlow/Receiver/Empty", (int) ConnectorType.Receiver)] public class Empty : ReceiverBase { - public override void OnReceive(Messages messages) + public override void OnReceive() { // Do nothing. } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index 1a3f81e..9cacb10 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -1,32 +1,32 @@ -using System; -using System.Reflection; -using System.Text; -using UnityEngine; - -namespace UniFlow.Receiver -{ - [AddComponentMenu("UniFlow/Receiver/Log", (int) ConnectorType.Receiver)] - public class Log : ReceiverBase - { - public override void OnReceive(Messages messages) - { - var sb = new StringBuilder(); - sb.AppendLine($"EventCount: {messages.Count}"); - sb.AppendLine("Messages:"); - var index = 0; - foreach (var message in messages) - { - sb.AppendLine($" {index}"); - sb.AppendLine($" Type:\n {message.ConnectorType}"); - sb.AppendLine($" Message Type:\n {message.GetType()}"); - if (message.GetType().BaseType is Type baseType && baseType.IsGenericType && baseType.GenericTypeArguments.Length == 2) - { - var data = message.GetType().GetProperty("Data", BindingFlags.Instance | BindingFlags.Public)?.GetValue(message); - sb.AppendLine($" Data:\n Type:\n {data?.GetType()}\n Value:\n {data?.ToString().Replace("\n", "\n ")}"); - } - index++; - } - Debug.Log(sb.ToString()); - } - } -} \ No newline at end of file +using System.Collections.Generic; +using System.Text; +using UniRx; +using UnityEngine; + +namespace UniFlow.Receiver +{ + [AddComponentMenu("UniFlow/Receiver/Log", (int) ConnectorType.Receiver)] + public class Log : ReceiverBase + { + private IList Connectors { get; } = new List(); + + protected override void Awake() + { + base.Awake(); + Logger.Activate(); + Logger.OnMessageAsObservable().Subscribe(Connectors.Add); + } + + public override void OnReceive() + { + var sb = new StringBuilder(); + sb.AppendLine($"Count: {Connectors.Count}"); + sb.AppendLine("Connectors:"); + foreach (var connector in Connectors) + { + sb.AppendLine($" {connector.GetType().Name}"); + } + Debug.Log(sb.ToString()); + } + } +} diff --git a/Assets/Scripts/Receiver/ObservableReceiverBase.cs b/Assets/Scripts/Receiver/ObservableReceiverBase.cs index e163444..f5dfa29 100644 --- a/Assets/Scripts/Receiver/ObservableReceiverBase.cs +++ b/Assets/Scripts/Receiver/ObservableReceiverBase.cs @@ -1,20 +1,20 @@ -using System; -using UniRx; - -namespace UniFlow.Receiver -{ - public abstract class ObservableReceiverBase : ReceiverBase, IObservableReceiver - { - private ISubject OnReceiveSubject { get; } = new Subject(); - - IObservable IObservableReceiver.OnReceiveAsObservable() - { - return OnReceiveSubject; - } - - public override void OnReceive(Messages messages) - { - OnReceiveSubject.OnNext(messages); - } - } -} \ No newline at end of file +using System; +using UniRx; + +namespace UniFlow.Receiver +{ + public abstract class ObservableReceiverBase : ReceiverBase, IObservableReceiver + { + private ISubject OnReceiveSubject { get; } = new Subject(); + + IObservable IObservableReceiver.OnReceiveAsObservable() + { + return OnReceiveSubject; + } + + public override void OnReceive() + { + OnReceiveSubject.OnNext(Unit.Default); + } + } +} diff --git a/Assets/Scripts/ReceiverBase.cs b/Assets/Scripts/ReceiverBase.cs index 0356a3d..cbc9e6c 100644 --- a/Assets/Scripts/ReceiverBase.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -8,20 +8,12 @@ public abstract class ReceiverBase : ConnectorBase, IReceiver { protected override IEnumerable TargetConnectors { get; } = new List(); - public override IObservable OnConnectAsObservable(IMessage latestMessage) + public override IObservable OnConnectAsObservable() { - OnReceive(Messages); - return Observable.Return(Message.Create(this)); + OnReceive(); + return Observable.ReturnUnit(); } - public abstract void OnReceive(Messages messages); - - public class Message : MessageBase - { - public static Message Create(ReceiverBase sender) - { - return Create(ConnectorType.Receiver, sender); - } - } + public abstract void OnReceive(); } -} \ No newline at end of file +} From 59b1c44937eb19a159acd42bac819ab593c37616 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 14:06:28 +0900 Subject: [PATCH 189/453] :wrench: Avoid warning on Rider --- Assets/Scripts/Attribute/ValuePublisherAttribute.cs | 2 ++ Assets/Scripts/Attribute/ValueReceiverAttribute.cs | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs index d80fe30..4e165b6 100644 --- a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs +++ b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs @@ -1,8 +1,10 @@ using System; +using JetBrains.Annotations; namespace UniFlow.Attribute { [AttributeUsage(AttributeTargets.Property)] + [MeansImplicitUse] public class ValuePublisherAttribute : System.Attribute { public ValuePublisherAttribute(string name = "") diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs index 0f6c586..711b9cb 100644 --- a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs +++ b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs @@ -1,8 +1,10 @@ using System; +using JetBrains.Annotations; namespace UniFlow.Attribute { [AttributeUsage(AttributeTargets.Property)] + [MeansImplicitUse] public class ValueReceiverAttribute : System.Attribute { public ValueReceiverAttribute(string name = "") From 64ae02fb7d02550388e534d501b50a4ce6cd56c6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 16:51:23 +0900 Subject: [PATCH 190/453] :name_badge: Rename Comparer and Provider --- .../{Bool.cs => BoolComparer.cs} | 4 +- .../{Bool.cs.meta => BoolComparer.cs.meta} | 0 .../{Base.cs => ComparerBase.cs} | 2 +- .../{Base.cs.meta => ComparerBase.cs.meta} | 0 .../{Enum.cs => EnumComparerBase.cs} | 2 +- ...{Enum.cs.meta => EnumComparerBase.cs.meta} | 0 .../{Float.cs => FloatComparer.cs} | 2 +- .../{Float.cs.meta => FloatComparer.cs.meta} | 0 .../ValueComparer/{Int.cs => IntComparer.cs} | 2 +- .../{Int.cs.meta => IntComparer.cs.meta} | 0 .../Connector/ValueComparer/Object.cs.meta | 3 -- .../{Object.cs => ObjectComparer.cs} | 2 +- .../ValueComparer/ObjectComparer.cs.meta | 11 +++++ .../{String.cs => StringComparer.cs} | 2 +- ...{String.cs.meta => StringComparer.cs.meta} | 0 .../{Bool.cs => BoolProvider.cs} | 6 +-- .../{Bool.cs.meta => BoolProvider.cs.meta} | 0 .../Connector/ValueProvider/ChoiceInt.cs | 13 ++++++ .../Connector/ValueProvider/ChoiceInt.cs.meta | 3 ++ .../Scripts/Connector/ValueProvider/Color.cs | 22 ---------- .../Connector/ValueProvider/Color32.cs | 22 ---------- .../ValueProvider/Color32Provider.cs | 21 ++++++++++ ...olor32.cs.meta => Color32Provider.cs.meta} | 0 .../Connector/ValueProvider/ColorProvider.cs | 21 ++++++++++ .../{Color.cs.meta => ColorProvider.cs.meta} | 0 .../{Float.cs => FloatProvider.cs} | 7 ++-- .../{Float.cs.meta => FloatProvider.cs.meta} | 0 .../ValueProvider/GameObjectProvider.cs | 21 ++++++++++ .../ValueProvider/GameObjectProvider.cs.meta | 3 ++ .../ValueProvider/{Int.cs => IntProvider.cs} | 7 ++-- .../{Int.cs.meta => IntProvider.cs.meta} | 0 .../Scripts/Connector/ValueProvider/Object.cs | 22 ---------- .../Connector/ValueProvider/ObjectProvider.cs | 21 ++++++++++ ...{Object.cs.meta => ObjectProvider.cs.meta} | 0 .../{Base.cs => ProviderBase.cs} | 9 ++-- .../{Base.cs.meta => ProviderBase.cs.meta} | 0 .../Connector/ValueProvider/Quaternion.cs | 22 ---------- .../ValueProvider/QuaternionProvider.cs | 21 ++++++++++ ...ion.cs.meta => QuaternionProvider.cs.meta} | 0 .../Connector/ValueProvider/SelectorBase.cs | 41 +++++++++++++++++++ .../ValueProvider/SelectorBase.cs.meta | 3 ++ .../{String.cs => StringProvider.cs} | 7 ++-- ...{String.cs.meta => StringProvider.cs.meta} | 0 .../Connector/ValueProvider/Vector2.cs | 22 ---------- .../Connector/ValueProvider/Vector2Int.cs | 22 ---------- .../ValueProvider/Vector2IntProvider.cs | 21 ++++++++++ ...Int.cs.meta => Vector2IntProvider.cs.meta} | 0 .../ValueProvider/Vector2Provider.cs | 21 ++++++++++ ...ector2.cs.meta => Vector2Provider.cs.meta} | 0 .../Connector/ValueProvider/Vector3.cs | 22 ---------- .../Connector/ValueProvider/Vector3Int.cs | 22 ---------- .../ValueProvider/Vector3IntProvider.cs | 21 ++++++++++ ...Int.cs.meta => Vector3IntProvider.cs.meta} | 0 .../ValueProvider/Vector3Provider.cs | 21 ++++++++++ ...ector3.cs.meta => Vector3Provider.cs.meta} | 0 .../Connector/ValueProvider/Vector4.cs | 22 ---------- .../ValueProvider/Vector4Provider.cs | 21 ++++++++++ ...ector4.cs.meta => Vector4Provider.cs.meta} | 0 58 files changed, 310 insertions(+), 227 deletions(-) rename Assets/Scripts/Connector/ValueComparer/{Bool.cs => BoolComparer.cs} (89%) rename Assets/Scripts/Connector/ValueComparer/{Bool.cs.meta => BoolComparer.cs.meta} (100%) rename Assets/Scripts/Connector/ValueComparer/{Base.cs => ComparerBase.cs} (92%) rename Assets/Scripts/Connector/ValueComparer/{Base.cs.meta => ComparerBase.cs.meta} (100%) rename Assets/Scripts/Connector/ValueComparer/{Enum.cs => EnumComparerBase.cs} (84%) rename Assets/Scripts/Connector/ValueComparer/{Enum.cs.meta => EnumComparerBase.cs.meta} (100%) rename Assets/Scripts/Connector/ValueComparer/{Float.cs => FloatComparer.cs} (93%) rename Assets/Scripts/Connector/ValueComparer/{Float.cs.meta => FloatComparer.cs.meta} (100%) rename Assets/Scripts/Connector/ValueComparer/{Int.cs => IntComparer.cs} (93%) rename Assets/Scripts/Connector/ValueComparer/{Int.cs.meta => IntComparer.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueComparer/Object.cs.meta rename Assets/Scripts/Connector/ValueComparer/{Object.cs => ObjectComparer.cs} (90%) create mode 100644 Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs.meta rename Assets/Scripts/Connector/ValueComparer/{String.cs => StringComparer.cs} (93%) rename Assets/Scripts/Connector/ValueComparer/{String.cs.meta => StringComparer.cs.meta} (100%) rename Assets/Scripts/Connector/ValueProvider/{Bool.cs => BoolProvider.cs} (67%) rename Assets/Scripts/Connector/ValueProvider/{Bool.cs.meta => BoolProvider.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueProvider/Color.cs delete mode 100644 Assets/Scripts/Connector/ValueProvider/Color32.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Color32Provider.cs rename Assets/Scripts/Connector/ValueProvider/{Color32.cs.meta => Color32Provider.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/ValueProvider/ColorProvider.cs rename Assets/Scripts/Connector/ValueProvider/{Color.cs.meta => ColorProvider.cs.meta} (100%) rename Assets/Scripts/Connector/ValueProvider/{Float.cs => FloatProvider.cs} (67%) rename Assets/Scripts/Connector/ValueProvider/{Float.cs.meta => FloatProvider.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs.meta rename Assets/Scripts/Connector/ValueProvider/{Int.cs => IntProvider.cs} (68%) rename Assets/Scripts/Connector/ValueProvider/{Int.cs.meta => IntProvider.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueProvider/Object.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs rename Assets/Scripts/Connector/ValueProvider/{Object.cs.meta => ObjectProvider.cs.meta} (100%) rename Assets/Scripts/Connector/ValueProvider/{Base.cs => ProviderBase.cs} (57%) rename Assets/Scripts/Connector/ValueProvider/{Base.cs.meta => ProviderBase.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueProvider/Quaternion.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs rename Assets/Scripts/Connector/ValueProvider/{Quaternion.cs.meta => QuaternionProvider.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/ValueProvider/SelectorBase.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/SelectorBase.cs.meta rename Assets/Scripts/Connector/ValueProvider/{String.cs => StringProvider.cs} (67%) rename Assets/Scripts/Connector/ValueProvider/{String.cs.meta => StringProvider.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2.cs delete mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2Int.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs rename Assets/Scripts/Connector/ValueProvider/{Vector2Int.cs.meta => Vector2IntProvider.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs rename Assets/Scripts/Connector/ValueProvider/{Vector2.cs.meta => Vector2Provider.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3.cs delete mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3Int.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs rename Assets/Scripts/Connector/ValueProvider/{Vector3Int.cs.meta => Vector3IntProvider.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs rename Assets/Scripts/Connector/ValueProvider/{Vector3.cs.meta => Vector3Provider.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueProvider/Vector4.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs rename Assets/Scripts/Connector/ValueProvider/{Vector4.cs.meta => Vector4Provider.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/ValueComparer/Bool.cs b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs similarity index 89% rename from Assets/Scripts/Connector/ValueComparer/Bool.cs rename to Assets/Scripts/Connector/ValueComparer/BoolComparer.cs index 61693a1..23932d1 100644 --- a/Assets/Scripts/Connector/ValueComparer/Bool.cs +++ b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Bool", (int) ConnectorType.ValueComparerBool)] - public class Bool : Base + public class BoolComparer : ComparerBase { protected override bool Compare(bool compareValue) { @@ -25,4 +25,4 @@ public enum OperatorType False, } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Connector/ValueComparer/Bool.cs.meta b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/Bool.cs.meta rename to Assets/Scripts/Connector/ValueComparer/BoolComparer.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/Base.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs similarity index 92% rename from Assets/Scripts/Connector/ValueComparer/Base.cs rename to Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 7f03856..cff9ccd 100644 --- a/Assets/Scripts/Connector/ValueComparer/Base.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueComparer { - public abstract class Base : ConnectorBase + public abstract class ComparerBase : ConnectorBase where TOperator : Enum { [SerializeField] private TValue expect = default; diff --git a/Assets/Scripts/Connector/ValueComparer/Base.cs.meta b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/Base.cs.meta rename to Assets/Scripts/Connector/ValueComparer/ComparerBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/Enum.cs b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs similarity index 84% rename from Assets/Scripts/Connector/ValueComparer/Enum.cs rename to Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs index f9882b2..d495888 100644 --- a/Assets/Scripts/Connector/ValueComparer/Enum.cs +++ b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueComparer { - public abstract class Enum : Base.OperatorType> where TEnum : Enum + public abstract class EnumComparerBase : ComparerBase.OperatorType> where TEnum : Enum { protected override bool Compare(TEnum compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Enum.cs.meta b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/Enum.cs.meta rename to Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/Float.cs b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs similarity index 93% rename from Assets/Scripts/Connector/ValueComparer/Float.cs rename to Assets/Scripts/Connector/ValueComparer/FloatComparer.cs index b5a62cb..3e8a9da 100644 --- a/Assets/Scripts/Connector/ValueComparer/Float.cs +++ b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Float", (int) ConnectorType.ValueComparerFloat)] - public class Float : Base + public class FloatComparer : ComparerBase { protected override bool Compare(float compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Float.cs.meta b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/Float.cs.meta rename to Assets/Scripts/Connector/ValueComparer/FloatComparer.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/Int.cs b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs similarity index 93% rename from Assets/Scripts/Connector/ValueComparer/Int.cs rename to Assets/Scripts/Connector/ValueComparer/IntComparer.cs index 4afd8f0..e26cbf5 100644 --- a/Assets/Scripts/Connector/ValueComparer/Int.cs +++ b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Int", (int) ConnectorType.ValueComparerInt)] - public class Int : Base + public class IntComparer : ComparerBase { protected override bool Compare(int compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/Int.cs.meta b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/Int.cs.meta rename to Assets/Scripts/Connector/ValueComparer/IntComparer.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/Object.cs.meta b/Assets/Scripts/Connector/ValueComparer/Object.cs.meta deleted file mode 100644 index 3a848ba..0000000 --- a/Assets/Scripts/Connector/ValueComparer/Object.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8d5db1e413fa4f35b417693af20ff3b9 -timeCreated: 1568882443 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueComparer/Object.cs b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs similarity index 90% rename from Assets/Scripts/Connector/ValueComparer/Object.cs rename to Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs index 990c517..258ee23 100644 --- a/Assets/Scripts/Connector/ValueComparer/Object.cs +++ b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Object", (int) ConnectorType.ValueComparerObject)] - public class Object : Base + public class ObjectComparer : ComparerBase { protected override bool Compare(UnityEngine.Object compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs.meta b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs.meta new file mode 100644 index 0000000..8977d78 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50fbdee7547024eeca4ccd8897acee3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Connector/ValueComparer/String.cs b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs similarity index 93% rename from Assets/Scripts/Connector/ValueComparer/String.cs rename to Assets/Scripts/Connector/ValueComparer/StringComparer.cs index c000b24..258c17f 100644 --- a/Assets/Scripts/Connector/ValueComparer/String.cs +++ b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/String", (int) ConnectorType.ValueComparerString)] - public class String : Base + public class StringComparer : ComparerBase { protected override bool Compare(string compareValue) { diff --git a/Assets/Scripts/Connector/ValueComparer/String.cs.meta b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueComparer/String.cs.meta rename to Assets/Scripts/Connector/ValueComparer/StringComparer.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs similarity index 67% rename from Assets/Scripts/Connector/ValueProvider/Bool.cs rename to Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index 8380738..cf28fc6 100644 --- a/Assets/Scripts/Connector/ValueProvider/Bool.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -1,20 +1,20 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class Bool : Base + public class BoolProvider : ProviderBase { [SerializeField] private bool value = default; private bool Value => value; [SerializeField] private PublishBoolEvent publisher = default; - [ValuePublisher("Value")] private PublishBoolEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); protected override bool Provide() { - Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Bool.cs.meta b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Bool.cs.meta rename to Assets/Scripts/Connector/ValueProvider/BoolProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs b/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs new file mode 100644 index 0000000..ed641c8 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs @@ -0,0 +1,13 @@ +using System; +using UniRx; + +namespace UniFlow.Connector.ValueProvider +{ + public class ChoiceInt : ConnectorBase + { + public override IObservable OnConnectAsObservable() + { + throw new NotImplementedException(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta b/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta new file mode 100644 index 0000000..f912888 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cc0fa55af03c4d8ba89b1bbbdafcc272 +timeCreated: 1569822359 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs b/Assets/Scripts/Connector/ValueProvider/Color.cs deleted file mode 100644 index 8b7ea00..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Color.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class Color : Base - { - [SerializeField] private UnityEngine.Color value = default; - private UnityEngine.Color Value => value; - - [SerializeField] private PublishColorEvent publisher = default; - [ValuePublisher("Value")] - private PublishColorEvent Publisher => publisher ?? (publisher = new PublishColorEvent()); - - protected override UnityEngine.Color Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs b/Assets/Scripts/Connector/ValueProvider/Color32.cs deleted file mode 100644 index 69d0648..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Color32.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32 : Base - { - [SerializeField] private UnityEngine.Color32 value = default; - private UnityEngine.Color32 Value => value; - - [SerializeField] private PublishColor32Event publisher = default; - [ValuePublisher("Value")] - private PublishColor32Event Publisher => publisher ?? (publisher = new PublishColor32Event()); - - protected override UnityEngine.Color32 Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs new file mode 100644 index 0000000..33d3b74 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] + public class Color32Provider : ProviderBase + { + [SerializeField] private Color32 value = default; + private Color32 Value => value; + + [SerializeField] private PublishColor32Event publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishColor32Event()); + + protected override Color32 Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Color32.cs.meta b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Color32.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Color32Provider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs new file mode 100644 index 0000000..8a0eefa --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] + public class ColorProvider : ProviderBase + { + [SerializeField] private Color value = default; + private Color Value => value; + + [SerializeField] private PublishColorEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishColorEvent()); + + protected override Color Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Color.cs.meta b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Color.cs.meta rename to Assets/Scripts/Connector/ValueProvider/ColorProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs similarity index 67% rename from Assets/Scripts/Connector/ValueProvider/Float.cs rename to Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index e621800..8137c4c 100644 --- a/Assets/Scripts/Connector/ValueProvider/Float.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -1,21 +1,20 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class Float : Base + public class FloatProvider : ProviderBase { [SerializeField] private float value = default; private float Value => value; [SerializeField] private PublishFloatEvent publisher = default; - [ValuePublisher("Value")] - private PublishFloatEvent Publisher => publisher ?? (publisher = new PublishFloatEvent()); + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishFloatEvent()); protected override float Provide() { - Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Float.cs.meta b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Float.cs.meta rename to Assets/Scripts/Connector/ValueProvider/FloatProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs new file mode 100644 index 0000000..026b5a7 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] + public class GameObjectProvider : ProviderBase + { + [SerializeField] private GameObject value = default; + private GameObject Value => value; + + [SerializeField] private PublishGameObjectEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishGameObjectEvent()); + + protected override GameObject Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs.meta b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs.meta new file mode 100644 index 0000000..86ca42c --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5fa5d13e71a845a7ab44ffff33438af0 +timeCreated: 1569910725 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs similarity index 68% rename from Assets/Scripts/Connector/ValueProvider/Int.cs rename to Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 4d4f462..ad6a2f6 100644 --- a/Assets/Scripts/Connector/ValueProvider/Int.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -1,21 +1,20 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class Int : Base + public class IntProvider : ProviderBase { [SerializeField] private int value = default; private int Value => value; [SerializeField] private PublishIntEvent publisher = default; - [ValuePublisher("Value")] - private PublishIntEvent Publisher => publisher ?? (publisher = new PublishIntEvent()); + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishIntEvent()); protected override int Provide() { - Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Int.cs.meta b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Int.cs.meta rename to Assets/Scripts/Connector/ValueProvider/IntProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs b/Assets/Scripts/Connector/ValueProvider/Object.cs deleted file mode 100644 index 7611024..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Object.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class Object : Base - { - [SerializeField] private UnityEngine.Object value = default; - private UnityEngine.Object Value => value; - - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value")] - private PublishObjectEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); - - protected override UnityEngine.Object Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs new file mode 100644 index 0000000..a5a661c --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] + public class ObjectProvider : ProviderBase + { + [SerializeField] private Object value = default; + private Object Value => value; + + [SerializeField] private PublishObjectEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); + + protected override Object Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Object.cs.meta b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Object.cs.meta rename to Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Base.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs similarity index 57% rename from Assets/Scripts/Connector/ValueProvider/Base.cs rename to Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 0778661..0e57088 100644 --- a/Assets/Scripts/Connector/ValueProvider/Base.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -1,15 +1,18 @@ using System; using UniRx; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { - public abstract class Base : ConnectorBase + public abstract class ProviderBase : ConnectorBase { + protected abstract UnityEvent Publisher { get; } + protected abstract TValue Provide(); + public override IObservable OnConnectAsObservable() { + Publisher.Invoke(Provide()); return Observable.ReturnUnit(); } - - protected abstract TValue Provide(); } } diff --git a/Assets/Scripts/Connector/ValueProvider/Base.cs.meta b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Base.cs.meta rename to Assets/Scripts/Connector/ValueProvider/ProviderBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs b/Assets/Scripts/Connector/ValueProvider/Quaternion.cs deleted file mode 100644 index 77cb9aa..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class Quaternion : Base - { - [SerializeField] private UnityEngine.Quaternion value = default; - private UnityEngine.Quaternion Value => value; - - [SerializeField] private PublishQuaternionEvent publisher = default; - [ValuePublisher("Value")] - private PublishQuaternionEvent Publisher => publisher ?? (publisher = new PublishQuaternionEvent()); - - protected override UnityEngine.Quaternion Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs new file mode 100644 index 0000000..15f27b5 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] + public class QuaternionProvider : ProviderBase + { + [SerializeField] private Quaternion value = default; + private Quaternion Value => value; + + [SerializeField] private PublishQuaternionEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishQuaternionEvent()); + + protected override Quaternion Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Quaternion.cs.meta b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Quaternion.cs.meta rename to Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs new file mode 100644 index 0000000..971746e --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +// ReSharper disable ConvertIfStatementToReturnStatement + +namespace UniFlow.Connector.ValueProvider +{ + public abstract class SelectorBase : ProviderBase + { + [SerializeField] private List keys = new List(); + [SerializeField] private List values = new List(); + + private IList Keys => keys; + private IList Values => values; + + [ValueReceiver] public TKey Key { get; set; } + + protected override TValue Provide() + { + if (!Keys.Contains(Key)) + { + return default; + } + + return Values[Keys.IndexOf(Key)]; + } + } + + public abstract class GameObjectSelectorBase : SelectorBase + { + [SerializeField] private PublishGameObjectEvent publisher = new PublishGameObjectEvent(); + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher; + } + + public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum + { + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs.meta new file mode 100644 index 0000000..a9cf42d --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 28f9c1010f764ba3944edd2b6d342b82 +timeCreated: 1569303461 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs similarity index 67% rename from Assets/Scripts/Connector/ValueProvider/String.cs rename to Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 24205bb..ede3748 100644 --- a/Assets/Scripts/Connector/ValueProvider/String.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -1,21 +1,20 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class String : Base + public class StringProvider : ProviderBase { [SerializeField] private string value = default; private string Value => value; [SerializeField] private PublishStringEvent publisher = default; - [ValuePublisher("Value")] - private PublishStringEvent Publisher => publisher ?? (publisher = new PublishStringEvent()); + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishStringEvent()); protected override string Provide() { - Publisher.Invoke(Value); return Value; } } diff --git a/Assets/Scripts/Connector/ValueProvider/String.cs.meta b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/String.cs.meta rename to Assets/Scripts/Connector/ValueProvider/StringProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs b/Assets/Scripts/Connector/ValueProvider/Vector2.cs deleted file mode 100644 index 938b7c1..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Vector2.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2 : Base - { - [SerializeField] private UnityEngine.Vector2 value = default; - private UnityEngine.Vector2 Value => value; - - [SerializeField] private PublishVector2Event publisher = default; - [ValuePublisher("Value")] - private PublishVector2Event Publisher => publisher ?? (publisher = new PublishVector2Event()); - - protected override UnityEngine.Vector2 Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs deleted file mode 100644 index 6b91f9d..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2Int : Base - { - [SerializeField] private UnityEngine.Vector2Int value = default; - private UnityEngine.Vector2Int Value => value; - - [SerializeField] private PublishVector2IntEvent publisher = default; - [ValuePublisher("Value")] - private PublishVector2IntEvent Publisher => publisher ?? (publisher = new PublishVector2IntEvent()); - - protected override UnityEngine.Vector2Int Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs new file mode 100644 index 0000000..c250c55 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] + public class Vector2IntProvider : ProviderBase + { + [SerializeField] private Vector2Int value = default; + private Vector2Int Value => value; + + [SerializeField] private PublishVector2IntEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector2IntEvent()); + + protected override Vector2Int Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Int.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Vector2Int.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs new file mode 100644 index 0000000..e988b9e --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] + public class Vector2Provider : ProviderBase + { + [SerializeField] private Vector2 value = default; + private Vector2 Value => value; + + [SerializeField] private PublishVector2Event publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector2Event()); + + protected override Vector2 Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Vector2.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs b/Assets/Scripts/Connector/ValueProvider/Vector3.cs deleted file mode 100644 index 58c889d..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Vector3.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3 : Base - { - [SerializeField] private UnityEngine.Vector3 value = default; - private UnityEngine.Vector3 Value => value; - - [SerializeField] private PublishVector3Event publisher = default; - [ValuePublisher("Value")] - private PublishVector3Event Publisher => publisher ?? (publisher = new PublishVector3Event()); - - protected override UnityEngine.Vector3 Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs deleted file mode 100644 index 32a8530..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3Int : Base - { - [SerializeField] private UnityEngine.Vector3Int value = default; - private UnityEngine.Vector3Int Value => value; - - [SerializeField] private PublishVector3IntEvent publisher = default; - [ValuePublisher("Value")] - private PublishVector3IntEvent Publisher => publisher ?? (publisher = new PublishVector3IntEvent()); - - protected override UnityEngine.Vector3Int Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs new file mode 100644 index 0000000..a6c341c --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] + public class Vector3IntProvider : ProviderBase + { + [SerializeField] private Vector3Int value = default; + private Vector3Int Value => value; + + [SerializeField] private PublishVector3IntEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector3IntEvent()); + + protected override Vector3Int Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Int.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Vector3Int.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs new file mode 100644 index 0000000..bdaa9b5 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] + public class Vector3Provider : ProviderBase + { + [SerializeField] private Vector3 value = default; + private Vector3 Value => value; + + [SerializeField] private PublishVector3Event publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector3Event()); + + protected override Vector3 Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Vector3.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs b/Assets/Scripts/Connector/ValueProvider/Vector4.cs deleted file mode 100644 index a01ce0b..0000000 --- a/Assets/Scripts/Connector/ValueProvider/Vector4.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UniFlow.Attribute; -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4 : Base - { - [SerializeField] private UnityEngine.Vector4 value = default; - private UnityEngine.Vector4 Value => value; - - [SerializeField] private PublishVector4Event publisher = default; - [ValuePublisher("Value")] - private PublishVector4Event Publisher => publisher ?? (publisher = new PublishVector4Event()); - - protected override UnityEngine.Vector4 Provide() - { - Publisher.Invoke(Value); - return Value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs new file mode 100644 index 0000000..64ab6e4 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] + public class Vector4Provider : ProviderBase + { + [SerializeField] private Vector4 value = default; + private Vector4 Value => value; + + [SerializeField] private PublishVector4Event publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector4Event()); + + protected override Vector4 Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4.cs.meta b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/Vector4.cs.meta rename to Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs.meta From 7c1b934c601a08de4fddc30473951dc6782d9cd5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 16:51:58 +0900 Subject: [PATCH 191/453] :recycle: Omit default parameter --- Assets/Scripts/Attribute/ValuePublisherAttribute.cs | 7 ++++++- Assets/Scripts/Attribute/ValueReceiverAttribute.cs | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs index 4e165b6..e3a9c34 100644 --- a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs +++ b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs @@ -5,9 +5,14 @@ namespace UniFlow.Attribute { [AttributeUsage(AttributeTargets.Property)] [MeansImplicitUse] + [PublicAPI] public class ValuePublisherAttribute : System.Attribute { - public ValuePublisherAttribute(string name = "") + public ValuePublisherAttribute() : this("") + { + } + + public ValuePublisherAttribute(string name) { Name = name; } diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs index 711b9cb..c0aa9f3 100644 --- a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs +++ b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs @@ -5,9 +5,14 @@ namespace UniFlow.Attribute { [AttributeUsage(AttributeTargets.Property)] [MeansImplicitUse] + [PublicAPI] public class ValueReceiverAttribute : System.Attribute { - public ValueReceiverAttribute(string name = "") + public ValueReceiverAttribute() : this("") + { + } + + public ValueReceiverAttribute(string name) { Name = name; } From df023e21b333cc55730e1b8db69f2ac7b1eb932b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 16:52:34 +0900 Subject: [PATCH 192/453] :wrench: Tweak GraphView --- Assets/Editor/Scripts/ConnectorInfo.cs | 24 ++++++++++++++++--- Assets/Editor/Scripts/SearchWindowProvider.cs | 2 ++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index 5a5e994..c769d7e 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -90,11 +90,11 @@ public static ConnectorInfo Create(Type type, IConnector instance) type.GetFieldsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() == null) .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), - type.GetPropertiesRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) .Where(x => x.GetCustomAttribute() != null) .Select(x => ValuePublisherInfo.Create(x, instance)), - type.GetPropertiesRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => x.GetCustomAttribute() != null) .Select(x => ValueReceiverInfo.Create(x, instance)) ); @@ -138,7 +138,7 @@ private ValuePublisherInfo(PropertyInfo propertyInfo, object instance) { var attribute = propertyInfo.GetCustomAttribute(); Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; - Type = propertyInfo.PropertyType.BaseType?.GetGenericArguments().First(); + Type = GetGenericType(propertyInfo.PropertyType); Instance = instance; PropertyInfo = propertyInfo; } @@ -152,6 +152,24 @@ public static ValuePublisherInfo Create(PropertyInfo propertyInfo, object instan { return new ValuePublisherInfo(propertyInfo, instance); } + + private static Type GetGenericType(Type type) + { + while (true) + { + if (type == default) + { + return default; + } + + if (type.IsGenericType) + { + return type.GetGenericArguments().First(); + } + + type = type.BaseType; + } + } } public class ValueReceiverInfo diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index c8471c4..f68476c 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -25,6 +25,8 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "Event", "ValueProvider", "ValueComparer", + "ValueExtractor", + "ValueCombiner", "Logic", "Receiver", "Misc", From 530d183daf6603d16f5973193be34d4d5a1c7159 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 17:21:40 +0900 Subject: [PATCH 193/453] :sparkles: Implement ByteProvider --- Assets/Editor/Scripts/FlowNode.cs | 25 ++++++++++--------- .../Connector/ValueProvider/ByteProvider.cs | 21 ++++++++++++++++ .../ValueProvider/ByteProvider.cs.meta | 3 +++ Assets/Scripts/ConnectorType.cs | 2 ++ Assets/Scripts/PublishValueEvent.cs | 5 ++++ 5 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 Assets/Scripts/Connector/ValueProvider/ByteProvider.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ByteProvider.cs.meta diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 5a6d256..6a27751 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -89,6 +89,19 @@ public void Initialize() {typeof(Object), CreateBindableElement}, }; + private static IList PropertyFieldRenderableTypes { get; } = new List + { + typeof(byte), + typeof(Vector2), + typeof(Vector3), + typeof(Vector4), + typeof(Quaternion), + typeof(Vector2Int), + typeof(Vector3Int), + typeof(Color), + typeof(Color32), + }; + void IRemovableElement.RemoveFromGraphView() { if (ConnectorInfo.Connector == default || !(ConnectorInfo.Connector is Component component)) @@ -266,18 +279,6 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI return CreateFieldFunctions[fieldType](connectorInfo, parameter); } - private static IList PropertyFieldRenderableTypes { get; } = new List - { - typeof(Vector2), - typeof(Vector3), - typeof(Vector4), - typeof(Quaternion), - typeof(Vector2Int), - typeof(Vector3Int), - typeof(Color), - typeof(Color32), - }; - private static BindableElement CreateBindableElement(ConnectorInfo connectorInfo, ConnectorInfo.Parameter parameter) where TResult : BaseField, new() { var field = new TResult diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs new file mode 100644 index 0000000..6243d45 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] + public class ByteProvider : ProviderBase + { + [SerializeField] private byte value = default; + private byte Value => value; + + [SerializeField] private PublishByteEvent publisher = default; + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishByteEvent()); + + protected override byte Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs.meta b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs.meta new file mode 100644 index 0000000..c2d07f3 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 375058f27f4b4eeeac51d96af5188ec6 +timeCreated: 1569917721 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index ed7c251..9b3b1ca 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -41,6 +41,7 @@ public enum ConnectorType ValueProvider = 1000, ValueProviderBool, + ValueProviderByte, ValueProviderInt, ValueProviderFloat, ValueProviderString, @@ -59,6 +60,7 @@ public enum ConnectorType ValueProviderColor32, ValueComparerBool = 2000, + ValueComparerByte, ValueComparerInt, ValueComparerFloat, ValueComparerString, diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs index cd73486..fd29d06 100644 --- a/Assets/Scripts/PublishValueEvent.cs +++ b/Assets/Scripts/PublishValueEvent.cs @@ -10,6 +10,11 @@ public class PublishBoolEvent : UnityEvent { } + [Serializable] + public class PublishByteEvent : UnityEvent + { + } + [Serializable] public class PublishIntEvent : UnityEvent { From e86bcad8cf4bc07a4ad0a1c2491281552be54bca Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 17:22:50 +0900 Subject: [PATCH 194/453] :fire: Remove unused types --- Assets/Scripts/StructObject.cs | 65 ----------------------- Assets/Scripts/StructObject.cs.meta | 3 -- Assets/Scripts/ValueInjectionType.cs | 26 --------- Assets/Scripts/ValueInjectionType.cs.meta | 3 -- 4 files changed, 97 deletions(-) delete mode 100644 Assets/Scripts/StructObject.cs delete mode 100644 Assets/Scripts/StructObject.cs.meta delete mode 100644 Assets/Scripts/ValueInjectionType.cs delete mode 100644 Assets/Scripts/ValueInjectionType.cs.meta diff --git a/Assets/Scripts/StructObject.cs b/Assets/Scripts/StructObject.cs deleted file mode 100644 index 83c3663..0000000 --- a/Assets/Scripts/StructObject.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using UnityEngine; - -namespace UniFlow -{ - [Serializable] - public abstract class StructObject : ScriptableObject where T : struct - { - [SerializeField] private T value = default; - - public T Value - { - get => value; - set => this.value = value; - } - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector2", fileName = "Vector2Object", order = (int) ValueInjectionType.Vector2)] - public class Vector2Object : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector3", fileName = "Vector3Object", order = (int) ValueInjectionType.Vector3)] - public class Vector3Object : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector4", fileName = "Vector4Object", order = (int) ValueInjectionType.Vector4)] - public class Vector4Object : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Quaternion", fileName = "QuaternionObject", order = (int) ValueInjectionType.Quaternion)] - public class QuaternionObject : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector2Int", fileName = "Vector2IntObject", order = (int) ValueInjectionType.Vector2Int)] - public class Vector2IntObject : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Vector3Int", fileName = "Vector3IntObject", order = (int) ValueInjectionType.Vector3Int)] - public class Vector3IntObject : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Color", fileName = "ColorObject", order = (int) ValueInjectionType.Color)] - public class ColorObject : StructObject - { - } - - [Serializable] - [CreateAssetMenu(menuName = "UniFlow/StructObject/Color32", fileName = "Color32Object", order = (int) ValueInjectionType.Color32)] - public class Color32Object : StructObject - { - } -} diff --git a/Assets/Scripts/StructObject.cs.meta b/Assets/Scripts/StructObject.cs.meta deleted file mode 100644 index 0a92f9c..0000000 --- a/Assets/Scripts/StructObject.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1f3fb379b2344c4bbcf255134d676047 -timeCreated: 1569823587 \ No newline at end of file diff --git a/Assets/Scripts/ValueInjectionType.cs b/Assets/Scripts/ValueInjectionType.cs deleted file mode 100644 index ddb3383..0000000 --- a/Assets/Scripts/ValueInjectionType.cs +++ /dev/null @@ -1,26 +0,0 @@ -using JetBrains.Annotations; - -namespace UniFlow -{ - [PublicAPI] - public enum ValueInjectionType - { - Bool, - Int, - Float, - String, - Enum, - Object, - GameObject, - Transform, - RectTransform, - Vector2, - Vector3, - Vector4, - Quaternion, - Vector2Int, - Vector3Int, - Color, - Color32, - } -} diff --git a/Assets/Scripts/ValueInjectionType.cs.meta b/Assets/Scripts/ValueInjectionType.cs.meta deleted file mode 100644 index 1e58056..0000000 --- a/Assets/Scripts/ValueInjectionType.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 863bfd7492954f2fae78a0a6aef429f9 -timeCreated: 1569820671 \ No newline at end of file From fdeddef3a5793274b0efa5cfdba9a811ef5c542e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 17:52:06 +0900 Subject: [PATCH 195/453] :sparkles: Implement ValueCombiners and ValueExtractors --- Assets/Scripts/Connector/ValueCombiner.meta | 3 ++ .../ValueCombiner/Color32Combiner.cs | 26 +++++++++++++++ .../ValueCombiner/Color32Combiner.cs.meta | 3 ++ .../Connector/ValueCombiner/ColorCombiner.cs | 26 +++++++++++++++ .../ValueCombiner/ColorCombiner.cs.meta | 3 ++ .../ValueCombiner/QuaternionCombiner.cs | 26 +++++++++++++++ .../ValueCombiner/QuaternionCombiner.cs.meta | 3 ++ .../ValueCombiner/QuaternionEulerCombiner.cs | 23 +++++++++++++ .../QuaternionEulerCombiner.cs.meta | 3 ++ .../ValueCombiner/Vector2Combiner.cs | 24 ++++++++++++++ .../ValueCombiner/Vector2Combiner.cs.meta | 3 ++ .../ValueCombiner/Vector2IntCombiner.cs | 24 ++++++++++++++ .../ValueCombiner/Vector2IntCombiner.cs.meta | 3 ++ .../ValueCombiner/Vector3Combiner.cs | 25 +++++++++++++++ .../ValueCombiner/Vector3Combiner.cs.meta | 3 ++ .../ValueCombiner/Vector3IntCombiner.cs | 25 +++++++++++++++ .../ValueCombiner/Vector3IntCombiner.cs.meta | 3 ++ .../ValueCombiner/Vector4Combiner.cs | 26 +++++++++++++++ .../ValueCombiner/Vector4Combiner.cs.meta | 3 ++ Assets/Scripts/Connector/ValueExtractor.meta | 3 ++ .../ValueExtractor/Color32Extractor.cs | 32 +++++++++++++++++++ .../ValueExtractor/Color32Extractor.cs.meta | 3 ++ .../ValueExtractor/ColorExtractor.cs | 32 +++++++++++++++++++ .../ValueExtractor/ColorExtractor.cs.meta | 3 ++ .../QuaternionEulerExtractor.cs | 23 +++++++++++++ .../QuaternionEulerExtractor.cs.meta | 3 ++ .../ValueExtractor/QuaternionExtractor.cs | 32 +++++++++++++++++++ .../QuaternionExtractor.cs.meta | 3 ++ .../ValueExtractor/Vector2Extractor.cs | 26 +++++++++++++++ .../ValueExtractor/Vector2Extractor.cs.meta | 3 ++ .../ValueExtractor/Vector2IntExtractor.cs | 26 +++++++++++++++ .../Vector2IntExtractor.cs.meta | 3 ++ .../ValueExtractor/Vector3Extractor.cs | 29 +++++++++++++++++ .../ValueExtractor/Vector3Extractor.cs.meta | 3 ++ .../ValueExtractor/Vector3IntExtractor.cs | 29 +++++++++++++++++ .../Vector3IntExtractor.cs.meta | 3 ++ .../ValueExtractor/Vector4Extractor.cs | 32 +++++++++++++++++++ .../ValueExtractor/Vector4Extractor.cs.meta | 3 ++ 38 files changed, 546 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueCombiner.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs create mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta diff --git a/Assets/Scripts/Connector/ValueCombiner.meta b/Assets/Scripts/Connector/ValueCombiner.meta new file mode 100644 index 0000000..9b6adfe --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 54ea261738a14c32abe9604de908260f +timeCreated: 1569915732 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs new file mode 100644 index 0000000..e51f575 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Color32", (int) ConnectorType.ValueCombinerColor32)] + public class Color32Combiner : ConnectorBase + { + [SerializeField] private PublishColor32Event publisher = new PublishColor32Event(); + + [ValueReceiver] private byte R { get; set; } + [ValueReceiver] private byte G { get; set; } + [ValueReceiver] private byte B { get; set; } + [ValueReceiver] private byte A { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Color32(R, G, B, A)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta new file mode 100644 index 0000000..7643de3 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 01df211e80774cb8aa65cde25b6ae7c5 +timeCreated: 1569918618 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs new file mode 100644 index 0000000..383f109 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Color", (int) ConnectorType.ValueCombinerColor)] + public class ColorCombiner : ConnectorBase + { + [SerializeField] private PublishColorEvent publisher = new PublishColorEvent(); + + [ValueReceiver] private float R { get; set; } + [ValueReceiver] private float G { get; set; } + [ValueReceiver] private float B { get; set; } + [ValueReceiver] private float A { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Color(R, G, B, A)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta new file mode 100644 index 0000000..fe8dd01 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 89392bb02eb64cea99493e4015d03b1b +timeCreated: 1569918612 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs new file mode 100644 index 0000000..c09753a --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Quaternion", (int) ConnectorType.ValueCombinerQuaternion)] + public class QuaternionCombiner : ConnectorBase + { + [SerializeField] private PublishQuaternionEvent publisher = new PublishQuaternionEvent(); + + [ValueReceiver] private float X { get; set; } + [ValueReceiver] private float Y { get; set; } + [ValueReceiver] private float Z { get; set; } + [ValueReceiver] private float W { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Quaternion(X, Y, Z, W)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta new file mode 100644 index 0000000..4fed708 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 76499196f08e41d1ad7c10ddb6edc80b +timeCreated: 1569918586 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs new file mode 100644 index 0000000..fc8ac77 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs @@ -0,0 +1,23 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/QuaternionEuler", (int) ConnectorType.ValueCombinerQuaternionEuler)] + public class QuaternionEulerCombiner : ConnectorBase + { + [SerializeField] private PublishQuaternionEvent publisher = new PublishQuaternionEvent(); + + [ValueReceiver] private Vector3 EulerAngle { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(Quaternion.Euler(EulerAngle)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta new file mode 100644 index 0000000..cabf524 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6d47f51814764a8fbaa2471b92125b5a +timeCreated: 1569919610 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs new file mode 100644 index 0000000..38f58a3 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs @@ -0,0 +1,24 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Vector2", (int) ConnectorType.ValueCombinerVector2)] + public class Vector2Combiner : ConnectorBase + { + [SerializeField] private PublishVector2Event publisher = new PublishVector2Event(); + + [ValueReceiver] private float X { get; set; } + [ValueReceiver] private float Y { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Vector2(X, Y)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta new file mode 100644 index 0000000..2a39c22 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1e5ec100c08845c2a00da28f84fabfd2 +timeCreated: 1569915732 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs new file mode 100644 index 0000000..38a6164 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs @@ -0,0 +1,24 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Vector2Int", (int) ConnectorType.ValueCombinerVector2Int)] + public class Vector2IntCombiner : ConnectorBase + { + [SerializeField] private PublishVector2IntEvent publisher = new PublishVector2IntEvent(); + + [ValueReceiver] private int X { get; set; } + [ValueReceiver] private int Y { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Vector2Int(X, Y)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta new file mode 100644 index 0000000..13d6c09 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5ccafc14bc2e4c809d19b60fa851792e +timeCreated: 1569918596 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs new file mode 100644 index 0000000..67aae7b --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs @@ -0,0 +1,25 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Vector3", (int) ConnectorType.ValueCombinerVector3)] + public class Vector3Combiner : ConnectorBase + { + [SerializeField] private PublishVector3Event publisher = new PublishVector3Event(); + + [ValueReceiver] private float X { get; set; } + [ValueReceiver] private float Y { get; set; } + [ValueReceiver] private float Z { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Vector3(X, Y, Z)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta new file mode 100644 index 0000000..047883a --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6befd9a49a6f4cc9bd51ae65cfc70618 +timeCreated: 1569918569 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs new file mode 100644 index 0000000..be43666 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs @@ -0,0 +1,25 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Vector3Int", (int) ConnectorType.ValueCombinerVector3Int)] + public class Vector3IntCombiner : ConnectorBase + { + [SerializeField] private PublishVector3IntEvent publisher = new PublishVector3IntEvent(); + + [ValueReceiver] private int X { get; set; } + [ValueReceiver] private int Y { get; set; } + [ValueReceiver] private int Z { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Vector3Int(X, Y, Z)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta new file mode 100644 index 0000000..6e1d823 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 517bc72366ed4e399c97635af76f31a6 +timeCreated: 1569918606 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs new file mode 100644 index 0000000..ce6ca6e --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueCombiner +{ + [AddComponentMenu("UniFlow/ValueCombiner/Vector4", (int) ConnectorType.ValueCombinerVector4)] + public class Vector4Combiner : ConnectorBase + { + [SerializeField] private PublishVector4Event publisher = new PublishVector4Event(); + + [ValueReceiver] private float X { get; set; } + [ValueReceiver] private float Y { get; set; } + [ValueReceiver] private float Z { get; set; } + [ValueReceiver] private float W { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(new Vector4(X, Y, Z, W)); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta new file mode 100644 index 0000000..c5aa9f1 --- /dev/null +++ b/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ae69d84d6bad4e039a404e7fb03c49b2 +timeCreated: 1569918576 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor.meta b/Assets/Scripts/Connector/ValueExtractor.meta new file mode 100644 index 0000000..879d106 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 774fc1f7bb98415fa064b42a2a2f2fe2 +timeCreated: 1569914931 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs new file mode 100644 index 0000000..6fc88ed --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs @@ -0,0 +1,32 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Color32", (int) ConnectorType.ValueExtractorColor32)] + public class Color32Extractor : ConnectorBase + { + [SerializeField] private PublishByteEvent publisherR = new PublishByteEvent(); + [SerializeField] private PublishByteEvent publisherG = new PublishByteEvent(); + [SerializeField] private PublishByteEvent publisherB = new PublishByteEvent(); + [SerializeField] private PublishByteEvent publisherA = new PublishByteEvent(); + + [ValueReceiver] private Color32 Value { get; set; } + [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; + [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; + [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; + [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; + + public override IObservable OnConnectAsObservable() + { + PublisherR.Invoke(Value.r); + PublisherG.Invoke(Value.g); + PublisherB.Invoke(Value.b); + PublisherA.Invoke(Value.a); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta new file mode 100644 index 0000000..ade1593 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 34e5d4ae341845e8888fa11bfc6bb1bb +timeCreated: 1569916736 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs new file mode 100644 index 0000000..572e195 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs @@ -0,0 +1,32 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Color", (int) ConnectorType.ValueExtractorColor)] + public class ColorExtractor : ConnectorBase + { + [SerializeField] private PublishFloatEvent publisherR = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherG = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherB = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherA = new PublishFloatEvent(); + + [ValueReceiver] private Color Value { get; set; } + [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; + [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; + [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; + [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; + + public override IObservable OnConnectAsObservable() + { + PublisherR.Invoke(Value.r); + PublisherG.Invoke(Value.g); + PublisherB.Invoke(Value.b); + PublisherA.Invoke(Value.a); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta new file mode 100644 index 0000000..4d85d18 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 53b666c3374a4e06a33afe6f4125215c +timeCreated: 1569916729 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs new file mode 100644 index 0000000..2c29c69 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs @@ -0,0 +1,23 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/QuaternionEuler", (int) ConnectorType.ValueExtractorQuaternionEuler)] + public class QuaternionEulerExtractor : ConnectorBase + { + [SerializeField] private PublishVector3Event publisher = new PublishVector3Event(); + + [ValueReceiver] private Quaternion Value { get; set; } + [ValuePublisher("Value")] private UnityEvent Publisher => publisher; + + public override IObservable OnConnectAsObservable() + { + Publisher.Invoke(Value.eulerAngles); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta new file mode 100644 index 0000000..d06f3bb --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 936d6ca551414bc5ae5946295e1f355e +timeCreated: 1569919451 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs new file mode 100644 index 0000000..9810526 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs @@ -0,0 +1,32 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Quaternion", (int) ConnectorType.ValueExtractorQuaternion)] + public class QuaternionExtractor : ConnectorBase + { + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); + + [ValueReceiver] private Quaternion Value { get; set; } + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; + + public override IObservable OnConnectAsObservable() + { + PublisherX.Invoke(Value.x); + PublisherY.Invoke(Value.y); + PublisherZ.Invoke(Value.z); + PublisherW.Invoke(Value.w); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta new file mode 100644 index 0000000..6365094 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d94b827e5a7d4e3a9b8038dc6b424362 +timeCreated: 1569916708 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs new file mode 100644 index 0000000..b5574d1 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Vector2", (int) ConnectorType.ValueExtractorVector2)] + public class Vector2Extractor : ConnectorBase + { + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + + [ValueReceiver] private Vector2 Value { get; set; } + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + + public override IObservable OnConnectAsObservable() + { + PublisherX.Invoke(Value.x); + PublisherY.Invoke(Value.y); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta new file mode 100644 index 0000000..9244f28 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 62fa429893bd425091b03bf178c95772 +timeCreated: 1569914931 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs new file mode 100644 index 0000000..7e559b1 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Vector2Int", (int) ConnectorType.ValueExtractorVector2Int)] + public class Vector2IntExtractor : ConnectorBase + { + [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); + [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); + + [ValueReceiver] private Vector2Int Value { get; set; } + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + + public override IObservable OnConnectAsObservable() + { + PublisherX.Invoke(Value.x); + PublisherY.Invoke(Value.y); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta new file mode 100644 index 0000000..dbc6bcb --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 20001bb75a8a4cc0a50f9abb69f93c45 +timeCreated: 1569916715 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs new file mode 100644 index 0000000..aaf16d6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs @@ -0,0 +1,29 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Vector3", (int) ConnectorType.ValueExtractorVector3)] + public class Vector3Extractor : ConnectorBase + { + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + + [ValueReceiver] private Vector3 Value { get; set; } + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + + public override IObservable OnConnectAsObservable() + { + PublisherX.Invoke(Value.x); + PublisherY.Invoke(Value.y); + PublisherZ.Invoke(Value.z); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta new file mode 100644 index 0000000..2e09f3d --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 86ae920c34364b51bfd53e522350cf2e +timeCreated: 1569916686 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs new file mode 100644 index 0000000..902cd59 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs @@ -0,0 +1,29 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Vector3Int", (int) ConnectorType.ValueExtractorVector3Int)] + public class Vector3IntExtractor : ConnectorBase + { + [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); + [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); + [SerializeField] private PublishIntEvent publisherZ = new PublishIntEvent(); + + [ValueReceiver] private Vector3Int Value { get; set; } + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + + public override IObservable OnConnectAsObservable() + { + PublisherX.Invoke(Value.x); + PublisherY.Invoke(Value.y); + PublisherZ.Invoke(Value.z); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta new file mode 100644 index 0000000..c2b1353 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 544583cd2af2484aa4f48501b7ec32c5 +timeCreated: 1569916724 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs new file mode 100644 index 0000000..688e065 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs @@ -0,0 +1,32 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueExtractor +{ + [AddComponentMenu("UniFlow/ValueExtractor/Vector4", (int) ConnectorType.ValueExtractorVector4)] + public class Vector4Extractor : ConnectorBase + { + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); + + [ValueReceiver] private Vector4 Value { get; set; } + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; + + public override IObservable OnConnectAsObservable() + { + PublisherX.Invoke(Value.x); + PublisherY.Invoke(Value.y); + PublisherZ.Invoke(Value.z); + PublisherW.Invoke(Value.w); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta new file mode 100644 index 0000000..f6d880b --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 92521c42265444b3baf2c5c74030097f +timeCreated: 1569916697 \ No newline at end of file From 34b4faaacb9119d96e45d50989a0ad113c707d99 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 17:52:20 +0900 Subject: [PATCH 196/453] :sparkles: Add ConnectorTypes --- Assets/Scripts/ConnectorType.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 9b3b1ca..9d2c2b2 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -78,6 +78,26 @@ public enum ConnectorType ValueComparerColor, ValueComparerColor32, + ValueExtractorVector2 = 3000, + ValueExtractorVector3, + ValueExtractorVector4, + ValueExtractorQuaternion, + ValueExtractorQuaternionEuler, + ValueExtractorVector2Int, + ValueExtractorVector3Int, + ValueExtractorColor, + ValueExtractorColor32, + + ValueCombinerVector2 = 4000, + ValueCombinerVector3, + ValueCombinerVector4, + ValueCombinerQuaternion, + ValueCombinerQuaternionEuler, + ValueCombinerVector2Int, + ValueCombinerVector3Int, + ValueCombinerColor, + ValueCombinerColor32, + Timer = 9000, Interval, TimeScaleController, From 5fa8973b76c6918888d41573211e45db5e6c5af0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 19:48:43 +0900 Subject: [PATCH 197/453] :sparkles: Accept published instance that can downcast --- Assets/Editor/Scripts/FlowGraphView.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index b2988f3..5f61038 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -325,7 +325,7 @@ public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAd .Where( x => x is FlowValueReceivePort flowValueReceivePort - && startFlowValuePublishPort.ValuePublisherInfo.Type == flowValueReceivePort.ValueReceiverInfo.Type + && flowValueReceivePort.ValueReceiverInfo.Type.IsAssignableFrom(startFlowValuePublishPort.ValuePublisherInfo.Type) && x.direction != startPort.direction && x.node != startPort.node ) @@ -339,7 +339,7 @@ x is FlowValueReceivePort flowValueReceivePort .Where( x => x is FlowValuePublishPort flowValuePublishPort - && startFlowValueReceivePort.ValueReceiverInfo.Type == flowValuePublishPort.ValuePublisherInfo.Type + && startFlowValueReceivePort.ValueReceiverInfo.Type.IsAssignableFrom(flowValuePublishPort.ValuePublisherInfo.Type) && x.direction != startPort.direction && x.node != startPort.node ) From fbd01f876460b36ec14eb954cc76e98ac6b700d3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 19:55:48 +0900 Subject: [PATCH 198/453] :clipboard: Upgrade Unity 2019.2.7f2 --- ProjectSettings/ProjectVersion.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 2146a1e..2b1ab8e 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.6f1 -m_EditorVersionWithRevision: 2019.2.6f1 (fe82a0e88406) +m_EditorVersion: 2019.2.7f2 +m_EditorVersionWithRevision: 2019.2.7f2 (c96f78eb5904) From 5e6ae2e72771819047c164e5ca2fdac98deddbc9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 21:23:12 +0900 Subject: [PATCH 199/453] :fire: Remove unnecessary process --- Assets/Editor/Scripts/ValueInjectionConnectorListener.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs index 71bad59..aa4cd70 100644 --- a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs +++ b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs @@ -71,10 +71,6 @@ void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) { AddPersistentListenerCallbackMap[publishPort.ValuePublisherInfo.Type].Invoke(unityEvent, unityAction); } - else if (publishPort.ValuePublisherInfo.Type.IsEnum) - { - AddPersistentListenerCallbackMap[typeof(int)].Invoke(unityEvent, unityAction); - } else { // unityEvent.AddPersistentListener() From f86b02f478092abbedbdef80dca53b243f1b7ae1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 21:23:43 +0900 Subject: [PATCH 200/453] :sparkles: Add classes that inherits UnityEvent --- Assets/Scripts/PublishValueEvent.cs | 108 ++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs index fd29d06..0940aaa 100644 --- a/Assets/Scripts/PublishValueEvent.cs +++ b/Assets/Scripts/PublishValueEvent.cs @@ -1,10 +1,16 @@ using System; +using UniRx; using UnityEngine; using UnityEngine.Events; +using UnityEngine.EventSystems; +using UnityEngine.Playables; +using UnityEngine.Timeline; using Object = UnityEngine.Object; namespace UniFlow { + #region primitives + [Serializable] public class PublishBoolEvent : UnityEvent { @@ -30,6 +36,10 @@ public class PublishStringEvent : UnityEvent { } + #endregion + + #region UnityEngine.Object + [Serializable] public class PublishObjectEvent : UnityEvent { @@ -40,6 +50,49 @@ public class PublishGameObjectEvent : UnityEvent { } + [Serializable] + public class PublishScriptableObjectEvent : UnityEvent + { + } + + #endregion + + #region assets + + [Serializable] + public class PublishAnimationClipEvent : UnityEvent + { + } + + [Serializable] + public class PublishAudioClipEvent : UnityEvent + { + } + + [Serializable] + public class PublishTimelineAssetEvent : UnityEvent + { + } + + #endregion + + #region components + + [Serializable] + public class PublishComponentEvent : UnityEvent + { + } + + [Serializable] + public class PublishMonoBehaviourEvent : UnityEvent + { + } + + [Serializable] + public class PublishUIBehaviourEvent : UnityEvent + { + } + [Serializable] public class PublishTransformEvent : UnityEvent { @@ -50,6 +103,30 @@ public class PublishRectTransformEvent : UnityEvent { } + [Serializable] + public class PublishAnimatorEvent : UnityEvent + { + } + + [Serializable] + public class PublishSimpleAnimationEvent : UnityEvent + { + } + + [Serializable] + public class PublishAudioSourceEvent : UnityEvent + { + } + + [Serializable] + public class PublishPlayableDirectorEvent : UnityEvent + { + } + + #endregion + + #region structs + [Serializable] public class PublishVector2Event : UnityEvent { @@ -89,4 +166,35 @@ public class PublishColorEvent : UnityEvent public class PublishColor32Event : UnityEvent { } + + #endregion + + #region classes + + [Serializable] + public class PublishAnimationEventEvent : UnityEvent + { + } + + #endregion + + #region enums + // If you can register a method that casts from int to enum, this region is unnecessary. + + [Serializable] + public class PublishAnimatorCullingModeEvent : UnityEvent + { + } + + [Serializable] + public class PublishAnimatorUpdateModeEvent : UnityEvent + { + } + + [Serializable] + public class PublishObservableTweenEaseTypeEvent : UnityEvent + { + } + + #endregion } From 5e564cab25bd25b474e2046dbae4d6f685f93777 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 21:24:06 +0900 Subject: [PATCH 201/453] :sparkles: Use ValueReceiver for properties * Remove unnecessary CompositeDisposable --- .../Controller/ActivationController.cs | 12 +++------ .../Connector/Controller/AnimatorTrigger.cs | 13 +++------ .../Connector/Controller/AudioController.cs | 12 +++------ .../Connector/Controller/DestroyInstance.cs | 7 ----- .../Connector/Controller/InstantiateObject.cs | 27 ++++--------------- .../Controller/MoveParentTransform.cs | 18 +++---------- .../Controller/PlayableController.cs | 13 +++------ .../Controller/SimpleAnimationController.cs | 10 +++---- .../Controller/TimeScaleController.cs | 11 ++++---- .../Scripts/Connector/Event/AnimationEvent.cs | 16 +++++++---- Assets/Scripts/Connector/Event/AudioEvent.cs | 5 ++-- Assets/Scripts/Connector/Event/CameraEvent.cs | 3 ++- .../Scripts/Connector/Event/LifecycleEvent.cs | 3 ++- Assets/Scripts/Connector/Event/MouseEvent.cs | 3 ++- .../Scripts/Connector/Event/ParticleEvent.cs | 3 ++- .../Event/PhysicsCollision2DEvent.cs | 3 ++- .../Connector/Event/PhysicsCollisionEvent.cs | 3 ++- .../Connector/Event/PhysicsTrigger2DEvent.cs | 3 ++- .../Connector/Event/PhysicsTriggerEvent.cs | 3 ++- .../Connector/Event/RectTransformEvent.cs | 3 ++- .../Connector/Event/SimpleAnimationEvent.cs | 7 ++--- .../Scripts/Connector/Event/TimelineEvent.cs | 5 ++-- .../Scripts/Connector/Event/TransformEvent.cs | 3 ++- .../Event/UIBehaviourEventTrigger.cs | 7 ++--- 24 files changed, 76 insertions(+), 117 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 4ba4df9..88c2d9a 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -25,19 +26,17 @@ [UsedImplicitly] public IEnumerable MonoBehaviours get => targetMonoBehaviours; set => targetMonoBehaviours = value.ToList(); } - [UsedImplicitly] public bool ControlSelfInstance + [ValueReceiver] public bool ControlSelfInstance { get => controlSelfInstance; set => controlSelfInstance = value; } - [UsedImplicitly] public bool Activated + [ValueReceiver] public bool Activated { get => activated; set => activated = value; } - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); @@ -57,10 +56,5 @@ public override IObservable OnConnectAsObservable() return Observable.ReturnUnit(); } - - private void OnDestroy() - { - Disposable.Dispose(); - } } } diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 4d162cc..9a457bd 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -1,5 +1,5 @@ using System; -using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -13,12 +13,12 @@ public class AnimatorTrigger : ConnectorBase private Animator animator = default; [SerializeField] private string triggerName = default; - [UsedImplicitly] public Animator Animator + [ValueReceiver] public Animator Animator { get => animator ? animator : animator = GetComponent(); set => animator = value; } - [UsedImplicitly] public string TriggerName + [ValueReceiver] public string TriggerName { get => triggerName; set => triggerName = value; @@ -26,17 +26,10 @@ [UsedImplicitly] public string TriggerName private int TriggerId => Animator.StringToHash(TriggerName); - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { Animator.SetTrigger(TriggerId); return Observable.ReturnUnit(); } - - private void OnDestroy() - { - Disposable.Dispose(); - } } } diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 7c033e0..684553a 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -19,12 +20,12 @@ [UsedImplicitly] public AudioControlMethod AudioControlMethod get => audioControlMethod; set => audioControlMethod = value; } - [UsedImplicitly] public AudioClip AudioClip + [ValueReceiver] public AudioClip AudioClip { get => audioClip; set => audioClip = value; } - [UsedImplicitly] public AudioSource AudioSource + [ValueReceiver] public AudioSource AudioSource { get => audioSource != default @@ -36,8 +37,6 @@ [UsedImplicitly] public AudioSource AudioSource set => audioSource = value; } - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { InvokeAudioSourceMethod(); @@ -69,11 +68,6 @@ private void InvokeAudioSourceMethod() throw new ArgumentOutOfRangeException(); } } - - private void OnDestroy() - { - Disposable.Dispose(); - } } public enum AudioControlMethod diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs index 31d795e..7d8e6ac 100644 --- a/Assets/Scripts/Connector/Controller/DestroyInstance.cs +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -25,18 +25,11 @@ [UsedImplicitly] public IEnumerable GameObjects set => targetGameObjects = value.ToList(); } - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { var targets = Components.Concat(GameObjects).ToList(); targets.ToList().ForEach(Destroy); return Observable.ReturnUnit(); } - - private void OnDestroy() - { - Disposable.Dispose(); - } } } diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateObject.cs index 9b9be2e..64cc10d 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateObject.cs @@ -1,5 +1,4 @@ using System; -using JetBrains.Annotations; using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -14,41 +13,25 @@ public class InstantiateObject : ConnectorBase [SerializeField] private Transform parent = default; - [SerializeField] private PublishObjectEvent publishInstantiatedGameObject = default; - [ValuePublisher("Instantiated")] - private PublishObjectEvent PublishInstantiatedGameObject => publishInstantiatedGameObject ?? (publishInstantiatedGameObject = new PublishObjectEvent()); + [SerializeField] private PublishObjectEvent publisher = new PublishObjectEvent(); + [ValuePublisher("Instantiated")] private PublishObjectEvent Publisher => publisher; - [SerializeField] private PublishVector2Event publishVector2 = default; - [ValuePublisher] - private PublishVector2Event PublishVector2 => publishVector2 ?? (publishVector2 = new PublishVector2Event()); - - [SerializeField] private PublishIntEvent publishInt = default; - [ValuePublisher] - private PublishIntEvent PublishInt => publishInt ?? (publishInt = new PublishIntEvent()); - - [UsedImplicitly] public Object Source + [ValueReceiver] public Object Source { get => source == default ? gameObject : source; set => source = value; } - [UsedImplicitly] public Transform Parent + [ValueReceiver] public Transform Parent { get => parent == default ? transform : parent; set => parent = value; } - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { var go = Instantiate(Source, Parent); - PublishInstantiatedGameObject.Invoke(go as GameObject); + Publisher.Invoke(go); return Observable.ReturnUnit(); } - - private void OnDestroy() - { - Disposable.Dispose(); - } } } diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 4e06c8f..f92bfe3 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,5 +1,4 @@ using System; -using JetBrains.Annotations; using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -14,39 +13,28 @@ public class MoveParentTransform : ConnectorBase [SerializeField] private Transform parentTransform = default; [SerializeField] private bool worldPositionStays = true; - [UsedImplicitly] - [ValueReceiver] - public Transform TargetTransform + [ValueReceiver] public Transform TargetTransform { get => targetTransform != default ? targetTransform : targetTransform = transform; set => targetTransform = value; } - [UsedImplicitly] - [ValueReceiver] - public Transform ParentTransform + [ValueReceiver] public Transform ParentTransform { get => parentTransform; set => parentTransform = value; } - [UsedImplicitly] public bool WorldPositionStays + [ValueReceiver] public bool WorldPositionStays { get => worldPositionStays; set => worldPositionStays = value; } - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { TargetTransform.SetParent(ParentTransform, WorldPositionStays); return Observable.ReturnUnit(); } - - private void OnDestroy() - { - Disposable.Dispose(); - } } } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index c67f438..e9c7048 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; using UnityEngine.Playables; @@ -19,12 +20,12 @@ [UsedImplicitly] public PlayableControlMethod PlayableControlMethod get => playableControlMethod; set => playableControlMethod = value; } - [UsedImplicitly] public TimelineAsset TimelineAsset + [ValueReceiver] public TimelineAsset TimelineAsset { get => timelineAsset; set => timelineAsset = value; } - [UsedImplicitly] public PlayableDirector PlayableDirector + [ValueReceiver] public PlayableDirector PlayableDirector { get => playableDirector != default @@ -33,12 +34,9 @@ [UsedImplicitly] public PlayableDirector PlayableDirector GetComponent() != default ? GetComponent() : gameObject.AddComponent(); - [UsedImplicitly] set => playableDirector = value; } - private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() { InvokePlayableDirectorMethod(); @@ -70,11 +68,6 @@ private void InvokePlayableDirectorMethod() throw new ArgumentOutOfRangeException(); } } - - private void OnDestroy() - { - Disposable.Dispose(); - } } public enum PlayableControlMethod diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 3b44bab..79451ff 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -24,22 +24,22 @@ [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMetho get => simpleAnimationControlMethod; set => simpleAnimationControlMethod = value; } - [UsedImplicitly] public AnimationClip AnimationClip + [ValueReceiver] public AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - [UsedImplicitly] public AnimatorCullingMode CullingMode + [ValueReceiver] public AnimatorCullingMode CullingMode { get => cullingMode; set => cullingMode = value; } - [UsedImplicitly] public AnimatorUpdateMode UpdateMode + [ValueReceiver] public AnimatorUpdateMode UpdateMode { get => updateMode; set => updateMode = value; } - [UsedImplicitly] public Animator Animator + [ValueReceiver] public Animator Animator { get => animator != default @@ -50,7 +50,7 @@ [UsedImplicitly] public Animator Animator : BaseGameObject.AddComponent(); set => animator = value; } - [UsedImplicitly] public SimpleAnimation SimpleAnimation + [ValueReceiver] public SimpleAnimation SimpleAnimation { get => simpleAnimation != default diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 4f1e094..23c1856 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -1,5 +1,5 @@ using System; -using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -12,17 +12,17 @@ public class TimeScaleController : ConnectorBase [SerializeField] private float duration = default; [SerializeField] private ObservableTween.EaseType easeType = default; - [UsedImplicitly] private float TimeScale + [ValueReceiver] private float TimeScale { get => timeScale; set => timeScale = value; } - [UsedImplicitly] private float Duration + [ValueReceiver] private float Duration { get => duration; set => duration = value; } - [UsedImplicitly] private ObservableTween.EaseType EaseType + [ValueReceiver] private ObservableTween.EaseType EaseType { get => easeType; set => easeType = value; @@ -55,7 +55,8 @@ private void ChangeTimeScale() () => OnCompleteTweenSubject.OnNext(Unit.Default), true ) - .Subscribe(x => Time.timeScale = x); + .Subscribe(x => Time.timeScale = x) + .AddTo(this); } } } diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 44139a6..5616706 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -1,8 +1,10 @@ using System; using System.Linq; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.Event { @@ -16,23 +18,24 @@ public class AnimationEvent : ConnectorBase [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; + [SerializeField] private PublishAnimationEventEvent publisher = new PublishAnimationEventEvent(); - [UsedImplicitly] public AnimationClip AnimationClip + [ValueReceiver] public AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - [UsedImplicitly] public AnimatorCullingMode CullingMode + [ValueReceiver] public AnimatorCullingMode CullingMode { get => cullingMode; set => cullingMode = value; } - [UsedImplicitly] public AnimatorUpdateMode UpdateMode + [ValueReceiver] public AnimatorUpdateMode UpdateMode { get => updateMode; set => updateMode = value; } - [UsedImplicitly] public Animator Animator + [ValueReceiver] public Animator Animator { get => animator != default @@ -43,7 +46,7 @@ [UsedImplicitly] public Animator Animator : gameObject.AddComponent(); set => animator = value; } - [UsedImplicitly] public SimpleAnimation SimpleAnimation + [ValueReceiver] public SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -56,6 +59,8 @@ [UsedImplicitly] public SimpleAnimation SimpleAnimation set => simpleAnimation = value; } + [ValuePublisher] public UnityEvent Publisher => publisher; + private ISubject Subject { get; } = new Subject(); public override IObservable OnConnectAsObservable() @@ -78,6 +83,7 @@ public override IObservable OnConnectAsObservable() [UsedImplicitly] public void Dispatch(UnityEngine.AnimationEvent animationEvent) { + Publisher.Invoke(animationEvent); Subject.OnNext(animationEvent); } diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 6349143..4d8a555 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -19,12 +20,12 @@ [UsedImplicitly] public AudioEventType AudioEventType get => audioEventType; set => audioEventType = value; } - [UsedImplicitly] public AudioClip AudioClip + [ValueReceiver] public AudioClip AudioClip { get => audioClip; set => audioClip = value; } - [UsedImplicitly] public AudioSource AudioSource + [ValueReceiver] public AudioSource AudioSource { get => audioSource != default diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 2f77372..69d4952 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public CameraEventType CameraEventType get => cameraEventType; set => cameraEventType = value; } - [UsedImplicitly] public Component Component + [ValueReceiver] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index 69cfef8..6adaed4 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public LifecycleEventType LifecycleEventType get => lifecycleEventType; set => lifecycleEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 0b8e787..79cf541 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public MouseEventType MouseEventType get => mouseEventType; set => mouseEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index b0b33e8..e6ea8e8 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public ParticleEventType ParticleEventType get => particleEventType; set => particleEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 17b125d..ef0b2e8 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType get => physicsCollision2DEventType; set => physicsCollision2DEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index a13431d..734c228 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType get => physicsCollisionEventType; set => physicsCollisionEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 9417765..1724c0e 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType get => physicsTrigger2DEventType; set => physicsTrigger2DEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index fdb431f..6e0a06b 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType get => physicsTriggerEventType; set => physicsTriggerEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index 1057fed..b6726e8 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public RectTransformEventType RectTransformEventType get => rectTransformEventType; set => rectTransformEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 8de4c69..8bb3354 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -21,12 +22,12 @@ [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType get => simpleAnimationEventType; set => simpleAnimationEventType = value; } - [UsedImplicitly] public AnimationClip AnimationClip + [ValuePublisher] public AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - [UsedImplicitly] public Animator Animator + [ValuePublisher] public Animator Animator { get => animator != default @@ -37,7 +38,7 @@ [UsedImplicitly] public Animator Animator : gameObject.AddComponent(); set => animator = value; } - [UsedImplicitly] public SimpleAnimation SimpleAnimation + [ValuePublisher] public SimpleAnimation SimpleAnimation { get => simpleAnimation != default diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 764441f..40aceac 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using JetBrains.Annotations; +using UniFlow.Attribute; using UniFlow.Signal; using UniRx; using UnityEngine; @@ -22,12 +23,12 @@ [UsedImplicitly] public TimelineEventType TimelineEventType get => timelineEventType; set => timelineEventType = value; } - [UsedImplicitly] public TimelineAsset TimelineAsset + [ValuePublisher] public TimelineAsset TimelineAsset { get => timelineAsset; set => timelineAsset = value; } - [UsedImplicitly] public PlayableDirector PlayableDirector + [ValuePublisher] public PlayableDirector PlayableDirector { get => playableDirector != default diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 5bbd413..e45719f 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -17,7 +18,7 @@ [UsedImplicitly] public TransformEventType TransformEventType get => transformEventType; set => transformEventType = value; } - [UsedImplicitly] public Component Component + [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index f3b89f3..f44b7a8 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -1,5 +1,6 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -21,17 +22,17 @@ [UsedImplicitly] public EventTriggerType EventTriggerType get => eventTriggerType; set => eventTriggerType = value; } - [UsedImplicitly] public UIBehaviour UIBehaviour + [ValuePublisher] public UIBehaviour UIBehaviour { get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); set => uiBehaviour = value; } - [UsedImplicitly] public bool ActivateBeforeConnect + [ValuePublisher] public bool ActivateBeforeConnect { get => activateBeforeConnect; set => activateBeforeConnect = value; } - [UsedImplicitly] public bool DeactivateAfterConnect + [ValuePublisher] public bool DeactivateAfterConnect { get => deactivateAfterConnect; set => deactivateAfterConnect = value; From ce7a1250f7bc0baf787daf837475ef3d2f8988d3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 1 Oct 2019 23:55:36 +0900 Subject: [PATCH 202/453] :sparkles: Connect edge between value publisher and receiver on load connectors --- Assets/Editor/Scripts/ConnectorInfo.cs | 20 ++-- .../Editor/Scripts/EdgeConnectorListener.cs | 1 - Assets/Editor/Scripts/FlowGraphView.cs | 96 +++++++++++++------ Assets/Editor/Scripts/FlowNode.cs | 7 +- .../ValueInjectionConnectorListener.cs | 17 ++-- 5 files changed, 89 insertions(+), 52 deletions(-) diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index c769d7e..d906946 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -93,10 +93,10 @@ public static ConnectorInfo Create(Type type, IConnector instance) type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) .Where(x => x.GetCustomAttribute() != null) - .Select(x => ValuePublisherInfo.Create(x, instance)), + .Select(ValuePublisherInfo.Create), type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => x.GetCustomAttribute() != null) - .Select(x => ValueReceiverInfo.Create(x, instance)) + .Select(ValueReceiverInfo.Create) ); } @@ -134,23 +134,21 @@ public static Parameter Create(Type type, string name, object value) public class ValuePublisherInfo { - private ValuePublisherInfo(PropertyInfo propertyInfo, object instance) + private ValuePublisherInfo(PropertyInfo propertyInfo) { var attribute = propertyInfo.GetCustomAttribute(); Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; Type = GetGenericType(propertyInfo.PropertyType); - Instance = instance; PropertyInfo = propertyInfo; } public string Name { get; } public Type Type { get; } - public object Instance { get; } public PropertyInfo PropertyInfo { get; } - public static ValuePublisherInfo Create(PropertyInfo propertyInfo, object instance) + public static ValuePublisherInfo Create(PropertyInfo propertyInfo) { - return new ValuePublisherInfo(propertyInfo, instance); + return new ValuePublisherInfo(propertyInfo); } private static Type GetGenericType(Type type) @@ -174,23 +172,21 @@ private static Type GetGenericType(Type type) public class ValueReceiverInfo { - private ValueReceiverInfo(PropertyInfo propertyInfo, object instance) + private ValueReceiverInfo(PropertyInfo propertyInfo) { var attribute = propertyInfo.GetCustomAttribute(); Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; Type = propertyInfo.PropertyType; - Instance = instance; PropertyInfo = propertyInfo; } public string Name { get; } public Type Type { get; } - public object Instance { get; } public PropertyInfo PropertyInfo { get; } - public static ValueReceiverInfo Create(PropertyInfo propertyInfo, object instance) + public static ValueReceiverInfo Create(PropertyInfo propertyInfo) { - return new ValueReceiverInfo(propertyInfo, instance); + return new ValueReceiverInfo(propertyInfo); } } } diff --git a/Assets/Editor/Scripts/EdgeConnectorListener.cs b/Assets/Editor/Scripts/EdgeConnectorListener.cs index 02cf8f6..373e80a 100644 --- a/Assets/Editor/Scripts/EdgeConnectorListener.cs +++ b/Assets/Editor/Scripts/EdgeConnectorListener.cs @@ -28,7 +28,6 @@ void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) { FlowGraphView.AddEdge((FlowPort) edge.output, (FlowPort) edge.input); (edge.output.node as FlowNode)?.ApplyTargetConnectors(); - FlowGraphView.AddElement(edge); FlowGraphView.SetupActAsTrigger(); } } diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 5f61038..b979c2f 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -1,9 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; +using UniFlow.Attribute; using UnityEditor; using UnityEditor.Experimental.GraphView; using UnityEngine; +using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UIElements; @@ -11,6 +14,7 @@ namespace UniFlow.Editor { public class FlowGraphView : GraphView { + private IEnumerable Connectors { get; set; } = new List(); private IDictionary> DestinationConnectors { get; } = new Dictionary>(); private IDictionary> SourceConnectors { get; } = new Dictionary>(); private IDictionary RenderedNodes { get; } = new Dictionary(); @@ -94,6 +98,8 @@ public void Initialize() CreateEdges(); + CreateValueInjectionEdges(); + RegisterCallback( (GeometryChangedEvent e) => { @@ -179,7 +185,7 @@ internal void SetupActAsTrigger() private void CreateNodesFromInstance() { - var connectables = UniFlowSettings.instance.IsPrefabMode + Connectors = UniFlowSettings.instance.IsPrefabMode ? UniFlowSettings.instance.SelectedGameObject .GetComponentsInChildren(true) .ToArray() @@ -189,40 +195,37 @@ private void CreateNodesFromInstance() .ToArray(); - foreach (var connectable in connectables) + foreach (var connector in Connectors) { - if (!DestinationConnectors.ContainsKey(connectable)) + if (!DestinationConnectors.ContainsKey(connector)) { - DestinationConnectors[connectable] = new List(); + DestinationConnectors[connector] = new List(); } - var connector = connectable; - if (connector == default || connector.TargetComponents == null) + if (connector is ConnectorBase connectorBase) { - continue; - } - - foreach (var targetConnector in connector.TargetComponents) - { - if (targetConnector == default) - { - continue; - } - - if (!SourceConnectors.ContainsKey(targetConnector)) + foreach (var targetConnector in connectorBase.TargetComponents) { - SourceConnectors[targetConnector] = new List(); + if (targetConnector == default) + { + continue; + } + + if (!SourceConnectors.ContainsKey(targetConnector)) + { + SourceConnectors[targetConnector] = new List(); + } + + DestinationConnectors[connectorBase].Add(targetConnector); + SourceConnectors[targetConnector].Add(connectorBase); } - - DestinationConnectors[connectable].Add(targetConnector); - SourceConnectors[targetConnector].Add(connectable); } } - var rootConnectables = connectables.Where(x => !SourceConnectors.ContainsKey(x)).ToArray(); - if (!rootConnectables.Any() && connectables.Any()) + var rootConnectables = Connectors.Where(x => !SourceConnectors.ContainsKey(x)).ToArray(); + if (!rootConnectables.Any() && Connectors.Any()) { - rootConnectables = new[] {connectables.First()}; + rootConnectables = new[] {Connectors.First()}; } if (UniFlowSettings.instance.SelectedGameObject != default && !UniFlowSettings.instance.IsPrefabMode) @@ -278,17 +281,49 @@ private void CreateNodeRecursive(IConnector connectable, Vector2Int normalizedPo private void CreateEdges() { - foreach (var (connectable, targetConnectables) in DestinationConnectors.Select(x => (x.Key, x.Value))) + foreach (var (sourceConnector, targetConnectors) in DestinationConnectors.Select(x => (x.Key, x.Value))) { - foreach (var targetConnectable in targetConnectables) + foreach (var targetConnector in targetConnectors) { - if (!RenderedNodes.ContainsKey(connectable) || !RenderedNodes.ContainsKey(targetConnectable)) + if (!RenderedNodes.ContainsKey(sourceConnector) || !RenderedNodes.ContainsKey(targetConnector)) { continue; } - var edge = AddEdge((FlowPort) RenderedNodes[connectable].OutputPort, (FlowPort) RenderedNodes[targetConnectable].InputPort); - AddElement(edge); + AddEdge((FlowPort) RenderedNodes[sourceConnector].OutputPort, (FlowPort) RenderedNodes[targetConnector].InputPort); + } + } + } + + private void CreateValueInjectionEdges() + { + foreach (var connector in Connectors) + { + var persistentEventsList = connector.GetType() + .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy) + .Where(x => x.GetCustomAttribute() != null && typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) + .Select(x => (propertyInfo: x, unityEvent: x.GetValue(connector) as UnityEventBase)) + .Where(x => x.unityEvent != null) + .Select(x => Enumerable.Range(0, x.unityEvent.GetPersistentEventCount()).Select(index => (x.propertyInfo, target: x.unityEvent.GetPersistentTarget(index), methodName: x.unityEvent.GetPersistentMethodName(index)))) + .ToArray(); + foreach (var persistentEvents in persistentEventsList) + { + foreach (var (propertyInfo, target, methodName) in persistentEvents) + { + if (!(target is IConnector targetConnector) || !RenderedNodes.ContainsKey(targetConnector) || !RenderedNodes.ContainsKey(connector)) + { + continue; + } + + var publisherNode = RenderedNodes[connector]; + var receiverNode = RenderedNodes[targetConnector]; + var publisherPort = publisherNode.ValuePublishPorts.FirstOrDefault(x => x.ValuePublisherInfo.PropertyInfo == propertyInfo); + var receiverPort = receiverNode.ValueReceivePorts.FirstOrDefault(x => x.ValueReceiverInfo.PropertyInfo.GetSetMethod().Name == methodName); + if (publisherPort != null && receiverPort != null) + { + AddEdge(publisherPort, receiverPort); + } + } } } } @@ -304,7 +339,7 @@ public FlowNode AddNode(Type connectableType, IConnector connectableInstance, Ve return node; } - public static FlowEdge AddEdge(Port outputPort, Port inputPort) + public FlowEdge AddEdge(Port outputPort, Port inputPort) { var edge = new FlowEdge { @@ -313,6 +348,7 @@ public static FlowEdge AddEdge(Port outputPort, Port inputPort) }; edge.output.Connect(edge); edge.input.Connect(edge); + AddElement(edge); return edge; } diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 6a27751..e3aa9e6 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -66,6 +66,9 @@ public void Initialize() public Port InputPort { get; private set; } public Port OutputPort { get; private set; } + public IList ValueReceivePorts { get; } = new List(); + public IList ValuePublishPorts { get; } = new List(); + internal ConnectorInfo ConnectorInfo { get; } private IEdgeConnectorListener EdgeConnectorListener { get; } @@ -355,6 +358,7 @@ private void AddPorts() var port = FlowValuePublishPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, publisher, ValueInjectionConnectorListener); port.portName = publisher.Name; outputContainer.Add(port); + ValuePublishPorts.Add(port as FlowValuePublishPort); } } @@ -369,10 +373,9 @@ private void AddPorts() var port = FlowValueReceivePort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, receiver, ValueInjectionConnectorListener); port.portName = receiver.Name; inputContainer.Add(port); + ValueReceivePorts.Add(port as FlowValueReceivePort); } } - -// UnityEditor.Events.UnityEventTools.AddPersistentListener(new PublishGameObjectEvent(), new UnityAction()); } private static string ToDisplayName(string original) diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs index aa4cd70..fca2976 100644 --- a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs +++ b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs @@ -49,20 +49,23 @@ void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) return; } - FlowGraphView.AddElement(registeredEdge); - if (!(registeredEdge.output is FlowValuePublishPort publishPort) || !(registeredEdge.input is FlowValueReceivePort receivePort)) { return; } - var targetInstance = receivePort.ValueReceiverInfo.Instance; + var publishConnectorInstance = (publishPort.node as FlowNode)?.ConnectorInfo.Connector; + var receivConnectorInstance = (receivePort.node as FlowNode)?.ConnectorInfo.Connector; + if (publishConnectorInstance == null || receivConnectorInstance == null) + { + return; + } var setMethodInfo = receivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(); - var unityEvent = publishPort.ValuePublisherInfo.PropertyInfo.GetValue(publishPort.ValuePublisherInfo.Instance); + var unityEvent = publishPort.ValuePublisherInfo.PropertyInfo.GetValue(publishConnectorInstance); var unityAction = Delegate .CreateDelegate( typeof(UnityAction<>).MakeGenericType(setMethodInfo.GetParameters().First().ParameterType), - targetInstance, + receivConnectorInstance, setMethodInfo.Name, false ); @@ -91,10 +94,10 @@ void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Invoke( persistentCalls, - new[] + new object[] { (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, - targetInstance, + receivConnectorInstance, null, setMethodInfo.Name } From 5489f47477981afa390c39fa9ed89846e3fe679a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 01:37:31 +0900 Subject: [PATCH 203/453] :sparkles: Connect edge correctly --- Assets/Editor/Scripts/FlowEdge.cs | 41 +++++++--- Assets/Editor/Scripts/FlowNode.cs | 26 ++++++ Assets/Editor/Scripts/FlowValuePublishPort.cs | 81 +++++++++++++++++++ .../ValueInjectionConnectorListener.cs | 79 +----------------- .../Controller/SimpleAnimationController.cs | 6 -- 5 files changed, 136 insertions(+), 97 deletions(-) diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs index 7f179e3..0fd11b5 100644 --- a/Assets/Editor/Scripts/FlowEdge.cs +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -1,13 +1,28 @@ -using UnityEditor.Experimental.GraphView; - -namespace UniFlow.Editor -{ - public class FlowEdge : Edge, IRemovableElement - { - void IRemovableElement.RemoveFromGraphView() - { - output.Disconnect(this); - (output?.node as FlowNode)?.ApplyTargetConnectors(); - } - } -} \ No newline at end of file +using UnityEditor.Experimental.GraphView; + +namespace UniFlow.Editor +{ + public class FlowEdge : Edge, IRemovableElement + { + void IRemovableElement.RemoveFromGraphView() + { + output.Disconnect(this); + input.Disconnect(this); + + if (!(output?.node is FlowNode outputNode)) + { + return; + } + + switch (output) + { + case FlowPort _: + outputNode.ApplyTargetConnectors(); + break; + case FlowValuePublishPort _: + outputNode.ApplyValuePublishers(); + break; + } + } + } +} diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index e3aa9e6..cf2a758 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -5,9 +5,11 @@ using System.Text.RegularExpressions; using UniRx; using UnityEditor; +using UnityEditor.Events; using UnityEditor.Experimental.GraphView; using UnityEditor.UIElements; using UnityEngine; +using UnityEngine.Events; using UnityEngine.UIElements; using Object = UnityEngine.Object; @@ -154,6 +156,30 @@ public void ApplyTargetConnectors() EditorUtility.SetDirty(connector); } + public void ApplyValuePublishers() + { + foreach (var valuePublishPort in ValuePublishPorts) + { + if (!(valuePublishPort.ValuePublisherInfo.PropertyInfo.GetValue(ConnectorInfo.Connector) is UnityEventBase unityEvent)) + { + continue; + } + // Preserve count before remove item from list + var count = unityEvent.GetPersistentEventCount(); + for (var i = 0; i < count; i++) + { + // Rebuild index every time, so remove first element + UnityEventTools.RemovePersistentListener(unityEvent, 0); + } + valuePublishPort + .connections + .Select(x => x.input as FlowValueReceivePort) + .Where(x => x?.node != default) + .ToList() + .ForEach(valuePublishPort.AddPersistentListener); + } + } + private void AddParameters() { var contentsElement = this.Q("contents"); diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs b/Assets/Editor/Scripts/FlowValuePublishPort.cs index 14f59d8..d3988b5 100644 --- a/Assets/Editor/Scripts/FlowValuePublishPort.cs +++ b/Assets/Editor/Scripts/FlowValuePublishPort.cs @@ -1,5 +1,10 @@ using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor.Events; using UnityEditor.Experimental.GraphView; +using UnityEngine.Events; using UnityEngine.UIElements; namespace UniFlow.Editor @@ -12,6 +17,14 @@ private FlowValuePublishPort(Orientation portOrientation, Direction portDirectio public ConnectorInfo.ValuePublisherInfo ValuePublisherInfo { get; private set; } + private static IDictionary> AddPersistentListenerCallbackMap { get; } = new Dictionary> + { + {typeof(bool), (unityEvent, unityAction) => UnityEventTools.AddBoolPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + {typeof(int), (unityEvent, unityAction) => UnityEventTools.AddIntPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + {typeof(float), (unityEvent, unityAction) => UnityEventTools.AddFloatPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + {typeof(string), (unityEvent, unityAction) => UnityEventTools.AddStringPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, + }; + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ConnectorInfo.ValuePublisherInfo valuePublisherInfo, IEdgeConnectorListener edgeConnectorListener = default) { var port = new FlowValuePublishPort(portOrientation, portDirection, portCapacity, typeof(FlowValuePublishPort)) @@ -28,5 +41,73 @@ public static Port Create(Orientation portOrientation, Direction portDirection, return port; } + + public void AddPersistentListener(FlowValueReceivePort valueReceivePort) + { + var publishConnectorInstance = (node as FlowNode)?.ConnectorInfo.Connector; + var receivConnectorInstance = (valueReceivePort.node as FlowNode)?.ConnectorInfo.Connector; + if (publishConnectorInstance == null || receivConnectorInstance == null) + { + return; + } + var setMethodInfo = valueReceivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(); + var unityEvent = ValuePublisherInfo.PropertyInfo.GetValue(publishConnectorInstance); + var unityAction = Delegate + .CreateDelegate( + typeof(UnityAction<>).MakeGenericType(setMethodInfo.GetParameters().First().ParameterType), + receivConnectorInstance, + setMethodInfo.Name, + false + ); + + if (AddPersistentListenerCallbackMap.ContainsKey(ValuePublisherInfo.Type)) + { + AddPersistentListenerCallbackMap[ValuePublisherInfo.Type].Invoke(unityEvent, unityAction); + } + else + { + // unityEvent.AddPersistentListener() + unityEvent + .GetType() + .BaseType? + .GetMethodsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? + .First(x => x.Name == "AddPersistentListener" && !x.GetParameters().Any()) + .Invoke(unityEvent, null); + // unityEvent.m_PersistentCalls + var persistentCalls = unityEvent + .GetType() + .GetFieldRecursive("m_PersistentCalls", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .GetValue(unityEvent); + // unityEvent.m_PersistentCalls.RegisterObjectPersistentListener(unityEvent.GetPersistentEventCount() - 1, targetInstance, null, methodInfo.Name); + persistentCalls + .GetType() + .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Invoke( + persistentCalls, + new object[] + { + (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, + receivConnectorInstance, + null, + setMethodInfo.Name + } + ); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1) + var persistentCall = persistentCalls + .GetType() + .GetMethodRecursive("GetListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Invoke(persistentCalls, new object[] {(unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1}); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments + var argumentCache = persistentCall + .GetType() + .GetFieldRecursive("m_Arguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .GetValue(persistentCall); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments.m_ObjectArgumentAssemblyTypeName = setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName + argumentCache + .GetType() + .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); + } + } } } diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs index fca2976..c3e1aaa 100644 --- a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs +++ b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using UnityEditor.Events; using UnityEditor.Experimental.GraphView; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Editor { @@ -18,14 +12,6 @@ public ValueInjectionConnectorListener(FlowGraphView flowGraphView) private FlowGraphView FlowGraphView { get; } - private static IDictionary> AddPersistentListenerCallbackMap { get; } = new Dictionary> - { - {typeof(bool), (unityEvent, unityAction) => UnityEventTools.AddBoolPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - {typeof(int), (unityEvent, unityAction) => UnityEventTools.AddIntPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - {typeof(float), (unityEvent, unityAction) => UnityEventTools.AddFloatPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - {typeof(string), (unityEvent, unityAction) => UnityEventTools.AddStringPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - }; - void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) { // Do nothing @@ -54,70 +40,7 @@ void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) return; } - var publishConnectorInstance = (publishPort.node as FlowNode)?.ConnectorInfo.Connector; - var receivConnectorInstance = (receivePort.node as FlowNode)?.ConnectorInfo.Connector; - if (publishConnectorInstance == null || receivConnectorInstance == null) - { - return; - } - var setMethodInfo = receivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(); - var unityEvent = publishPort.ValuePublisherInfo.PropertyInfo.GetValue(publishConnectorInstance); - var unityAction = Delegate - .CreateDelegate( - typeof(UnityAction<>).MakeGenericType(setMethodInfo.GetParameters().First().ParameterType), - receivConnectorInstance, - setMethodInfo.Name, - false - ); - - if (AddPersistentListenerCallbackMap.ContainsKey(publishPort.ValuePublisherInfo.Type)) - { - AddPersistentListenerCallbackMap[publishPort.ValuePublisherInfo.Type].Invoke(unityEvent, unityAction); - } - else - { - // unityEvent.AddPersistentListener() - unityEvent - .GetType() - .BaseType? - .GetMethodsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? - .First(x => x.Name == "AddPersistentListener" && !x.GetParameters().Any()) - .Invoke(unityEvent, null); - // unityEvent.m_PersistentCalls - var persistentCalls = unityEvent - .GetType() - .GetFieldRecursive("m_PersistentCalls", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .GetValue(unityEvent); - // unityEvent.m_PersistentCalls.RegisterObjectPersistentListener(unityEvent.GetPersistentEventCount() - 1, targetInstance, null, methodInfo.Name); - persistentCalls - .GetType() - .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Invoke( - persistentCalls, - new object[] - { - (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, - receivConnectorInstance, - null, - setMethodInfo.Name - } - ); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1) - var persistentCall = persistentCalls - .GetType() - .GetMethodRecursive("GetListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Invoke(persistentCalls, new object[] {(unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1}); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments - var argumentCache = persistentCall - .GetType() - .GetFieldRecursive("m_Arguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .GetValue(persistentCall); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments.m_ObjectArgumentAssemblyTypeName = setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName - argumentCache - .GetType() - .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); - } + publishPort.AddPersistentListener(receivePort); } } } diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 79451ff..a4ce244 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -78,12 +78,6 @@ public override IObservable OnConnectAsObservable() return Observable.ReturnUnit(); } - [ValueReceiver] public GameObject Piyo { get; set; } - - [ValueReceiver] public Vector2 Hoge { get; set; } - - [ValueReceiver] public int Fuga { get; set; } - protected override void Awake() { base.Awake(); From 0437255de42d768ffec798105634b279b46f161d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 01:40:51 +0900 Subject: [PATCH 204/453] :memo: Update CHANGELOG.md --- Assets/CHANGELOG.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 1392344..1128da4 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [0.1.0-preview.22] - 2019-10-02 + +### Breaking Changes + +* Send `UniRx.Unit` into connecting flows instead of `Message` to omit data messaging + +### Implementations + +* Implement ValueExtractor +* Implement ValueCombiner + +### Improvements + +* Display current flow progress in UniFlow Graph +* Support connect ValueProviders in UniFlow Graph + ## [0.1.0-preview.21] - 2019-09-20 ### Implementations From b6a24dbd524ffb1e38f9d08112bc42007bf2ae05 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 01:41:17 +0900 Subject: [PATCH 205/453] :clipboard: Bump up version to v0.1.0-preview.22 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index cf75008..050dbba 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.21", + "version": "0.1.0-preview.22", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From c30a3d7dd66874df77a08afa206d0d5b48a1f5fd Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 01:51:21 +0900 Subject: [PATCH 206/453] :sparkles: Add ScriptableObjectProvider --- .../ValueProvider/ScriptableObjectProvider.cs | 21 +++++++++++++++++++ .../ScriptableObjectProvider.cs.meta | 3 +++ Assets/Scripts/ConnectorType.cs | 2 ++ 3 files changed, 26 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs new file mode 100644 index 0000000..3a7f37c --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -0,0 +1,21 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] + public class ScriptableObjectProvider : ProviderBase + { + [SerializeField] private ScriptableObject value = default; + private ScriptableObject Value => value; + + [SerializeField] private PublishScriptableObjectEvent publisher = new PublishScriptableObjectEvent(); + [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher; + + protected override ScriptableObject Provide() + { + return Value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs.meta b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs.meta new file mode 100644 index 0000000..6a915af --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1e0a9d1bf040496a8dad552d5c1059fe +timeCreated: 1569948419 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 9d2c2b2..6178f64 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -48,6 +48,7 @@ public enum ConnectorType ValueProviderEnum, ValueProviderObject, ValueProviderGameObject, + ValueProviderScriptableObject, ValueProviderTransform, ValueProviderRectTransform, ValueProviderVector2, @@ -67,6 +68,7 @@ public enum ConnectorType ValueComparerEnum, ValueComparerObject, ValueComparerGameObject, + ValueComparerScriptableObject, ValueComparerTransform, ValueComparerRectTransform, ValueComparerVector2, From 2d990abed3c6b7e86ccea1c8ec5258ef6b104700 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 01:51:36 +0900 Subject: [PATCH 207/453] :sparkles: Add UnityEvents --- Assets/Scripts/PublishValueEvent.cs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs index 0940aaa..2c4fd2e 100644 --- a/Assets/Scripts/PublishValueEvent.cs +++ b/Assets/Scripts/PublishValueEvent.cs @@ -59,6 +59,26 @@ public class PublishScriptableObjectEvent : UnityEvent #region assets + [Serializable] + public class PublishTextureEvent : UnityEvent + { + } + + [Serializable] + public class PublishTexture2DEvent : UnityEvent + { + } + + [Serializable] + public class PublishTexture3DEvent : UnityEvent + { + } + + [Serializable] + public class PublishSpriteEvent : UnityEvent + { + } + [Serializable] public class PublishAnimationClipEvent : UnityEvent { From 6d81948140a7d7b2a2a92bcc36c473a00e6517b4 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 01:53:36 +0900 Subject: [PATCH 208/453] :sparkles: Add ConnectorType for custom --- Assets/Scripts/ConnectorType.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 6178f64..e01df74 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -39,8 +39,7 @@ public enum ConnectorType UnloadScene, UnloadScene_Enum, - ValueProvider = 1000, - ValueProviderBool, + ValueProviderBool = 1000, ValueProviderByte, ValueProviderInt, ValueProviderFloat, @@ -59,6 +58,7 @@ public enum ConnectorType ValueProviderVector3Int, ValueProviderColor, ValueProviderColor32, + CustomValueProvider, ValueComparerBool = 2000, ValueComparerByte, @@ -79,6 +79,7 @@ public enum ConnectorType ValueComparerVector3Int, ValueComparerColor, ValueComparerColor32, + CustomValueComparer, ValueExtractorVector2 = 3000, ValueExtractorVector3, @@ -89,6 +90,7 @@ public enum ConnectorType ValueExtractorVector3Int, ValueExtractorColor, ValueExtractorColor32, + CustomValueExtractor, ValueCombinerVector2 = 4000, ValueCombinerVector3, @@ -99,6 +101,7 @@ public enum ConnectorType ValueCombinerVector3Int, ValueCombinerColor, ValueCombinerColor32, + CustomValueCombiner, Timer = 9000, Interval, From 55cdeb4823587f8e663684647f4d8d82066aa00c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 02:22:16 +0900 Subject: [PATCH 209/453] :beetle: Allow private property --- Assets/Editor/Scripts/FlowGraphView.cs | 2 +- Assets/Editor/Scripts/FlowValuePublishPort.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index b979c2f..fcd19e5 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -318,7 +318,7 @@ private void CreateValueInjectionEdges() var publisherNode = RenderedNodes[connector]; var receiverNode = RenderedNodes[targetConnector]; var publisherPort = publisherNode.ValuePublishPorts.FirstOrDefault(x => x.ValuePublisherInfo.PropertyInfo == propertyInfo); - var receiverPort = receiverNode.ValueReceivePorts.FirstOrDefault(x => x.ValueReceiverInfo.PropertyInfo.GetSetMethod().Name == methodName); + var receiverPort = receiverNode.ValueReceivePorts.FirstOrDefault(x => x.ValueReceiverInfo.PropertyInfo.GetSetMethod(true).Name == methodName); if (publisherPort != null && receiverPort != null) { AddEdge(publisherPort, receiverPort); diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs b/Assets/Editor/Scripts/FlowValuePublishPort.cs index d3988b5..765b820 100644 --- a/Assets/Editor/Scripts/FlowValuePublishPort.cs +++ b/Assets/Editor/Scripts/FlowValuePublishPort.cs @@ -50,7 +50,8 @@ public void AddPersistentListener(FlowValueReceivePort valueReceivePort) { return; } - var setMethodInfo = valueReceivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(); + + var setMethodInfo = valueReceivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(true); var unityEvent = ValuePublisherInfo.PropertyInfo.GetValue(publishConnectorInstance); var unityAction = Delegate .CreateDelegate( From 3a16e2fd7426f0fe020203255857a1409eb0be84 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 02:22:33 +0900 Subject: [PATCH 210/453] :wrench: Draw yellow edge for flow connection edge --- Assets/Editor/Scripts/FlowPort.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Editor/Scripts/FlowPort.cs b/Assets/Editor/Scripts/FlowPort.cs index 91bf47a..112086e 100644 --- a/Assets/Editor/Scripts/FlowPort.cs +++ b/Assets/Editor/Scripts/FlowPort.cs @@ -1,5 +1,6 @@ using System; using UnityEditor.Experimental.GraphView; +using UnityEngine; using UnityEngine.UIElements; namespace UniFlow.Editor @@ -21,6 +22,7 @@ public static Port Create(Orientation portOrientation, Direction portDirection, port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); port.AddManipulator(port.m_EdgeConnector); } + port.portColor = Color.yellow; return port; } From 1e4a692d441f79afbd7bbe7385ba5a9fc91c3f38 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 03:33:12 +0900 Subject: [PATCH 211/453] :sparkles: Handle GameObject instead of UnityEngine.Object --- ...nstantiateObject.cs => InstantiateGameObject.cs} | 13 ++++++------- ...Object.cs.meta => InstantiateGameObject.cs.meta} | 0 Assets/Scripts/ConnectorType.cs | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) rename Assets/Scripts/Connector/Controller/{InstantiateObject.cs => InstantiateGameObject.cs} (64%) rename Assets/Scripts/Connector/Controller/{InstantiateObject.cs.meta => InstantiateGameObject.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs similarity index 64% rename from Assets/Scripts/Connector/Controller/InstantiateObject.cs rename to Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 64cc10d..413c4e6 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -2,21 +2,20 @@ using UniFlow.Attribute; using UniRx; using UnityEngine; -using Object = UnityEngine.Object; namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/Controller/InstantiateObject", (int) ConnectorType.InstantiateObject)] - public class InstantiateObject : ConnectorBase + [AddComponentMenu("UniFlow/Controller/InstantiateObject", (int) ConnectorType.InstantiateGameObject)] + public class InstantiateGameObject : ConnectorBase { - [SerializeField] private Object source = default; + [SerializeField] private GameObject source = default; [SerializeField] private Transform parent = default; - [SerializeField] private PublishObjectEvent publisher = new PublishObjectEvent(); - [ValuePublisher("Instantiated")] private PublishObjectEvent Publisher => publisher; + [SerializeField] private PublishGameObjectEvent publisher = new PublishGameObjectEvent(); + [ValuePublisher("Instantiated")] private PublishGameObjectEvent Publisher => publisher; - [ValueReceiver] public Object Source + [ValueReceiver] public GameObject Source { get => source == default ? gameObject : source; set => source = value; diff --git a/Assets/Scripts/Connector/Controller/InstantiateObject.cs.meta b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Controller/InstantiateObject.cs.meta rename to Assets/Scripts/Connector/Controller/InstantiateGameObject.cs.meta diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index e01df74..3a03fe1 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -19,7 +19,7 @@ public enum ConnectorType PhysicsTrigger2DEvent, ActivationController = 300, - InstantiateObject, + InstantiateGameObject, DestroyInstance, SimpleAnimationController, SimpleAnimationEvent, From 661905c73958269eddf238f00981ae7706084ced Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 03:33:40 +0900 Subject: [PATCH 212/453] :beetle: Fix could not invoke UnityEvent * Compromise on problems with the display in the Inspector --- Assets/Editor/Scripts/FlowValuePublishPort.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs b/Assets/Editor/Scripts/FlowValuePublishPort.cs index 765b820..18a772f 100644 --- a/Assets/Editor/Scripts/FlowValuePublishPort.cs +++ b/Assets/Editor/Scripts/FlowValuePublishPort.cs @@ -108,6 +108,11 @@ public void AddPersistentListener(FlowValueReceivePort valueReceivePort) .GetType() .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Mode = PersistentListenerMode.EventDefined + persistentCall + .GetType() + .GetFieldRecursive("m_Mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .SetValue(persistentCall, PersistentListenerMode.EventDefined); } } } From 9b94257fccab0223c9b9c80a8519b9492f64c395 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 03:35:03 +0900 Subject: [PATCH 213/453] :sparkles: Support BaseGameObject --- .../Connector/Controller/AnimatorTrigger.cs | 18 ++++++++++++------ .../Connector/Controller/AudioController.cs | 12 +++++++++--- .../Connector/Controller/PlayableController.cs | 12 +++++++++--- .../Controller/SimpleAnimationController.cs | 13 ++++++------- 4 files changed, 36 insertions(+), 19 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 9a457bd..5bf70c1 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -8,21 +8,27 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] public class AnimatorTrigger : ConnectorBase { + [SerializeField] private string triggerName = default; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private Animator animator = default; - [SerializeField] private string triggerName = default; - [ValueReceiver] public Animator Animator - { - get => animator ? animator : animator = GetComponent(); - set => animator = value; - } [ValueReceiver] public string TriggerName { get => triggerName; set => triggerName = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + [ValueReceiver] public Animator Animator + { + get => animator ? animator : animator = BaseGameObject.GetComponent(); + set => animator = value; + } private int TriggerId => Animator.StringToHash(TriggerName); diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 684553a..a923fa0 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -13,6 +13,7 @@ public class AudioController : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private AudioSource audioSource = default; [UsedImplicitly] public AudioControlMethod AudioControlMethod @@ -25,15 +26,20 @@ [ValueReceiver] public AudioClip AudioClip get => audioClip; set => audioClip = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValueReceiver] public AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); set => audioSource = value; } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index e9c7048..5015add 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -13,6 +13,7 @@ public class PlayableController : ConnectorBase { [SerializeField] private PlayableControlMethod playableControlMethod = PlayableControlMethod.Play; [SerializeField] private TimelineAsset timelineAsset = default; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private PlayableDirector playableDirector = default; [UsedImplicitly] public PlayableControlMethod PlayableControlMethod @@ -25,15 +26,20 @@ [ValueReceiver] public TimelineAsset TimelineAsset get => timelineAsset; set => timelineAsset = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValueReceiver] public PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); set => playableDirector = value; } diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index a4ce244..9404044 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -16,6 +16,7 @@ public class SimpleAnimationController : ConnectorBase private AnimationClip animationClip = default; [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; @@ -39,6 +40,11 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode get => updateMode; set => updateMode = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValueReceiver] public Animator Animator { get => @@ -63,13 +69,6 @@ [ValueReceiver] public SimpleAnimation SimpleAnimation set => simpleAnimation = value; } - private GameObject baseGameObject; - [ValueReceiver] public GameObject BaseGameObject - { - get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; - } - private IDisposable Disposable { get; } = new CompositeDisposable(); public override IObservable OnConnectAsObservable() From 77a621e6608cc4d3cf8b0e95b1a61484c34d7d13 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 14:12:03 +0900 Subject: [PATCH 214/453] :beetle: Compare values correctly --- .../Connector/ValueComparer/ComparerBase.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index cff9ccd..6123057 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -1,39 +1,39 @@ using System; using JetBrains.Annotations; +using UniFlow.Attribute; using UniRx; using UnityEngine; namespace UniFlow.Connector.ValueComparer { - public abstract class ComparerBase : ConnectorBase - where TOperator : Enum + public abstract class ComparerBase : ConnectorBase { [SerializeField] private TValue expect = default; - [SerializeField] private TOperator @operator = default; [UsedImplicitly] public TValue Expect { get => expect; set => expect = value; } - [UsedImplicitly] public TOperator Operator - { - get => @operator; - set => @operator = value; - } - - private IDisposable Disposable { get; } = new CompositeDisposable(); + [ValueReceiver] public TValue Actual { get; set; } public override IObservable OnConnectAsObservable() { - return Observable.ReturnUnit(); + return Compare(Actual) ? Observable.ReturnUnit() : Observable.Empty(); } - protected abstract bool Compare(TValue compareValue); + protected abstract bool Compare(TValue actual); + } + + public abstract class ComparerBase : ComparerBase + where TOperator : Enum + { + [SerializeField] private TOperator @operator = default; - private void OnDestroy() + [UsedImplicitly] public TOperator Operator { - Disposable.Dispose(); + get => @operator; + set => @operator = value; } } } From 6aebb717987acb2bc70c2519fbc749aa02bbf9d1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 14:12:27 +0900 Subject: [PATCH 215/453] :sparkles: BoolComparer does not need operator --- .../Connector/ValueComparer/BoolComparer.cs | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs index 23932d1..2a843d4 100644 --- a/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs @@ -1,28 +1,13 @@ -using System; using UnityEngine; namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Bool", (int) ConnectorType.ValueComparerBool)] - public class BoolComparer : ComparerBase + public class BoolComparer : ComparerBase { - protected override bool Compare(bool compareValue) + protected override bool Compare(bool actual) { - switch (Operator) - { - case OperatorType.True: - return compareValue; - case OperatorType.False: - return !compareValue; - default: - throw new ArgumentOutOfRangeException(); - } - } - - public enum OperatorType - { - True, - False, + return Expect == actual; } } } From 95ec936e65bc0e1e8489df73396a96325744bfee Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 14:12:57 +0900 Subject: [PATCH 216/453] :name_badge: Follow parameter name changes --- .../Connector/ValueComparer/EnumComparerBase.cs | 8 ++++---- .../Connector/ValueComparer/FloatComparer.cs | 14 +++++++------- .../Scripts/Connector/ValueComparer/IntComparer.cs | 14 +++++++------- .../Connector/ValueComparer/ObjectComparer.cs | 10 +++++----- .../Connector/ValueComparer/StringComparer.cs | 14 +++++++------- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs index d495888..55ee06c 100644 --- a/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs @@ -4,16 +4,16 @@ namespace UniFlow.Connector.ValueComparer { public abstract class EnumComparerBase : ComparerBase.OperatorType> where TEnum : Enum { - protected override bool Compare(TEnum compareValue) + protected override bool Compare(TEnum actual) { switch (Operator) { case OperatorType.Equal: - return Equals(compareValue, Expect); + return Equals(actual, Expect); case OperatorType.NotEqual: - return !Equals(compareValue, Expect); + return !Equals(actual, Expect); case OperatorType.HasFlag: - return Expect.HasFlag(compareValue); + return Expect.HasFlag(actual); default: throw new ArgumentOutOfRangeException(); } diff --git a/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs index 3e8a9da..af63749 100644 --- a/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs @@ -6,22 +6,22 @@ namespace UniFlow.Connector.ValueComparer [AddComponentMenu("UniFlow/ValueComparer/Float", (int) ConnectorType.ValueComparerFloat)] public class FloatComparer : ComparerBase { - protected override bool Compare(float compareValue) + protected override bool Compare(float actual) { switch (Operator) { case OperatorType.Equal: - return Mathf.Approximately(Expect, compareValue); + return Mathf.Approximately(Expect, actual); case OperatorType.NotEqual: - return !Mathf.Approximately(Expect, compareValue); + return !Mathf.Approximately(Expect, actual); case OperatorType.Greater: - return compareValue > Expect; + return actual > Expect; case OperatorType.GreaterOrEqual: - return compareValue >= Expect; + return actual >= Expect; case OperatorType.Less: - return compareValue < Expect; + return actual < Expect; case OperatorType.LessOrEqual: - return compareValue <= Expect; + return actual <= Expect; default: throw new ArgumentOutOfRangeException(); } diff --git a/Assets/Scripts/Connector/ValueComparer/IntComparer.cs b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs index e26cbf5..b882f96 100644 --- a/Assets/Scripts/Connector/ValueComparer/IntComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs @@ -6,22 +6,22 @@ namespace UniFlow.Connector.ValueComparer [AddComponentMenu("UniFlow/ValueComparer/Int", (int) ConnectorType.ValueComparerInt)] public class IntComparer : ComparerBase { - protected override bool Compare(int compareValue) + protected override bool Compare(int actual) { switch (Operator) { case OperatorType.Equal: - return compareValue == Expect; + return actual == Expect; case OperatorType.NotEqual: - return compareValue != Expect; + return actual != Expect; case OperatorType.Greater: - return compareValue > Expect; + return actual > Expect; case OperatorType.GreaterOrEqual: - return compareValue >= Expect; + return actual >= Expect; case OperatorType.Less: - return compareValue < Expect; + return actual < Expect; case OperatorType.LessOrEqual: - return compareValue <= Expect; + return actual <= Expect; default: throw new ArgumentOutOfRangeException(); } diff --git a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs index 258ee23..6f9fb30 100644 --- a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs @@ -6,18 +6,18 @@ namespace UniFlow.Connector.ValueComparer [AddComponentMenu("UniFlow/ValueComparer/Object", (int) ConnectorType.ValueComparerObject)] public class ObjectComparer : ComparerBase { - protected override bool Compare(UnityEngine.Object compareValue) + protected override bool Compare(UnityEngine.Object actual) { switch (Operator) { case OperatorType.Equal: - return compareValue == Expect; + return actual == Expect; case OperatorType.NotEqual: - return compareValue != Expect; + return actual != Expect; case OperatorType.Null: - return compareValue == default; + return actual == default; case OperatorType.NotNull: - return compareValue != default; + return actual != default; default: throw new ArgumentOutOfRangeException(); } diff --git a/Assets/Scripts/Connector/ValueComparer/StringComparer.cs b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs index 258c17f..fa8e29f 100644 --- a/Assets/Scripts/Connector/ValueComparer/StringComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs @@ -6,22 +6,22 @@ namespace UniFlow.Connector.ValueComparer [AddComponentMenu("UniFlow/ValueComparer/String", (int) ConnectorType.ValueComparerString)] public class StringComparer : ComparerBase { - protected override bool Compare(string compareValue) + protected override bool Compare(string actual) { switch (Operator) { case OperatorType.Equal: - return compareValue == Expect; + return actual == Expect; case OperatorType.NotEqual: - return compareValue != Expect; + return actual != Expect; case OperatorType.NullOrEmpty: - return string.IsNullOrEmpty(compareValue); + return string.IsNullOrEmpty(actual); case OperatorType.NotNullOrEmpty: - return !string.IsNullOrEmpty(compareValue); + return !string.IsNullOrEmpty(actual); case OperatorType.NullOrWhitespace: - return string.IsNullOrWhiteSpace(compareValue); + return string.IsNullOrWhiteSpace(actual); case OperatorType.NotNullOrWhitespace: - return !string.IsNullOrWhiteSpace(compareValue); + return !string.IsNullOrWhiteSpace(actual); default: throw new ArgumentOutOfRangeException(); } From 87e2e8299fea2c9d7cbad1c99aa354d0ba0b5309 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:18:26 +0900 Subject: [PATCH 217/453] :wrench: Tweak test scenes --- .../Runtime/Scenes/Basic/AudioEvent.unity | 38 +++++++++++++++---- .../Runtime/Scenes/Basic/CameraEvent.unity | 12 ++---- .../Tests/Runtime/Scenes/Basic/Interval.unity | 14 +++---- .../Timelines/PlayableController.playable | 2 + 4 files changed, 42 insertions(+), 24 deletions(-) diff --git a/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity index 09ae4bf..351c751 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/AudioEvent.unity @@ -156,23 +156,15 @@ MonoBehaviour: OnPreInstall: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPostInstall: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPreResolve: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPostResolve: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null _parentNewObjectsUnderSceneContext: 0 _contractNames: [] _parentContractNames: [] @@ -224,6 +216,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 674} --- !u!114 &169312998 MonoBehaviour: m_ObjectHideFlags: 0 @@ -240,7 +233,9 @@ MonoBehaviour: - {fileID: 169312997} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 1138} audioEventType: 4 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &169312999 AudioSource: @@ -386,6 +381,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} --- !u!114 &237918682 MonoBehaviour: m_ObjectHideFlags: 0 @@ -402,7 +398,9 @@ MonoBehaviour: - {fileID: 237918681} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} audioEventType: 0 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &237918683 AudioSource: @@ -548,6 +546,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 986} --- !u!114 &424226963 MonoBehaviour: m_ObjectHideFlags: 0 @@ -564,7 +563,9 @@ MonoBehaviour: - {fileID: 424226962} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 1682} audioEventType: 1 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &424226964 AudioSource: @@ -713,6 +714,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 1450, y: 50} --- !u!114 &444551915 MonoBehaviour: m_ObjectHideFlags: 0 @@ -729,7 +731,9 @@ MonoBehaviour: - {fileID: 444551914} targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 1100, y: 50} audioEventType: 1 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!114 &444551916 MonoBehaviour: @@ -747,7 +751,9 @@ MonoBehaviour: - {fileID: 444551915} targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 750, y: 50} audioEventType: 3 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!114 &444551917 MonoBehaviour: @@ -765,7 +771,9 @@ MonoBehaviour: - {fileID: 444551916} targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 1142} audioEventType: 2 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!114 &444551918 MonoBehaviour: @@ -783,7 +791,9 @@ MonoBehaviour: - {fileID: 444551917} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 1954} audioEventType: 0 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &444551919 AudioSource: @@ -1020,6 +1030,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 518} --- !u!114 &709479484 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1036,7 +1047,9 @@ MonoBehaviour: - {fileID: 709479483} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 866} audioEventType: 3 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &709479485 AudioSource: @@ -1182,6 +1195,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 830} --- !u!114 &1130731398 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1198,7 +1212,9 @@ MonoBehaviour: - {fileID: 1130731397} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 1410} audioEventType: 0 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &1130731399 AudioSource: @@ -1344,6 +1360,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 206} --- !u!114 &1379110444 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1360,7 +1377,9 @@ MonoBehaviour: - {fileID: 1379110443} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 322} audioEventType: 1 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &1379110445 AudioSource: @@ -1506,6 +1525,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 362} --- !u!114 &1766242782 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1522,7 +1542,9 @@ MonoBehaviour: - {fileID: 1766242781} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 594} audioEventType: 2 + audioClip: {fileID: 0} audioSource: {fileID: 0} --- !u!82 &1766242783 AudioSource: diff --git a/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity index ac45ed3..7b3aa93 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/CameraEvent.unity @@ -156,23 +156,15 @@ MonoBehaviour: OnPreInstall: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPostInstall: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPreResolve: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPostResolve: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null _parentNewObjectsUnderSceneContext: 0 _contractNames: [] _parentContractNames: [] @@ -390,6 +382,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} --- !u!114 &923815578 MonoBehaviour: m_ObjectHideFlags: 0 @@ -406,6 +399,7 @@ MonoBehaviour: - {fileID: 923815577} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} cameraEventType: 0 component: {fileID: 0} --- !u!1 &1761951864 @@ -444,6 +438,7 @@ MonoBehaviour: targetComponents: [] targetIds: [] actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 206} --- !u!114 &1761951866 MonoBehaviour: m_ObjectHideFlags: 0 @@ -460,6 +455,7 @@ MonoBehaviour: - {fileID: 1761951865} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 280} cameraEventType: 1 component: {fileID: 0} --- !u!65 &1761951868 diff --git a/Assets/Tests/Runtime/Scenes/Basic/Interval.unity b/Assets/Tests/Runtime/Scenes/Basic/Interval.unity index cb78775..0f5978b 100644 --- a/Assets/Tests/Runtime/Scenes/Basic/Interval.unity +++ b/Assets/Tests/Runtime/Scenes/Basic/Interval.unity @@ -156,23 +156,15 @@ MonoBehaviour: OnPreInstall: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPostInstall: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPreResolve: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null OnPostResolve: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null _parentNewObjectsUnderSceneContext: 0 _contractNames: [] _parentContractNames: [] @@ -311,6 +303,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} m_Name: m_EditorClassIdentifier: + targetComponents: [] + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} --- !u!114 &1929524894 MonoBehaviour: m_ObjectHideFlags: 0 @@ -327,7 +323,9 @@ MonoBehaviour: - {fileID: 1929524893} targetIds: [] actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} seconds: 1 + ignoreTimeScale: 0 --- !u!4 &1929524895 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Tests/Runtime/Timelines/PlayableController.playable b/Assets/Tests/Runtime/Timelines/PlayableController.playable index 71ef3a8..c8b29c5 100644 --- a/Assets/Tests/Runtime/Timelines/PlayableController.playable +++ b/Assets/Tests/Runtime/Timelines/PlayableController.playable @@ -19,6 +19,7 @@ MonoBehaviour: m_MatchTargetFields: 63 m_RemoveStartOffset: 1 m_ApplyFootIK: 1 + m_Loop: 0 m_Version: 1 m_Rotation: {x: 0, y: 0, z: 0, w: 1} --- !u!114 &11400000 @@ -156,6 +157,7 @@ MonoBehaviour: m_InfiniteClipTimeOffset: 0 m_InfiniteClipRemoveOffset: 0 m_InfiniteClipApplyFootIK: 1 + mInfiniteClipLoop: 0 m_MatchTargetFields: 63 m_Position: {x: 0, y: 0, z: 0} m_EulerAngles: {x: 0, y: 0, z: 0} From c23fde21afecc7ace8f698cd7a8756aca8b8628f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:18:46 +0900 Subject: [PATCH 218/453] :recycle: refactor field position --- Assets/Scripts/Connector/Controller/InstantiateGameObject.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 413c4e6..a74be25 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -9,11 +9,9 @@ namespace UniFlow.Connector.Controller public class InstantiateGameObject : ConnectorBase { [SerializeField] private GameObject source = default; - [SerializeField] private Transform parent = default; [SerializeField] private PublishGameObjectEvent publisher = new PublishGameObjectEvent(); - [ValuePublisher("Instantiated")] private PublishGameObjectEvent Publisher => publisher; [ValueReceiver] public GameObject Source { @@ -26,6 +24,8 @@ [ValueReceiver] public Transform Parent set => parent = value; } + [ValuePublisher("Instantiated")] private PublishGameObjectEvent Publisher => publisher; + public override IObservable OnConnectAsObservable() { var go = Instantiate(Source, Parent); From adbc6ab4db12b363663f3cd85a1fb37748dd7506 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:20:03 +0900 Subject: [PATCH 219/453] :sparkles: Change connect timing to Start() instead of Awake() * Avoid invoking for non-active component --- .../Connector/Controller/SimpleAnimationController.cs | 4 ++-- Assets/Scripts/Connector/Event/AnimationEvent.cs | 4 ++-- Assets/Scripts/Connector/Event/LifecycleEvent.cs | 8 ++------ Assets/Scripts/Connector/Event/TimelineEvent.cs | 4 ++-- Assets/Scripts/ConnectorBase.cs | 2 +- Assets/Scripts/Receiver/Log.cs | 3 +-- 6 files changed, 10 insertions(+), 15 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 9404044..6efb0c4 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -77,9 +77,9 @@ public override IObservable OnConnectAsObservable() return Observable.ReturnUnit(); } - protected override void Awake() + protected override void Start() { - base.Awake(); + base.Start(); // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. if (AnimationClip != default && Animator != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 5616706..f85a98a 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -87,9 +87,9 @@ public void Dispatch(UnityEngine.AnimationEvent animationEvent) Subject.OnNext(animationEvent); } - protected override void Awake() + protected override void Start() { - base.Awake(); + base.Start(); // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. if (AnimationClip != default && Animator == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index 6adaed4..6e26845 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -32,14 +32,10 @@ public override IObservable OnConnectAsObservable() return OnEventAsObservable(); } - protected override void Awake() + protected override void Start() { - base.Awake(); + base.Start(); OnEnableProperty.Value = enabled; - } - - private void Start() - { StartProperty.Value = true; } diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 40aceac..61b17fd 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -72,9 +72,9 @@ private static End EndSignal private ISubject SignalEmittedSubject { get; } = new Subject(); - protected override void Awake() + protected override void Start() { - base.Awake(); + base.Start(); RegisterSignal(); } diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index dcc2f3c..cfade63 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -59,7 +59,7 @@ [UsedImplicitly] public virtual bool ActAsTrigger [Inject] private DiContainer Container { get; } - protected virtual void Awake() + protected virtual void Start() { if (ActAsTrigger) { diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/Log.cs index 9cacb10..a3f06db 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/Log.cs @@ -10,9 +10,8 @@ public class Log : ReceiverBase { private IList Connectors { get; } = new List(); - protected override void Awake() + private void Awake() { - base.Awake(); Logger.Activate(); Logger.OnMessageAsObservable().Subscribe(Connectors.Add); } From 1ce1610129e08aba909b0d4c2a8ba12398b9102e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:21:01 +0900 Subject: [PATCH 220/453] :sparkles: Add BaseGameObject field --- Assets/Scripts/Connector/Event/AnimationEvent.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index f85a98a..81e9919 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -16,6 +16,7 @@ public class AnimationEvent : ConnectorBase private AnimationClip animationClip = default; [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] private PublishAnimationEventEvent publisher = new PublishAnimationEventEvent(); @@ -35,6 +36,11 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode get => updateMode; set => updateMode = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValueReceiver] public Animator Animator { get => From 80728e7a0901a1234a2b18158c3bc8592901a206 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:21:14 +0900 Subject: [PATCH 221/453] :beetle: Avoid compile error on runtime --- Assets/Scripts/ConnectorBase.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index cfade63..404c182 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -69,10 +69,12 @@ protected virtual void Start() void IConnector.Connect(IObservable source) { +#if UNITY_EDITOR if (Logger.IsEnabled) { OnConnectSubject.Subscribe(_ => Logger.Log(this)); } +#endif var observable = source .SelectMany( _ => From ac01a2a0408f7515c562dedf79b73d21cf18435b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:21:33 +0900 Subject: [PATCH 222/453] :white_check_mark: Fix test cases --- Assets/Tests/Runtime/Scripts/AllTest.cs | 2 +- Assets/Tests/Runtime/Scripts/AnimationEventTest.cs | 2 +- .../Tests/Runtime/Scripts/AnimatorTriggerTest.cs | 2 +- .../Tests/Runtime/Scripts/AudioControllerTest.cs | 2 +- Assets/Tests/Runtime/Scripts/AudioEventTest.cs | 4 ++-- Assets/Tests/Runtime/Scripts/CameraEventTest.cs | 4 ++-- Assets/Tests/Runtime/Scripts/IntervalTest.cs | 2 +- .../Runtime/Scripts/PlayableControllerTest.cs | 2 +- Assets/Tests/Runtime/Scripts/TestReceiver.cs | 14 +++++++++----- Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs | 2 +- Assets/Tests/Runtime/Scripts/TimerTest.cs | 2 +- .../Tests/Runtime/Scripts/UIBehaviourEventTest.cs | 2 +- Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs | 2 ++ 13 files changed, 24 insertions(+), 18 deletions(-) diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index 240d5af..e56647d 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -50,7 +50,7 @@ public IEnumerator Multiple() private void AssertAll(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(5, connectors.Count); + Assert.AreEqual(6, connectors.Count); { var connector = connectors[0] as UIBehaviourEventTrigger; diff --git a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs index 0bebb83..9f20004 100644 --- a/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimationEventTest.cs @@ -24,7 +24,7 @@ public IEnumerator AnimationEvent() private void AssertAnimationEvent(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2, connectors.Count); var connector = connectors[0] as AnimationEvent; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs index 989d597..6d2af36 100644 --- a/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AnimatorTriggerTest.cs @@ -24,7 +24,7 @@ public IEnumerator AnimatorTrigger() private void AssertAnimatorTrigger(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(2, connectors.Count); + Assert.AreEqual(3, connectors.Count); var connector = connectors[0] as AnimatorTrigger; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs index 17aea81..ee6682d 100644 --- a/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/AudioControllerTest.cs @@ -133,7 +133,7 @@ private void AssertAudioEvent(IEnumerable sentConnectors, Action sentConnectors, AudioEvent var connectors = sentConnectors.ToList(); Assert.NotNull(connectors); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2 * receiveCount, connectors.Count); Assert.AreEqual(receiveCount, Object.FindObjectOfType().ReceiveCount); var connector = connectors[0] as AudioEvent; diff --git a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs index be8c2c7..e3ca73b 100644 --- a/Assets/Tests/Runtime/Scripts/CameraEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/CameraEventTest.cs @@ -59,7 +59,7 @@ private void AssertCameraBecomeVisibleEvent(IEnumerable sentConnecto { var connectors = sentConnectors.ToList(); Assert.NotNull(connectors); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2, connectors.Count); var connector = connectors[0] as CameraEvent; Assert.NotNull(connector); @@ -73,7 +73,7 @@ private void AssertCameraBecomeInvisibleEvent(IEnumerable sentConnec { var connectors = sentConnectors.ToList(); Assert.NotNull(connectors); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2, connectors.Count); var connector = connectors[0] as CameraEvent; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/IntervalTest.cs b/Assets/Tests/Runtime/Scripts/IntervalTest.cs index c5841c8..1273e44 100644 --- a/Assets/Tests/Runtime/Scripts/IntervalTest.cs +++ b/Assets/Tests/Runtime/Scripts/IntervalTest.cs @@ -26,7 +26,7 @@ private void AssertInterval(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); Assert.AreEqual(2, Object.FindObjectOfType().ReceiveCount); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(4, connectors.Count); var connector = connectors[0] as Interval; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index 3ce64f5..70d1fea 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -27,7 +27,7 @@ public IEnumerator PlayableController() private void AssertPlayableController(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(2, connectors.Count); + Assert.AreEqual(3, connectors.Count); { var connector = connectors[0] as PlayableController; diff --git a/Assets/Tests/Runtime/Scripts/TestReceiver.cs b/Assets/Tests/Runtime/Scripts/TestReceiver.cs index 8335956..255b96b 100644 --- a/Assets/Tests/Runtime/Scripts/TestReceiver.cs +++ b/Assets/Tests/Runtime/Scripts/TestReceiver.cs @@ -5,13 +5,17 @@ namespace UniFlow.Tests.Runtime { public class TestReceiver : ReceiverBase { - public IList SentConnectors { get; private set; } = new List(); + public IList SentConnectors { get; } = new List(); public int ReceiveCount { get; private set; } - - protected override void Awake() + + private void Awake() + { + Logger.OnMessageAsObservable().Where(x => x != default).Subscribe(SentConnectors.Add); + } + + public void Reset() { - Logger.Activate(); - Logger.OnMessageAsObservable().Subscribe(SentConnectors.Add); + SentConnectors.Clear(); } public override void OnReceive() diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 61cfa7d..01c5aa5 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -24,7 +24,7 @@ public IEnumerator TimelineSignal() private void AssertTimelineSignal(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2, connectors.Count); var connector = connectors[0] as TimelineSignal; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/TimerTest.cs b/Assets/Tests/Runtime/Scripts/TimerTest.cs index c997899..9dd0a6d 100644 --- a/Assets/Tests/Runtime/Scripts/TimerTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimerTest.cs @@ -24,7 +24,7 @@ public IEnumerator Timer() private void AssertTimer(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2, connectors.Count); var connector = connectors[0] as Timer; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs index 2723b9f..6cac201 100644 --- a/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs +++ b/Assets/Tests/Runtime/Scripts/UIBehaviourEventTest.cs @@ -30,7 +30,7 @@ public IEnumerator UIBehaviourEventTrigger() private void AssertUIBehaviourEventTrigger(IEnumerable sentConnectors) { var connectors = sentConnectors.ToList(); - Assert.AreEqual(1, connectors.Count); + Assert.AreEqual(2, connectors.Count); var connector = connectors[0] as UIBehaviourEventTrigger; Assert.NotNull(connector); diff --git a/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs index 9336f57..d5fbe1c 100644 --- a/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs +++ b/Assets/Tests/Runtime/Scripts/UniFlowTestBase.cs @@ -18,6 +18,7 @@ public abstract class UniFlowTestBase : ZenjectIntegrationTestFixture public void SetUp() { HasAssert = false; + Logger.Activate(); } protected IEnumerator RunAssert(string sceneName, Action> assertCallback, Action beforeAssertCallback, double waitBeforeAssert = 0, int invokeCount = 1) @@ -33,6 +34,7 @@ protected IEnumerator RunAssert(string sceneName, Action yield return Observable.Timer(TimeSpan.FromSeconds(waitBeforeAssert)).StartAsCoroutine(); } assertCallback(Object.FindObjectOfType().SentConnectors); + Object.FindObjectOfType().Reset(); } Assert.GreaterOrEqual(Object.FindObjectOfType().ReceiveCount, invokeCount); Assert.True(HasAssert); From 513a42b624ee97065b3f85d8ec9e045e22245b71 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:21:44 +0900 Subject: [PATCH 223/453] :clipboard: Ignore auto-generated scenes by Unity TestRunner --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 32bfc8e..9ed4641 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,7 @@ sysinfo.txt # Crashlytics generated file crashlytics-build.properties + +# PlayMode Test generated file +Assets/InitTestScene*.unity +Assets/InitTestScene*.unity.meta From 00362bb3766e8e6af27530fa0695676af3bb6d85 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:30:26 +0900 Subject: [PATCH 224/453] :memo: Update CHANGELOG.md --- Assets/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 1128da4..4d469b4 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.1.0-preview.23] - 2019-10- + +### Breaking Changes + +* Revert timing of preparing to `Start()` instead of `Awake()` + * Avoid running in non-active components + ## [0.1.0-preview.22] - 2019-10-02 ### Breaking Changes From 6abaaa6036fc3447d9ce85ea32f62e68a82eab2f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 15:33:51 +0900 Subject: [PATCH 225/453] :beetle: Avoid warning --- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 8bb3354..4f1ac48 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -55,8 +55,9 @@ [ValuePublisher] public SimpleAnimation SimpleAnimation private IDictionary PlayingStatuses { get; } = new Dictionary(); - private void Start() + protected override void Start() { + base.Start(); ObserveSimpleAnimation(); } From 52d73509700d1dc1c5ae7da6cee3accc9354804d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 16:29:41 +0900 Subject: [PATCH 226/453] :sparkles: Add Test scenes --- .../Basic/SimpleAnimationController.unity | 647 ++++++++++++++++++ .../SimpleAnimationController.unity.meta | 7 + .../Scenes/Basic/SimpleAnimationEvent.unity | 646 +++++++++++++++++ .../Basic/SimpleAnimationEvent.unity.meta | 7 + ProjectSettings/EditorBuildSettings.asset | 6 + 5 files changed, 1313 insertions(+) create mode 100644 Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity create mode 100644 Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity.meta create mode 100644 Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity create mode 100644 Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity.meta diff --git a/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity new file mode 100644 index 0000000..eb5d34d --- /dev/null +++ b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity @@ -0,0 +1,647 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &50763314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 50763316} + - component: {fileID: 50763315} + m_Layer: 0 + m_Name: SceneContext + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &50763315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50763314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89715ad69b973a14899afa2c6730b30b, type: 3} + m_Name: + m_EditorClassIdentifier: + _scriptableObjectInstallers: [] + _monoInstallers: [] + _installerPrefabs: [] + _autoRun: 1 + OnPreInstall: + m_PersistentCalls: + m_Calls: [] + OnPostInstall: + m_PersistentCalls: + m_Calls: [] + OnPreResolve: + m_PersistentCalls: + m_Calls: [] + OnPostResolve: + m_PersistentCalls: + m_Calls: [] + _parentNewObjectsUnderSceneContext: 0 + _contractNames: [] + _parentContractNames: [] +--- !u!4 &50763316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50763314} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &451877066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 451877068} + - component: {fileID: 451877067} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &451877067 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451877066} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &451877068 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451877066} + m_LocalRotation: {x: 0.38268343, y: 0, z: 0, w: 0.92387956} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 45, y: 0, z: 0} +--- !u!1 &757789963 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 757789969} + - component: {fileID: 757789968} + - component: {fileID: 757789967} + - component: {fileID: 757789966} + - component: {fileID: 757789965} + - component: {fileID: 757789964} + m_Layer: 0 + m_Name: Stop + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &757789964 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 757789963} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e354102254874aecbac12539fc4505b3, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 757789967} + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 750, y: 50} + simpleAnimationControlMethod: 1 + animationClip: {fileID: 7400000, guid: ef5cc875a54684b7abeeefd4f24107da, type: 2} + cullingMode: 0 + updateMode: 0 + baseGameObject: {fileID: 0} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!114 &757789965 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 757789963} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5c68da8d20a7460881ef721586f08251, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 757789964} + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} + seconds: 0.5 + ignoreTimeScale: 0 +--- !u!212 &757789966 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 757789963} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.16, y: 0.16} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &757789967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 757789963} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: [] + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 1100, y: 50} +--- !u!114 &757789968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 757789963} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e354102254874aecbac12539fc4505b3, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 757789965} + targetIds: [] + actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} + simpleAnimationControlMethod: 0 + animationClip: {fileID: 7400000, guid: ef5cc875a54684b7abeeefd4f24107da, type: 2} + cullingMode: 0 + updateMode: 0 + baseGameObject: {fileID: 0} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!4 &757789969 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 757789963} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &984367005 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 984367009} + - component: {fileID: 984367008} + - component: {fileID: 984367007} + - component: {fileID: 984367006} + m_Layer: 0 + m_Name: Play + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!212 &984367006 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984367005} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.16, y: 0.16} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &984367007 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984367005} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: [] + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} +--- !u!114 &984367008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984367005} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e354102254874aecbac12539fc4505b3, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 984367007} + targetIds: [] + actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} + simpleAnimationControlMethod: 0 + animationClip: {fileID: 7400000, guid: ef5cc875a54684b7abeeefd4f24107da, type: 2} + cullingMode: 0 + updateMode: 0 + baseGameObject: {fileID: 0} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!4 &984367009 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 984367005} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2126485662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2126485665} + - component: {fileID: 2126485664} + - component: {fileID: 2126485663} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2126485663 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2126485662} + m_Enabled: 1 +--- !u!20 &2126485664 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2126485662} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 1 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2126485665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2126485662} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity.meta b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity.meta new file mode 100644 index 0000000..10539f8 --- /dev/null +++ b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6977b8f896215433887311c3be8b846e +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity new file mode 100644 index 0000000..4ff0561 --- /dev/null +++ b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity @@ -0,0 +1,646 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &50763314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 50763316} + - component: {fileID: 50763315} + m_Layer: 0 + m_Name: SceneContext + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &50763315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50763314} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89715ad69b973a14899afa2c6730b30b, type: 3} + m_Name: + m_EditorClassIdentifier: + _scriptableObjectInstallers: [] + _monoInstallers: [] + _installerPrefabs: [] + _autoRun: 1 + OnPreInstall: + m_PersistentCalls: + m_Calls: [] + OnPostInstall: + m_PersistentCalls: + m_Calls: [] + OnPreResolve: + m_PersistentCalls: + m_Calls: [] + OnPostResolve: + m_PersistentCalls: + m_Calls: [] + _parentNewObjectsUnderSceneContext: 0 + _contractNames: [] + _parentContractNames: [] +--- !u!4 &50763316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 50763314} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &451877066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 451877068} + - component: {fileID: 451877067} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &451877067 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451877066} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &451877068 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 451877066} + m_LocalRotation: {x: 0.38268343, y: 0, z: 0, w: 0.92387956} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 45, y: 0, z: 0} +--- !u!1 &1200034642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1200034646} + - component: {fileID: 1200034645} + - component: {fileID: 1200034644} + - component: {fileID: 1200034643} + - component: {fileID: 1200034647} + m_Layer: 0 + m_Name: Stop + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1200034643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200034642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: [] + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 750, y: 50} +--- !u!114 &1200034644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200034642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6fc6fac5bf554d4da6db3c2feda04ca8, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 1200034643} + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} + simpleAnimationEventType: 1 + animationClip: {fileID: 7400000, guid: d93891a464f724b6392131e974182905, type: 2} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!114 &1200034645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200034642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e354102254874aecbac12539fc4505b3, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 1200034644} + targetIds: [] + actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} + simpleAnimationControlMethod: 0 + animationClip: {fileID: 7400000, guid: d93891a464f724b6392131e974182905, type: 2} + cullingMode: 0 + updateMode: 0 + baseGameObject: {fileID: 0} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!4 &1200034646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200034642} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1200034647 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1200034642} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.16, y: 0.16} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &1914031420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1914031424} + - component: {fileID: 1914031423} + - component: {fileID: 1914031422} + - component: {fileID: 1914031421} + - component: {fileID: 1914031425} + m_Layer: 0 + m_Name: Play + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1914031421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914031420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 74f05c1452df4e608e510b8e0954c294, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: [] + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 750, y: 50} +--- !u!114 &1914031422 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914031420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6fc6fac5bf554d4da6db3c2feda04ca8, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 1914031421} + targetIds: [] + actAsTrigger: 0 + flowGraphNodePosition: {x: 400, y: 50} + simpleAnimationEventType: 0 + animationClip: {fileID: 7400000, guid: d93891a464f724b6392131e974182905, type: 2} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!114 &1914031423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914031420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e354102254874aecbac12539fc4505b3, type: 3} + m_Name: + m_EditorClassIdentifier: + targetComponents: + - {fileID: 1914031422} + targetIds: [] + actAsTrigger: 1 + flowGraphNodePosition: {x: 50, y: 50} + simpleAnimationControlMethod: 0 + animationClip: {fileID: 7400000, guid: d93891a464f724b6392131e974182905, type: 2} + cullingMode: 0 + updateMode: 0 + baseGameObject: {fileID: 0} + animator: {fileID: 0} + simpleAnimation: {fileID: 0} +--- !u!4 &1914031424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914031420} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &1914031425 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914031420} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.16, y: 0.16} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &2126485662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2126485665} + - component: {fileID: 2126485664} + - component: {fileID: 2126485663} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2126485663 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2126485662} + m_Enabled: 1 +--- !u!20 &2126485664 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2126485662} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 1 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2126485665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2126485662} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity.meta b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity.meta new file mode 100644 index 0000000..74ccd5a --- /dev/null +++ b/Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c4ecb70dbd61f493a8b69cfeaf14d49d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 43c3c74..5c3c04c 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -41,4 +41,10 @@ EditorBuildSettings: - enabled: 1 path: Assets/Tests/Runtime/Scenes/Basic/Interval.unity guid: ac7afeeb1f8314eb9b16f588850cdda0 + - enabled: 1 + path: Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationController.unity + guid: 6977b8f896215433887311c3be8b846e + - enabled: 1 + path: Assets/Tests/Runtime/Scenes/Basic/SimpleAnimationEvent.unity + guid: c4ecb70dbd61f493a8b69cfeaf14d49d m_configObjects: {} From 10288f69a093fba1c1daa78cc7636a20ce95046f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 16:29:54 +0900 Subject: [PATCH 227/453] :sparkles: Use Awake instead of Start to initialize correctly --- .../Scripts/Connector/Controller/SimpleAnimationController.cs | 3 +-- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 6efb0c4..cd34dca 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -77,9 +77,8 @@ public override IObservable OnConnectAsObservable() return Observable.ReturnUnit(); } - protected override void Start() + private void Awake() { - base.Start(); // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. if (AnimationClip != default && Animator != default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 4f1ac48..d783fd3 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -55,9 +55,8 @@ [ValuePublisher] public SimpleAnimation SimpleAnimation private IDictionary PlayingStatuses { get; } = new Dictionary(); - protected override void Start() + private void Awake() { - base.Start(); ObserveSimpleAnimation(); } From f2a8f6c623467e6adf07a598fd5978c93ebc269b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 16:30:29 +0900 Subject: [PATCH 228/453] :white_check_mark: Add test for SimpleAnimation --- .../Animations/SimpleAnimationController.meta | 8 + .../SimpleAnimationController/Test.anim | 169 ++++++++++++++++++ .../SimpleAnimationController/Test.anim.meta | 8 + .../Animations/SimpleAnimationEvent.meta | 8 + .../Animations/SimpleAnimationEvent/Test.anim | 169 ++++++++++++++++++ .../SimpleAnimationEvent/Test.anim.meta | 8 + .../Scripts/SimpleAnimationControllerTest.cs | 68 +++++++ .../SimpleAnimationControllerTest.cs.meta | 3 + .../Scripts/SimpleAnimationEventTest.cs | 68 +++++++ .../Scripts/SimpleAnimationEventTest.cs.meta | 3 + .../Runtime/UniFlow.Tests.Runtime.asmdef | 1 + 11 files changed, 513 insertions(+) create mode 100644 Assets/Tests/Runtime/Animations/SimpleAnimationController.meta create mode 100644 Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim create mode 100644 Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim.meta create mode 100644 Assets/Tests/Runtime/Animations/SimpleAnimationEvent.meta create mode 100644 Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim create mode 100644 Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim.meta create mode 100644 Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs create mode 100644 Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs.meta create mode 100644 Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs create mode 100644 Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs.meta diff --git a/Assets/Tests/Runtime/Animations/SimpleAnimationController.meta b/Assets/Tests/Runtime/Animations/SimpleAnimationController.meta new file mode 100644 index 0000000..fbba3db --- /dev/null +++ b/Assets/Tests/Runtime/Animations/SimpleAnimationController.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88b8fc193da314090bf2138f19c68560 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim b/Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim new file mode 100644 index 0000000..ec3d254 --- /dev/null +++ b/Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Test + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 1, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim.meta b/Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim.meta new file mode 100644 index 0000000..4560656 --- /dev/null +++ b/Assets/Tests/Runtime/Animations/SimpleAnimationController/Test.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef5cc875a54684b7abeeefd4f24107da +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Runtime/Animations/SimpleAnimationEvent.meta b/Assets/Tests/Runtime/Animations/SimpleAnimationEvent.meta new file mode 100644 index 0000000..82ab633 --- /dev/null +++ b/Assets/Tests/Runtime/Animations/SimpleAnimationEvent.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea8566f191ced47feae23d2217a2c7f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim b/Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim new file mode 100644 index 0000000..ec3d254 --- /dev/null +++ b/Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim @@ -0,0 +1,169 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Test + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 1, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim.meta b/Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim.meta new file mode 100644 index 0000000..22a82f7 --- /dev/null +++ b/Assets/Tests/Runtime/Animations/SimpleAnimationEvent/Test.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d93891a464f724b6392131e974182905 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs b/Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs new file mode 100644 index 0000000..c28e60c --- /dev/null +++ b/Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs @@ -0,0 +1,68 @@ +using System.Collections; +using System.Linq; +using NUnit.Framework; +using UniFlow.Connector.Controller; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools; + +namespace UniFlow.Tests.Runtime +{ + public class SimpleAnimationControllerTest : UniFlowTestBase + { + [UnityTest] + public IEnumerator Play() + { + yield return + RunAssert( + "SimpleAnimationController", + sentConnectors => + { + var connectors = sentConnectors.ToList(); + Assert.That(connectors.Count, Is.EqualTo(2)); + var connector = connectors[0] as SimpleAnimationController; + Assert.That(connector, Is.Not.Null); + Assert.That(connector.SimpleAnimation.isPlaying, Is.True); + HasAssert = true; + }, + () => + { + var go = SceneManager + .GetSceneByName("SimpleAnimationController") + .GetRootGameObjects() + .First(x => x.name == "Play"); + Assert.That(go, Is.Not.Null); + go.SetActive(true); + }, + 0.5 + ); + } + + [UnityTest] + public IEnumerator Stop() + { + yield return + RunAssert( + "SimpleAnimationController", + sentConnectors => + { + var connectors = sentConnectors.ToList(); + Assert.That(connectors.Count, Is.EqualTo(4)); + var connector = connectors[0] as SimpleAnimationController; + Assert.That(connector, Is.Not.Null); + Assert.That(connector.SimpleAnimation.isPlaying, Is.False); + HasAssert = true; + }, + () => + { + var go = SceneManager + .GetSceneByName("SimpleAnimationController") + .GetRootGameObjects() + .First(x => x.name == "Stop"); + Assert.That(go, Is.Not.Null); + go.SetActive(true); + }, + 1.5 + ); + } + } +} diff --git a/Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs.meta b/Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs.meta new file mode 100644 index 0000000..7355a56 --- /dev/null +++ b/Assets/Tests/Runtime/Scripts/SimpleAnimationControllerTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f92da595f87b40438f274e8e683aea8a +timeCreated: 1569998799 \ No newline at end of file diff --git a/Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs b/Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs new file mode 100644 index 0000000..a88a526 --- /dev/null +++ b/Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs @@ -0,0 +1,68 @@ +using System.Collections; +using System.Linq; +using NUnit.Framework; +using UniFlow.Connector.Controller; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools; + +namespace UniFlow.Tests.Runtime +{ + public class SimpleAnimationEventTest : UniFlowTestBase + { + [UnityTest] + public IEnumerator Play() + { + yield return + RunAssert( + "SimpleAnimationEvent", + sentConnectors => + { + var connectors = sentConnectors.ToList(); + Assert.That(connectors.Count, Is.EqualTo(3)); + var connector = connectors[0] as SimpleAnimationController; + Assert.That(connector, Is.Not.Null); + Assert.That(connector.SimpleAnimation.isPlaying, Is.True); + HasAssert = true; + }, + () => + { + var go = SceneManager + .GetSceneByName("SimpleAnimationEvent") + .GetRootGameObjects() + .First(x => x.name == "Play"); + Assert.That(go, Is.Not.Null); + go.SetActive(true); + }, + 0.5 + ); + } + + [UnityTest] + public IEnumerator Stop() + { + yield return + RunAssert( + "SimpleAnimationEvent", + sentConnectors => + { + var connectors = sentConnectors.ToList(); + Assert.That(connectors.Count, Is.EqualTo(3)); + var connector = connectors[0] as SimpleAnimationController; + Assert.That(connector, Is.Not.Null); + Assert.That(connector.SimpleAnimation.GetStates().First().normalizedTime, Is.GreaterThanOrEqualTo(1.0)); + HasAssert = true; + }, + () => + { + var go = SceneManager + .GetSceneByName("SimpleAnimationEvent") + .GetRootGameObjects() + .First(x => x.name == "Stop"); + Assert.That(go, Is.Not.Null); + go.SetActive(true); + }, + 1.5 + ); + } + } +} diff --git a/Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs.meta b/Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs.meta new file mode 100644 index 0000000..5ea4ea6 --- /dev/null +++ b/Assets/Tests/Runtime/Scripts/SimpleAnimationEventTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3d995359d6094123936437abca9a180f +timeCreated: 1569998808 \ No newline at end of file diff --git a/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef index 45a7c4f..b1777b7 100644 --- a/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef +++ b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef @@ -5,6 +5,7 @@ "GUID:560b04d1a97f54a4e82edc0cbbb69285", "GUID:0d8beb7f090555447a6cf5ce9e54dbb4", "GUID:a2f2239355369ba4fb6909aeaa41def5", + "GUID:aff632302a0b84b498c3f33f7639b4d3", "GUID:27619889b8ba8c24980f49ee34dbb44a", "GUID:0acc523941302664db1f4e527237feb3" ], From 8502f0c9e7d5705ca6ea307e874823f508677b3f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 16:34:15 +0900 Subject: [PATCH 229/453] :memo: Update CHANGELOG.md --- Assets/CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 4d469b4..fcd3038 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -7,6 +7,14 @@ * Revert timing of preparing to `Start()` instead of `Awake()` * Avoid running in non-active components +### Fixes + +* Fix messaging about SimpleAnimation + +### Tests + +* Add tests for SimpleAnimation + ## [0.1.0-preview.22] - 2019-10-02 ### Breaking Changes From 71c4b72b6edeedc02c4e2c967498616580eeaa38 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 16:54:58 +0900 Subject: [PATCH 230/453] :sparkles: Tweak timing for event ragistration --- Assets/Scripts/Connector/Event/AnimationEvent.cs | 2 +- Assets/Scripts/Connector/Event/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 3 ++- Assets/Scripts/Connector/Event/TimelineEvent.cs | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 81e9919..0833db7 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -95,7 +95,6 @@ public void Dispatch(UnityEngine.AnimationEvent animationEvent) protected override void Start() { - base.Start(); // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. if (AnimationClip != default && Animator == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) @@ -104,6 +103,7 @@ protected override void Start() SimpleAnimation.cullingMode = CullingMode; Animator.updateMode = UpdateMode; } + base.Start(); } } } diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index 6e26845..eea234a 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -34,9 +34,9 @@ public override IObservable OnConnectAsObservable() protected override void Start() { - base.Start(); OnEnableProperty.Value = enabled; StartProperty.Value = true; + base.Start(); } private void OnEnable() diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index d783fd3..1a3bf67 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -55,9 +55,10 @@ [ValuePublisher] public SimpleAnimation SimpleAnimation private IDictionary PlayingStatuses { get; } = new Dictionary(); - private void Awake() + protected override void Start() { ObserveSimpleAnimation(); + base.Start(); } public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 61b17fd..8176665 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -74,8 +74,8 @@ private static End EndSignal protected override void Start() { - base.Start(); RegisterSignal(); + base.Start(); } private void OnDestroy() From 9d204c2e911eb42cfdfa341ed421f16d39832ac2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 17:17:58 +0900 Subject: [PATCH 231/453] :sparkles: Add generics type to reduce code volume --- Assets/Scripts/Connector/ValueProvider/ProviderBase.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 0e57088..d2d6878 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -1,12 +1,16 @@ using System; +using UniFlow.Attribute; using UniRx; +using UnityEngine; using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { - public abstract class ProviderBase : ConnectorBase + public abstract class ProviderBase : ConnectorBase where TPublishEvent : UnityEvent, new() { - protected abstract UnityEvent Publisher { get; } + [SerializeField] private TPublishEvent publisher = new TPublishEvent(); + [ValuePublisher("Value")] private TPublishEvent Publisher => publisher; + protected abstract TValue Provide(); public override IObservable OnConnectAsObservable() From 32c558b21bc979928c47cd57f89786506abf8f2b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 2 Oct 2019 17:18:46 +0900 Subject: [PATCH 232/453] :sparkles: Follow base class definition changes --- Assets/Scripts/Connector/ValueProvider/BoolProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/ByteProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/Color32Provider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/ColorProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/FloatProvider.cs | 7 +------ .../Scripts/Connector/ValueProvider/GameObjectProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/IntProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs | 7 +------ .../Scripts/Connector/ValueProvider/QuaternionProvider.cs | 7 +------ .../Connector/ValueProvider/ScriptableObjectProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/SelectorBase.cs | 8 +++----- Assets/Scripts/Connector/ValueProvider/StringProvider.cs | 7 +------ .../Scripts/Connector/ValueProvider/Vector2IntProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs | 7 +------ .../Scripts/Connector/ValueProvider/Vector3IntProvider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs | 7 +------ Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs | 7 +------ 17 files changed, 19 insertions(+), 101 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index cf28fc6..a043f73 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class BoolProvider : ProviderBase + public class BoolProvider : ProviderBase { [SerializeField] private bool value = default; private bool Value => value; - [SerializeField] private PublishBoolEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishBoolEvent()); - protected override bool Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index 6243d45..ed16cd4 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] - public class ByteProvider : ProviderBase + public class ByteProvider : ProviderBase { [SerializeField] private byte value = default; private byte Value => value; - [SerializeField] private PublishByteEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishByteEvent()); - protected override byte Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 33d3b74..6c26a39 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32Provider : ProviderBase + public class Color32Provider : ProviderBase { [SerializeField] private Color32 value = default; private Color32 Value => value; - [SerializeField] private PublishColor32Event publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishColor32Event()); - protected override Color32 Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index 8a0eefa..e41b8b3 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class ColorProvider : ProviderBase + public class ColorProvider : ProviderBase { [SerializeField] private Color value = default; private Color Value => value; - [SerializeField] private PublishColorEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishColorEvent()); - protected override Color Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index 8137c4c..61fa533 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class FloatProvider : ProviderBase + public class FloatProvider : ProviderBase { [SerializeField] private float value = default; private float Value => value; - [SerializeField] private PublishFloatEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishFloatEvent()); - protected override float Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index 026b5a7..01d707d 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] - public class GameObjectProvider : ProviderBase + public class GameObjectProvider : ProviderBase { [SerializeField] private GameObject value = default; private GameObject Value => value; - [SerializeField] private PublishGameObjectEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishGameObjectEvent()); - protected override GameObject Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index ad6a2f6..85110d3 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class IntProvider : ProviderBase + public class IntProvider : ProviderBase { [SerializeField] private int value = default; private int Value => value; - [SerializeField] private PublishIntEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishIntEvent()); - protected override int Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index a5a661c..ee01a05 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class ObjectProvider : ProviderBase + public class ObjectProvider : ProviderBase { [SerializeField] private Object value = default; private Object Value => value; - [SerializeField] private PublishObjectEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishObjectEvent()); - protected override Object Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 15f27b5..98b0b44 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class QuaternionProvider : ProviderBase + public class QuaternionProvider : ProviderBase { [SerializeField] private Quaternion value = default; private Quaternion Value => value; - [SerializeField] private PublishQuaternionEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishQuaternionEvent()); - protected override Quaternion Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index 3a7f37c..d821420 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] - public class ScriptableObjectProvider : ProviderBase + public class ScriptableObjectProvider : ProviderBase { [SerializeField] private ScriptableObject value = default; private ScriptableObject Value => value; - [SerializeField] private PublishScriptableObjectEvent publisher = new PublishScriptableObjectEvent(); - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher; - protected override ScriptableObject Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 971746e..e857af4 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase + public abstract class SelectorBase : ProviderBase where TPublishEvent : UnityEvent, new() { [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); @@ -29,13 +29,11 @@ protected override TValue Provide() } } - public abstract class GameObjectSelectorBase : SelectorBase + public abstract class GameObjectSelectorBase : SelectorBase { - [SerializeField] private PublishGameObjectEvent publisher = new PublishGameObjectEvent(); - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher; } - public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum + public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum where TPublishEvent : UnityEvent, new() { } } diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index ede3748..9e2b455 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class StringProvider : ProviderBase + public class StringProvider : ProviderBase { [SerializeField] private string value = default; private string Value => value; - [SerializeField] private PublishStringEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishStringEvent()); - protected override string Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index c250c55..f0aef2f 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2IntProvider : ProviderBase + public class Vector2IntProvider : ProviderBase { [SerializeField] private Vector2Int value = default; private Vector2Int Value => value; - [SerializeField] private PublishVector2IntEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector2IntEvent()); - protected override Vector2Int Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index e988b9e..4139fed 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2Provider : ProviderBase + public class Vector2Provider : ProviderBase { [SerializeField] private Vector2 value = default; private Vector2 Value => value; - [SerializeField] private PublishVector2Event publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector2Event()); - protected override Vector2 Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index a6c341c..7bfdf70 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3IntProvider : ProviderBase + public class Vector3IntProvider : ProviderBase { [SerializeField] private Vector3Int value = default; private Vector3Int Value => value; - [SerializeField] private PublishVector3IntEvent publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector3IntEvent()); - protected override Vector3Int Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index bdaa9b5..abc0ceb 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3Provider : ProviderBase + public class Vector3Provider : ProviderBase { [SerializeField] private Vector3 value = default; private Vector3 Value => value; - [SerializeField] private PublishVector3Event publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector3Event()); - protected override Vector3 Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index 64ab6e4..b7e667b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -1,18 +1,13 @@ -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4Provider : ProviderBase + public class Vector4Provider : ProviderBase { [SerializeField] private Vector4 value = default; private Vector4 Value => value; - [SerializeField] private PublishVector4Event publisher = default; - [ValuePublisher("Value")] protected override UnityEvent Publisher => publisher ?? (publisher = new PublishVector4Event()); - protected override Vector4 Provide() { return Value; From 61eecdd4ef69a950578fd9b7188a9a1f755cb854 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Thu, 3 Oct 2019 00:17:37 +0900 Subject: [PATCH 233/453] :wrench: Add AddTo(this) to release correctly --- Assets/Scripts/ConnectorBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 404c182..ac68158 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -72,7 +72,7 @@ void IConnector.Connect(IObservable source) #if UNITY_EDITOR if (Logger.IsEnabled) { - OnConnectSubject.Subscribe(_ => Logger.Log(this)); + OnConnectSubject.Subscribe(_ => Logger.Log(this)).AddTo(this); } #endif var observable = source @@ -97,7 +97,7 @@ void IConnector.Connect(IObservable source) if (!TargetConnectors.Any()) { - observable.Subscribe(); + observable.Subscribe().AddTo(this); } } From f23b86ac607b94aa21bfea36c6b66548b013158a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:26:56 +0900 Subject: [PATCH 234/453] :sparkles: Add some connectors --- .../Connector/Controller/DontDestroyOnLoad.cs | 16 ++++++++ .../Controller/DontDestroyOnLoad.cs.meta | 3 ++ .../Connector/Controller/ImageController.cs | 39 +++++++++++++++++++ .../Controller/ImageController.cs.meta | 3 ++ .../Controller/RawImageController.cs | 39 +++++++++++++++++++ .../Controller/RawImageController.cs.meta | 3 ++ 6 files changed, 103 insertions(+) create mode 100644 Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs create mode 100644 Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs.meta create mode 100644 Assets/Scripts/Connector/Controller/ImageController.cs create mode 100644 Assets/Scripts/Connector/Controller/ImageController.cs.meta create mode 100644 Assets/Scripts/Connector/Controller/RawImageController.cs create mode 100644 Assets/Scripts/Connector/Controller/RawImageController.cs.meta diff --git a/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs b/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs new file mode 100644 index 0000000..993f99f --- /dev/null +++ b/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs @@ -0,0 +1,16 @@ +using System; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/DontDestroyOnLoad", (int) ConnectorType.DontDestroyOnLoad)] + public class DontDestroyOnLoad : ConnectorBase + { + public override IObservable OnConnectAsObservable() + { + DontDestroyOnLoad(gameObject); + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs.meta b/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs.meta new file mode 100644 index 0000000..7602f5e --- /dev/null +++ b/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 100966f39e2146ff83ae6ecb77a56174 +timeCreated: 1570026181 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/ImageController.cs b/Assets/Scripts/Connector/Controller/ImageController.cs new file mode 100644 index 0000000..cf7d56c --- /dev/null +++ b/Assets/Scripts/Connector/Controller/ImageController.cs @@ -0,0 +1,39 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/ImageController", (int) ConnectorType.ImageController)] + public class ImageController : ConnectorBase + { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private Image image = default; + + [ValueReceiver] public Sprite Sprite { get; set; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + [ValueReceiver] public Image Image + { + get => + image != default + ? image + : image = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => image = value; + } + + public override IObservable OnConnectAsObservable() + { + Image.sprite = Sprite; + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/Controller/ImageController.cs.meta b/Assets/Scripts/Connector/Controller/ImageController.cs.meta new file mode 100644 index 0000000..602c185 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/ImageController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c712524056354542a1b35e597dfcda03 +timeCreated: 1570028763 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/RawImageController.cs b/Assets/Scripts/Connector/Controller/RawImageController.cs new file mode 100644 index 0000000..89a44e8 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/RawImageController.cs @@ -0,0 +1,39 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/RawImageController", (int) ConnectorType.RawImageController)] + public class RawImageController : ConnectorBase + { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private RawImage rawImage = default; + + [ValueReceiver] public Texture Texture { get; set; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + [ValueReceiver] public RawImage RawImage + { + get => + rawImage != default + ? rawImage + : rawImage = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => rawImage = value; + } + + public override IObservable OnConnectAsObservable() + { + RawImage.texture = Texture; + return Observable.ReturnUnit(); + } + } +} diff --git a/Assets/Scripts/Connector/Controller/RawImageController.cs.meta b/Assets/Scripts/Connector/Controller/RawImageController.cs.meta new file mode 100644 index 0000000..8ebc915 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/RawImageController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ce1f1899b5db4d36aeaeaedbebbe4f78 +timeCreated: 1570029109 \ No newline at end of file From 5a80080934e8c16190491a32afae8b27ccb3a8a9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:28:41 +0900 Subject: [PATCH 235/453] :wrench: Tweak GraphView --- Assets/Editor/Scripts/FlowGraphView.cs | 8 +- Assets/Editor/Scripts/FlowVisualElement.cs | 242 +++++++++--------- Assets/Editor/Scripts/SearchWindowProvider.cs | 6 +- 3 files changed, 134 insertions(+), 122 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index fcd19e5..addff6b 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -14,7 +14,7 @@ namespace UniFlow.Editor { public class FlowGraphView : GraphView { - private IEnumerable Connectors { get; set; } = new List(); + private IList Connectors { get; set; } = new List(); private IDictionary> DestinationConnectors { get; } = new Dictionary>(); private IDictionary> SourceConnectors { get; } = new Dictionary>(); private IDictionary RenderedNodes { get; } = new Dictionary(); @@ -188,11 +188,13 @@ private void CreateNodesFromInstance() Connectors = UniFlowSettings.instance.IsPrefabMode ? UniFlowSettings.instance.SelectedGameObject .GetComponentsInChildren(true) - .ToArray() + .OfType() + .ToList() : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) .GetRootGameObjects() .SelectMany(x => x.GetComponentsInChildren(true)) - .ToArray(); + .OfType() + .ToList(); foreach (var connector in Connectors) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 93c4b91..3cf3bd6 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -1,118 +1,124 @@ -using UnityEditor; -using UnityEditor.SceneManagement; -using UnityEngine; -using UnityEngine.UIElements; - -namespace UniFlow.Editor -{ - public class FlowVisualElement : VisualElement - { - internal FlowGraphView FlowGraphView { get; private set; } - private VisualElement Content { get; set; } - - public void Initialize() - { - styleSheets.Add(AssetReferences.Instance.FlowVisualElement); - - var toolbar = new IMGUIContainer( - () => - { - GUILayout.BeginHorizontal(EditorStyles.toolbar); - if (GUILayout.Button("Load", EditorStyles.toolbarButton)) - { - UniFlowSettings.instance.SelectedGameObject = Selection.activeGameObject; - if (Contains(Content)) - { - Remove(Content); - } - Load(); - } - if (GUILayout.Button("Load All in Scene", EditorStyles.toolbarButton)) - { - UniFlowSettings.instance.SelectedGameObject = null; - if (Contains(Content)) - { - Remove(Content); - } - Load(); - } - - GUILayout.Space(6); - - if (GUILayout.Button($"Save {(UniFlowSettings.instance.IsPrefabMode ? "Prefab" : "Scenes")}", EditorStyles.toolbarButton)) - { - if (UniFlowSettings.instance.IsPrefabMode) - { - PrefabUtility.SavePrefabAsset(UniFlowSettings.instance.SelectedGameObject); - } - else if (UniFlowSettings.instance.SelectedGameObject != default) - { - EditorSceneManager.SaveScene(UniFlowSettings.instance.SelectedGameObject.scene); - } - } - - GUILayout.Space(6); - - if (GUILayout.Button("Reset Viewport", EditorStyles.toolbarButton)) - { - UniFlowSettings.instance.LatestPosition = Vector3.zero; - UniFlowSettings.instance.LatestScale = Vector3.one; - Remove(Content); - Load(); - } - if (GUILayout.Button("Auto Layout", EditorStyles.toolbarButton)) - { - FlowGraphView.Relocation(true); - } - - if (UniFlowSettings.instance.SelectedGameObject != default) - { - GUILayout.Space(6); - - // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression - if (UniFlowSettings.instance.IsPrefabMode) - { - GUILayout.Label($"[Prefab] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); - } - else - { - GUILayout.Label($"[{UniFlowSettings.instance.SelectedGameObject.scene.name}] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); - } - } - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - } - ); - Add(toolbar); - - Load(); - } - - private static string CreateGameObjectTreeString(Transform transform) - { - if (!transform.gameObject.scene.IsValid()) - { - return AssetDatabase.GetAssetPath(transform.gameObject); - } - - var parent = transform.parent; - return parent == default ? transform.name : $"{CreateGameObjectTreeString(parent)} > {transform.name}"; - } - - private void Load() - { - FlowGraphView = new FlowGraphView - { - name = typeof(FlowGraphView).Name, - }; - FlowGraphView.Initialize(); - Content = new VisualElement - { - name = "Content", - }; - Content.Add(FlowGraphView); - Add(Content); - } - } -} +using UniRx; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowVisualElement : VisualElement + { + internal FlowGraphView FlowGraphView { get; private set; } + private VisualElement Content { get; set; } + + public void Initialize() + { + styleSheets.Add(AssetReferences.Instance.FlowVisualElement); + + var toolbar = new IMGUIContainer( + () => + { + GUILayout.BeginHorizontal(EditorStyles.toolbar); + if (GUILayout.Button("Load", EditorStyles.toolbarButton)) + { + UniFlowSettings.instance.SelectedGameObject = Selection.activeGameObject; + if (Contains(Content)) + { + Remove(Content); + } + Load(); + } + if (GUILayout.Button("Load All in Scene", EditorStyles.toolbarButton)) + { + UniFlowSettings.instance.SelectedGameObject = null; + if (Contains(Content)) + { + Remove(Content); + } + Load(); + } + + GUILayout.Space(6); + + if (GUILayout.Button($"Save {(UniFlowSettings.instance.IsPrefabMode ? "Prefab" : "Scenes")}", EditorStyles.toolbarButton)) + { + if (UniFlowSettings.instance.IsPrefabMode) + { + PrefabUtility.SavePrefabAsset(UniFlowSettings.instance.SelectedGameObject); + } + else if (UniFlowSettings.instance.SelectedGameObject != default) + { + EditorSceneManager.SaveScene(UniFlowSettings.instance.SelectedGameObject.scene); + } + } + + GUILayout.Space(6); + + if (GUILayout.Button("Reset Viewport", EditorStyles.toolbarButton)) + { + UniFlowSettings.instance.LatestPosition = Vector3.zero; + UniFlowSettings.instance.LatestScale = Vector3.one; + Remove(Content); + Load(); + } + if (GUILayout.Button("Auto Layout", EditorStyles.toolbarButton)) + { + if (Contains(Content)) + { + Remove(Content); + } + Load(); + Observable.TimerFrame(1).Subscribe(_ => FlowGraphView.Relocation(true)); + } + + if (UniFlowSettings.instance.SelectedGameObject != default) + { + GUILayout.Space(6); + + // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression + if (UniFlowSettings.instance.IsPrefabMode) + { + GUILayout.Label($"[Prefab] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); + } + else + { + GUILayout.Label($"[{UniFlowSettings.instance.SelectedGameObject.scene.name}] {CreateGameObjectTreeString(UniFlowSettings.instance.SelectedGameObject.transform)}"); + } + } + + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + ); + Add(toolbar); + + Load(); + } + + private static string CreateGameObjectTreeString(Transform transform) + { + if (!transform.gameObject.scene.IsValid()) + { + return AssetDatabase.GetAssetPath(transform.gameObject); + } + + var parent = transform.parent; + return parent == default ? transform.name : $"{CreateGameObjectTreeString(parent)} > {transform.name}"; + } + + private void Load() + { + FlowGraphView = new FlowGraphView + { + name = typeof(FlowGraphView).Name, + }; + FlowGraphView.Initialize(); + Content = new VisualElement + { + name = "Content", + }; + Content.Add(FlowGraphView); + Add(Content); + } + } +} diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index f68476c..b7e49e9 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -106,7 +106,11 @@ bool ISearchWindowProvider.OnSelectEntry(SearchTreeEntry searchTreeEntry, Search FlowGraphView.SetupActAsTrigger(); if (FlowPort.node is FlowNode targetFlowNode && targetFlowNode.ConnectorInfo.Connector is ConnectorBase targetConnector) { - targetConnector.TargetComponents = new List {node.ConnectorInfo.Connector as ConnectorBase}; + if (targetConnector.TargetComponents == null) + { + targetConnector.TargetComponents = new List(); + } + targetConnector.TargetComponents = targetConnector.TargetComponents.Concat(new List {node.ConnectorInfo.Connector as ConnectorBase}); } } FlowGraphView.SetupActAsTrigger(); From 7500e20a89a5d58d5e5898cc501817537d65962e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:31:14 +0900 Subject: [PATCH 236/453] :sparkles: Display warning if connector contains empty target --- Assets/Scripts/ConnectorBase.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index ac68158..b19e403 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -91,7 +91,15 @@ void IConnector.Connect(IObservable source) { observable = observable.Share(); } +#if UNITY_EDITOR + TargetConnectors + .Select((connector, index) => (connector, index)) + .Where(x => x.connector == default) + .ToList() + .ForEach(x => Debug.LogWarning($"{gameObject.name}.{GetType().Name} contains empty target connector at index: {x.index}")); +#endif TargetConnectors + .Where(x => x != default) .ToList() .ForEach(x => x.Connect(observable)); From e6de3f7d64afc7ffd37af46dba41284fdaa9df0c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:32:07 +0900 Subject: [PATCH 237/453] :sparkles: Support BaseGameObject --- .../Controller/ActivationController.cs | 30 ++++++++----------- .../Connector/Event/SimpleAnimationEvent.cs | 12 ++++++-- .../Scripts/Connector/Event/TimelineEvent.cs | 20 +++++++++---- Assets/Scripts/Connector/Misc/Toss.cs | 9 +++++- 4 files changed, 43 insertions(+), 28 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 88c2d9a..f48d7c6 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -13,29 +13,33 @@ public class ActivationController : ConnectorBase { [SerializeField] private List targetGameObjects = default; [SerializeField] private List targetMonoBehaviours = default; - [SerializeField] private bool controlSelfInstance = default; [SerializeField] private bool activated = default; - [UsedImplicitly] public IEnumerable GameObjects + [UsedImplicitly] public IList GameObjects { get => targetGameObjects; set => targetGameObjects = value.ToList(); } - [UsedImplicitly] public IEnumerable MonoBehaviours + [UsedImplicitly] public IList MonoBehaviours { get => targetMonoBehaviours; set => targetMonoBehaviours = value.ToList(); } - [ValueReceiver] public bool ControlSelfInstance - { - get => controlSelfInstance; - set => controlSelfInstance = value; - } [ValueReceiver] public bool Activated { get => activated; set => activated = value; } + [ValueReceiver] public GameObject TargetGameObject + { + get => null; + set => GameObjects.Add(value); + } + [ValueReceiver] public MonoBehaviour TargetMonoBehaviour + { + get => null; + set => MonoBehaviours.Add(value); + } public override IObservable OnConnectAsObservable() { @@ -43,16 +47,6 @@ public override IObservable OnConnectAsObservable() gameObjects.ForEach(x => x.SetActive(Activated)); var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); monoBehaviours.ForEach(x => x.enabled = Activated); - // ReSharper disable once InvertIf - if (ControlSelfInstance) - { - if (gameObject.activeSelf != Activated) - { - gameObject.SetActive(Activated); - } - var components = GetComponents().Where(x => x.enabled != Activated).ToList(); - components.ForEach(x => x.enabled = Activated); - } return Observable.ReturnUnit(); } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 1a3bf67..5c4a6eb 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -14,6 +14,7 @@ public class SimpleAnimationEvent : ConnectorBase [SerializeField] [Tooltip("If you do not specify it will not be filtered")] private AnimationClip animationClip = default; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; @@ -27,15 +28,20 @@ [ValuePublisher] public AnimationClip AnimationClip get => animationClip; set => animationClip = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValuePublisher] public Animator Animator { get => animator != default ? animator : animator = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); set => animator = value; } [ValuePublisher] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 8176665..df6c542 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -16,6 +16,7 @@ public class TimelineEvent : ConnectorBase { [SerializeField] private TimelineEventType timelineEventType = TimelineEventType.Play; [SerializeField] private TimelineAsset timelineAsset = default; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private PlayableDirector playableDirector = default; [UsedImplicitly] public TimelineEventType TimelineEventType @@ -28,15 +29,20 @@ [ValuePublisher] public TimelineAsset TimelineAsset get => timelineAsset; set => timelineAsset = value; } + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValuePublisher] public PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); set => playableDirector = value; } @@ -80,7 +86,7 @@ protected override void Start() private void OnDestroy() { - if (!(PlayableDirector.playableAsset is TimelineAsset timeline)) + if (baseGameObject == null || playableDirector == null || !(PlayableDirector.playableAsset is TimelineAsset timeline)) { return; } @@ -110,8 +116,10 @@ private void RegisterSignal() .markerTrack .GetMarkers() .FirstOrDefault( - x => Math.Abs(x.time - time) < double.Epsilon - && x is SignalEmitter signalEmitter + x => x is SignalEmitter signalEmitter + && signalEmitter != default + && Math.Abs(signalEmitter.time - time) < double.Epsilon + && signalEmitter.asset != default && signalEmitter.asset.GetType() == signal.GetType() ) as SignalEmitter; if (emitter == default) diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index 2c1b840..1b4fcb6 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -9,7 +10,13 @@ namespace UniFlow.Connector.Misc public class Toss : ConnectorBase { [SerializeField] private List targets = default; - private IEnumerable Targets => targets; + private IList Targets => targets; + + [ValueReceiver] public GameObject TargetGameObject + { + get => null; + set => Targets.Add(value); + } public override IObservable OnConnectAsObservable() { From 655384b2e2266e3f729cceb904047aeb060db0f2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:32:26 +0900 Subject: [PATCH 238/453] :sparkles: Set PlayableAsset correctly --- .../Connector/Controller/PlayableController.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 5015add..b8214f0 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -43,6 +43,14 @@ [ValueReceiver] public PlayableDirector PlayableDirector set => playableDirector = value; } + private void Awake() + { + if (PlayableDirector != default && TimelineAsset != default) + { + PlayableDirector.playableAsset = TimelineAsset; + } + } + public override IObservable OnConnectAsObservable() { InvokePlayableDirectorMethod(); @@ -51,10 +59,6 @@ public override IObservable OnConnectAsObservable() private void InvokePlayableDirectorMethod() { - if (TimelineAsset != default) - { - PlayableDirector.playableAsset = TimelineAsset; - } switch (PlayableControlMethod) { From aaf1062ff1138c188c0a17636a7b5f41b55f5404 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:32:48 +0900 Subject: [PATCH 239/453] :beetle: Fix attributes --- Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index f44b7a8..9ba89b6 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -22,17 +22,17 @@ [UsedImplicitly] public EventTriggerType EventTriggerType get => eventTriggerType; set => eventTriggerType = value; } - [ValuePublisher] public UIBehaviour UIBehaviour + [ValueReceiver] public UIBehaviour UIBehaviour { get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); set => uiBehaviour = value; } - [ValuePublisher] public bool ActivateBeforeConnect + [ValueReceiver] public bool ActivateBeforeConnect { get => activateBeforeConnect; set => activateBeforeConnect = value; } - [ValuePublisher] public bool DeactivateAfterConnect + [ValueReceiver] public bool DeactivateAfterConnect { get => deactivateAfterConnect; set => deactivateAfterConnect = value; From 63b0ecaee01e787ddd51bd2529d6e3684f68e6cf Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:33:09 +0900 Subject: [PATCH 240/453] :beetle: Publisher only set to public property --- Assets/Scripts/Connector/ValueProvider/ProviderBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index d2d6878..5c7fc12 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.ValueProvider public abstract class ProviderBase : ConnectorBase where TPublishEvent : UnityEvent, new() { [SerializeField] private TPublishEvent publisher = new TPublishEvent(); - [ValuePublisher("Value")] private TPublishEvent Publisher => publisher; + [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; protected abstract TValue Provide(); From d9d520fe7a642b05bbfcf8ebd8fe379871d39bc5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:33:29 +0900 Subject: [PATCH 241/453] :sparkles: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 3a03fe1..3540048 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -21,6 +21,8 @@ public enum ConnectorType ActivationController = 300, InstantiateGameObject, DestroyInstance, + ImageController, + RawImageController, SimpleAnimationController, SimpleAnimationEvent, AnimatorTrigger, @@ -33,6 +35,7 @@ public enum ConnectorType RaycasterController, RaycastTargetController, MoveParentTransform, + DontDestroyOnLoad, LoadScene = 400, LoadScene_Enum, From 0b64aa74d3c1390ff27344e9459e18b00da99efe Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 04:33:46 +0900 Subject: [PATCH 242/453] :sparkles: Add SelectorBase --- Assets/Scripts/Connector/ValueProvider/SelectorBase.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index e857af4..add74e2 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -3,6 +3,7 @@ using UniFlow.Attribute; using UnityEngine; using UnityEngine.Events; +using UnityEngine.EventSystems; // ReSharper disable ConvertIfStatementToReturnStatement @@ -33,6 +34,14 @@ public abstract class GameObjectSelectorBase : SelectorBase : SelectorBase + { + } + + public abstract class UIBehaviourSelectorBase : SelectorBase + { + } + public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum where TPublishEvent : UnityEvent, new() { } From 083fe57b4c06e947d0c36727f8a8affbbc4d1d42 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 15:42:35 +0900 Subject: [PATCH 243/453] :clipboard: Bump up version to v0.1.0-preview.23 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 050dbba..052fed6 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.22", + "version": "0.1.0-preview.23", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 9fcb1dae398529ade6f0d0ff61d9020d2274a99f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 15:46:27 +0900 Subject: [PATCH 244/453] :sparkles: Implement Timeline injector --- Assets/Scripts/Connector/ValueInjector.meta | 3 + .../Connector/ValueInjector/InjectorBase.cs | 26 +++++++++ .../ValueInjector/InjectorBase.cs.meta | 3 + .../Connector/ValueInjector/Timeline.meta | 3 + .../Timeline/AnimationTrackInjector.cs | 23 ++++++++ .../Timeline/AnimationTrackInjector.cs.meta | 3 + .../Timeline/AudioTrackInjector.cs | 23 ++++++++ .../Timeline/AudioTrackInjector.cs.meta | 3 + .../Timeline/ControlTrackInjector.cs | 36 ++++++++++++ .../Timeline/ControlTrackInjector.cs.meta | 3 + .../ValueInjector/TimelineInjectorBase.cs | 58 +++++++++++++++++++ .../TimelineInjectorBase.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 8 ++- 13 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 Assets/Scripts/Connector/ValueInjector.meta create mode 100644 Assets/Scripts/Connector/ValueInjector/InjectorBase.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/InjectorBase.cs.meta create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline.meta create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs.meta create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs.meta create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs.meta create mode 100644 Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueInjector.meta b/Assets/Scripts/Connector/ValueInjector.meta new file mode 100644 index 0000000..8feb001 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3284cdf11c92478186cfe6a387636323 +timeCreated: 1570081781 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs new file mode 100644 index 0000000..b5f631c --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.ValueInjector +{ + public abstract class InjectorBase : ConnectorBase + { + [SerializeField] private GameObject baseGameObject = default; + + [ValueReceiver] public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + + public override IObservable OnConnectAsObservable() + { + Inject(); + return Observable.ReturnUnit(); + } + + protected abstract void Inject(); + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs.meta b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs.meta new file mode 100644 index 0000000..6a5c32a --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 69fa4534cd3444f58c7a3fe2e9f60654 +timeCreated: 1570084445 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline.meta b/Assets/Scripts/Connector/ValueInjector/Timeline.meta new file mode 100644 index 0000000..b490fc7 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 55fb9b35de7d47e8baee6457911dab9a +timeCreated: 1570083246 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs new file mode 100644 index 0000000..d562c30 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.ValueInjector.Timeline +{ + [AddComponentMenu("UniFlow/ValueInjector/Timeline/AnimationTrack", (int) ConnectorType.ValueInjectorTimelineAnimationTrack)] + public class AnimationTrackInjector : TimelineInjectorBase + { + [SerializeField] private AnimationClip animationClip = default; + + [ValueReceiver] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } + + protected override void Inject(AnimationPlayableAsset playableAsset) + { + playableAsset.clip = AnimationClip; + } + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs.meta b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs.meta new file mode 100644 index 0000000..1e44516 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b6719f10f734474f97340b59bc411d13 +timeCreated: 1570083974 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs new file mode 100644 index 0000000..8c97bf8 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -0,0 +1,23 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.ValueInjector.Timeline +{ + [AddComponentMenu("UniFlow/ValueInjector/Timeline/AudioTrack", (int) ConnectorType.ValueInjectorTimelineAudioTrack)] + public class AudioTrackInjector : TimelineInjectorBase + { + [SerializeField] private AudioClip audioClip = default; + + [ValueReceiver] public AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } + + protected override void Inject(AudioPlayableAsset playableAsset) + { + playableAsset.clip = AudioClip; + } + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs.meta b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs.meta new file mode 100644 index 0000000..70d740a --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 046be94351354c25b22ecd1f6827aa52 +timeCreated: 1570083967 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs new file mode 100644 index 0000000..1a4baad --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -0,0 +1,36 @@ +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.ValueInjector.Timeline +{ + [AddComponentMenu("UniFlow/ValueInjector/Timeline/ControlTrack", (int) ConnectorType.ValueInjectorTimelineControlTrack)] + public class ControlTrackInjector : TimelineInjectorBase + { + [SerializeField] private GameObject sourceGameObject = default; + [SerializeField] private GameObject prefabGameObject = default; + + [ValueReceiver] public GameObject SourceGameObject + { + get => sourceGameObject; + set => sourceGameObject = value; + } + [ValueReceiver] public GameObject PrefabGameObject + { + get => prefabGameObject; + set => prefabGameObject = value; + } + + protected override void Inject(ControlPlayableAsset playableAsset) + { + if (SourceGameObject != default) + { + playableAsset.sourceGameObject.defaultValue = SourceGameObject; + } + if (PrefabGameObject != default) + { + playableAsset.prefabGameObject = PrefabGameObject; + } + } + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs.meta b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs.meta new file mode 100644 index 0000000..9f3838e --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ba8042ef59eb434382859013aca5b8e1 +timeCreated: 1570083246 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs new file mode 100644 index 0000000..8abc994 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs @@ -0,0 +1,58 @@ +using System.Linq; +using System.Text.RegularExpressions; +using UniFlow.Attribute; +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.ValueInjector +{ + public abstract class TimelineInjectorBase : InjectorBase where TPlayableAsset : PlayableAsset + { + [SerializeField] private PlayableDirector playableDirector = default; + [SerializeField] private string trackName = default; + [SerializeField] private string clipName = default; + + [ValueReceiver] public PlayableDirector PlayableDirector + { + get => + playableDirector != default + ? playableDirector + : playableDirector = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => playableDirector = value; + } + [ValueReceiver] public string TrackName + { + get => trackName; + set => trackName = value; + } + [ValueReceiver] public string ClipName + { + get => clipName; + set => clipName = value; + } + + protected override void Inject() + { + if (!(PlayableDirector.playableAsset is TimelineAsset timelineAsset)) + { + return; + } + + timelineAsset + .GetOutputTracks() + .Where(x => x != default && (string.IsNullOrEmpty(TrackName) || Regex.IsMatch(x.name, TrackName))) + .SelectMany(x => x.GetClips()) + .Where(x => x != default && (string.IsNullOrEmpty(ClipName) || Regex.IsMatch(x.displayName, TrackName))) + .Select(x => x.asset) + .OfType() + .ToList() + .ForEach(Inject); + } + + protected abstract void Inject(TPlayableAsset playableAsset); + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs.meta b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs.meta new file mode 100644 index 0000000..373828a --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bfe596f8205f4a8296c4e8606087f6eb +timeCreated: 1570081781 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 3540048..e3acbfb 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -21,8 +21,6 @@ public enum ConnectorType ActivationController = 300, InstantiateGameObject, DestroyInstance, - ImageController, - RawImageController, SimpleAnimationController, SimpleAnimationEvent, AnimatorTrigger, @@ -106,6 +104,12 @@ public enum ConnectorType ValueCombinerColor32, CustomValueCombiner, + ValueInjectorImage = 5000, + ValueInjectorRawImage, + ValueInjectorTimelineControlTrack, + ValueInjectorTimelineAudioTrack, + ValueInjectorTimelineAnimationTrack, + Timer = 9000, Interval, TimeScaleController, From 9dac41867eadde1dc2ad6385cb7996aca3fa2646 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 15:46:47 +0900 Subject: [PATCH 245/453] :truck: Move some controllers to injector --- .../ImageController.cs | 23 ++++++++----------- .../ImageController.cs.meta | 0 .../RawImageController.cs | 23 ++++++++----------- .../RawImageController.cs.meta | 0 4 files changed, 20 insertions(+), 26 deletions(-) rename Assets/Scripts/Connector/{Controller => ValueInjector}/ImageController.cs (57%) rename Assets/Scripts/Connector/{Controller => ValueInjector}/ImageController.cs.meta (100%) rename Assets/Scripts/Connector/{Controller => ValueInjector}/RawImageController.cs (53%) rename Assets/Scripts/Connector/{Controller => ValueInjector}/RawImageController.cs.meta (100%) diff --git a/Assets/Scripts/Connector/Controller/ImageController.cs b/Assets/Scripts/Connector/ValueInjector/ImageController.cs similarity index 57% rename from Assets/Scripts/Connector/Controller/ImageController.cs rename to Assets/Scripts/Connector/ValueInjector/ImageController.cs index cf7d56c..b290b70 100644 --- a/Assets/Scripts/Connector/Controller/ImageController.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageController.cs @@ -1,23 +1,16 @@ -using System; using UniFlow.Attribute; -using UniRx; +using UniFlow.Connector.ValueInjector; using UnityEngine; using UnityEngine.UI; namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/Controller/ImageController", (int) ConnectorType.ImageController)] - public class ImageController : ConnectorBase + [AddComponentMenu("UniFlow/Controller/ImageController", (int) ConnectorType.ValueInjectorImage)] + public class ImageController : InjectorBase { - [SerializeField] private GameObject baseGameObject = default; [SerializeField] private Image image = default; + [SerializeField] private Sprite sprite = default; - [ValueReceiver] public Sprite Sprite { get; set; } - [ValueReceiver] public GameObject BaseGameObject - { - get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; - } [ValueReceiver] public Image Image { get => @@ -29,11 +22,15 @@ [ValueReceiver] public Image Image : BaseGameObject.AddComponent(); set => image = value; } + [ValueReceiver] public Sprite Sprite + { + get => sprite; + set => sprite = value; + } - public override IObservable OnConnectAsObservable() + protected override void Inject() { Image.sprite = Sprite; - return Observable.ReturnUnit(); } } } diff --git a/Assets/Scripts/Connector/Controller/ImageController.cs.meta b/Assets/Scripts/Connector/ValueInjector/ImageController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Controller/ImageController.cs.meta rename to Assets/Scripts/Connector/ValueInjector/ImageController.cs.meta diff --git a/Assets/Scripts/Connector/Controller/RawImageController.cs b/Assets/Scripts/Connector/ValueInjector/RawImageController.cs similarity index 53% rename from Assets/Scripts/Connector/Controller/RawImageController.cs rename to Assets/Scripts/Connector/ValueInjector/RawImageController.cs index 89a44e8..f01d061 100644 --- a/Assets/Scripts/Connector/Controller/RawImageController.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageController.cs @@ -1,23 +1,16 @@ -using System; using UniFlow.Attribute; -using UniRx; +using UniFlow.Connector.ValueInjector; using UnityEngine; using UnityEngine.UI; namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/Controller/RawImageController", (int) ConnectorType.RawImageController)] - public class RawImageController : ConnectorBase + [AddComponentMenu("UniFlow/ValueInjector/RawImageInjector", (int) ConnectorType.ValueInjectorRawImage)] + public class RawImageController : InjectorBase { - [SerializeField] private GameObject baseGameObject = default; [SerializeField] private RawImage rawImage = default; + [SerializeField] private Texture texture = default; - [ValueReceiver] public Texture Texture { get; set; } - [ValueReceiver] public GameObject BaseGameObject - { - get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; - } [ValueReceiver] public RawImage RawImage { get => @@ -29,11 +22,15 @@ [ValueReceiver] public RawImage RawImage : BaseGameObject.AddComponent(); set => rawImage = value; } + [ValueReceiver] public Texture Texture + { + get => texture; + set => texture = value; + } - public override IObservable OnConnectAsObservable() + protected override void Inject() { RawImage.texture = Texture; - return Observable.ReturnUnit(); } } } diff --git a/Assets/Scripts/Connector/Controller/RawImageController.cs.meta b/Assets/Scripts/Connector/ValueInjector/RawImageController.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Controller/RawImageController.cs.meta rename to Assets/Scripts/Connector/ValueInjector/RawImageController.cs.meta From c2c3b4b576f46bd6c1e792a97a06cf66fd0d4216 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 15:53:55 +0900 Subject: [PATCH 246/453] :recycle: Sort fields to provide a common experience --- .../Connector/Controller/AnimatorTrigger.cs | 12 ++--- .../Connector/Controller/AudioController.cs | 24 +++++----- .../Controller/PlayableController.cs | 24 +++++----- .../Controller/SimpleAnimationController.cs | 46 +++++++++---------- .../Scripts/Connector/Event/AnimationEvent.cs | 36 +++++++-------- Assets/Scripts/Connector/Event/AudioEvent.cs | 30 +++++++----- Assets/Scripts/Connector/Event/CameraEvent.cs | 12 ++--- .../Scripts/Connector/Event/LifecycleEvent.cs | 12 ++--- Assets/Scripts/Connector/Event/MouseEvent.cs | 12 ++--- .../Scripts/Connector/Event/ParticleEvent.cs | 12 ++--- .../Event/PhysicsCollision2DEvent.cs | 12 ++--- .../Connector/Event/PhysicsCollisionEvent.cs | 12 ++--- .../Connector/Event/PhysicsTrigger2DEvent.cs | 12 ++--- .../Connector/Event/PhysicsTriggerEvent.cs | 12 ++--- .../Connector/Event/RectTransformEvent.cs | 12 ++--- .../Connector/Event/SimpleAnimationEvent.cs | 26 +++++------ .../Scripts/Connector/Event/TimelineEvent.cs | 24 +++++----- .../Scripts/Connector/Event/TransformEvent.cs | 12 ++--- .../Event/UIBehaviourEventTrigger.cs | 16 +++++-- 19 files changed, 185 insertions(+), 173 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 5bf70c1..d24d8e7 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -8,17 +8,12 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] public class AnimatorTrigger : ConnectorBase { - [SerializeField] private string triggerName = default; [SerializeField] private GameObject baseGameObject = default; [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private Animator animator = default; + [SerializeField] private string triggerName = default; - [ValueReceiver] public string TriggerName - { - get => triggerName; - set => triggerName = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -29,6 +24,11 @@ [ValueReceiver] public Animator Animator get => animator ? animator : animator = BaseGameObject.GetComponent(); set => animator = value; } + [ValueReceiver] public string TriggerName + { + get => triggerName; + set => triggerName = value; + } private int TriggerId => Animator.StringToHash(TriggerName); diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index a923fa0..5e86529 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -9,23 +9,13 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] public class AudioController : ConnectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private AudioSource audioSource = default; [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - [SerializeField] private GameObject baseGameObject = default; - [SerializeField] private AudioSource audioSource = default; - [UsedImplicitly] public AudioControlMethod AudioControlMethod - { - get => audioControlMethod; - set => audioControlMethod = value; - } - [ValueReceiver] public AudioClip AudioClip - { - get => audioClip; - set => audioClip = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -42,6 +32,16 @@ [ValueReceiver] public AudioSource AudioSource : BaseGameObject.AddComponent(); set => audioSource = value; } + [UsedImplicitly] public AudioControlMethod AudioControlMethod + { + get => audioControlMethod; + set => audioControlMethod = value; + } + [ValueReceiver] public AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index b8214f0..c529484 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -11,21 +11,11 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/PlayableController", (int) ConnectorType.PlayableController)] public class PlayableController : ConnectorBase { - [SerializeField] private PlayableControlMethod playableControlMethod = PlayableControlMethod.Play; - [SerializeField] private TimelineAsset timelineAsset = default; [SerializeField] private GameObject baseGameObject = default; [SerializeField] private PlayableDirector playableDirector = default; + [SerializeField] private PlayableControlMethod playableControlMethod = PlayableControlMethod.Play; + [SerializeField] private TimelineAsset timelineAsset = default; - [UsedImplicitly] public PlayableControlMethod PlayableControlMethod - { - get => playableControlMethod; - set => playableControlMethod = value; - } - [ValueReceiver] public TimelineAsset TimelineAsset - { - get => timelineAsset; - set => timelineAsset = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -42,6 +32,16 @@ [ValueReceiver] public PlayableDirector PlayableDirector : BaseGameObject.AddComponent(); set => playableDirector = value; } + [UsedImplicitly] public PlayableControlMethod PlayableControlMethod + { + get => playableControlMethod; + set => playableControlMethod = value; + } + [ValueReceiver] public TimelineAsset TimelineAsset + { + get => timelineAsset; + set => timelineAsset = value; + } private void Awake() { diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index cd34dca..8b77b03 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -10,36 +10,16 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] public class SimpleAnimationController : ConnectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = SimpleAnimationControlMethod.Play; [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - [SerializeField] private GameObject baseGameObject = default; - [SerializeField] private Animator animator = default; - [SerializeField] private SimpleAnimation simpleAnimation = default; - [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod - { - get => simpleAnimationControlMethod; - set => simpleAnimationControlMethod = value; - } - [ValueReceiver] public AnimationClip AnimationClip - { - get => animationClip; - set => animationClip = value; - } - [ValueReceiver] public AnimatorCullingMode CullingMode - { - get => cullingMode; - set => cullingMode = value; - } - [ValueReceiver] public AnimatorUpdateMode UpdateMode - { - get => updateMode; - set => updateMode = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -68,6 +48,26 @@ [ValueReceiver] public SimpleAnimation SimpleAnimation ; set => simpleAnimation = value; } + [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod + { + get => simpleAnimationControlMethod; + set => simpleAnimationControlMethod = value; + } + [ValueReceiver] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } + [ValueReceiver] public AnimatorCullingMode CullingMode + { + get => cullingMode; + set => cullingMode = value; + } + [ValueReceiver] public AnimatorUpdateMode UpdateMode + { + get => updateMode; + set => updateMode = value; + } private IDisposable Disposable { get; } = new CompositeDisposable(); diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 0833db7..2885be2 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -11,31 +11,16 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/AnimationEvent", (int) ConnectorType.AnimationEvent)] public class AnimationEvent : ConnectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] [Tooltip("If you do not specify it will be used SimpleAnimation setting")] private AnimationClip animationClip = default; [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - [SerializeField] private GameObject baseGameObject = default; - [SerializeField] private Animator animator = default; - [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] private PublishAnimationEventEvent publisher = new PublishAnimationEventEvent(); - [ValueReceiver] public AnimationClip AnimationClip - { - get => animationClip; - set => animationClip = value; - } - [ValueReceiver] public AnimatorCullingMode CullingMode - { - get => cullingMode; - set => cullingMode = value; - } - [ValueReceiver] public AnimatorUpdateMode UpdateMode - { - get => updateMode; - set => updateMode = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -64,6 +49,21 @@ [ValueReceiver] public SimpleAnimation SimpleAnimation ; set => simpleAnimation = value; } + [ValueReceiver] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } + [ValueReceiver] public AnimatorCullingMode CullingMode + { + get => cullingMode; + set => cullingMode = value; + } + [ValueReceiver] public AnimatorUpdateMode UpdateMode + { + get => updateMode; + set => updateMode = value; + } [ValuePublisher] public UnityEvent Publisher => publisher; diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 4d8a555..4cde785 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -9,21 +9,17 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] public class AudioEvent : ConnectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private AudioSource audioSource = default; [SerializeField] private AudioEventType audioEventType = AudioEventType.Play; [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - [SerializeField] private AudioSource audioSource = default; - [UsedImplicitly] public AudioEventType AudioEventType - { - get => audioEventType; - set => audioEventType = value; - } - [ValueReceiver] public AudioClip AudioClip + [ValueReceiver] public GameObject BaseGameObject { - get => audioClip; - set => audioClip = value; + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; } [ValueReceiver] public AudioSource AudioSource { @@ -31,11 +27,21 @@ [ValueReceiver] public AudioSource AudioSource audioSource != default ? audioSource : audioSource = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); set => audioSource = value; } + [UsedImplicitly] public AudioEventType AudioEventType + { + get => audioEventType; + set => audioEventType = value; + } + [ValueReceiver] public AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } private IReadOnlyReactiveProperty> TimePair { get; set; } diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 69d4952..cd2a205 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/CameraEvent", (int) ConnectorType.CameraEvent)] public class CameraEvent : ConnectorBase { - [SerializeField] private CameraEventType cameraEventType = CameraEventType.BecomeVisible; [SerializeField] private Component component = default; + [SerializeField] private CameraEventType cameraEventType = CameraEventType.BecomeVisible; - [UsedImplicitly] public CameraEventType CameraEventType - { - get => cameraEventType; - set => cameraEventType = value; - } [ValueReceiver] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public CameraEventType CameraEventType + { + get => cameraEventType; + set => cameraEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index eea234a..a0f8cfc 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/LifecycleEvent", (int) ConnectorType.LifecycleEvent)] public class LifecycleEvent : ConnectorBase { - [SerializeField] private LifecycleEventType lifecycleEventType = LifecycleEventType.Start; [SerializeField] private Component component = default; + [SerializeField] private LifecycleEventType lifecycleEventType = LifecycleEventType.Start; - [UsedImplicitly] public LifecycleEventType LifecycleEventType - { - get => lifecycleEventType; - set => lifecycleEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public LifecycleEventType LifecycleEventType + { + get => lifecycleEventType; + set => lifecycleEventType = value; + } private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 79cf541..eaf4707 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/MouseEvent", (int) ConnectorType.MouseEvent)] public class MouseEvent : ConnectorBase { - [SerializeField] private MouseEventType mouseEventType = MouseEventType.MouseDown; [SerializeField] private Component component = default; + [SerializeField] private MouseEventType mouseEventType = MouseEventType.MouseDown; - [UsedImplicitly] public MouseEventType MouseEventType - { - get => mouseEventType; - set => mouseEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public MouseEventType MouseEventType + { + get => mouseEventType; + set => mouseEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index e6ea8e8..e9a3fa6 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/ParticleEvent", (int) ConnectorType.ParticleEvent)] public class ParticleEvent : ConnectorBase { - [SerializeField] private ParticleEventType particleEventType = ParticleEventType.ParticleCollision; [SerializeField] private Component component = default; + [SerializeField] private ParticleEventType particleEventType = ParticleEventType.ParticleCollision; - [UsedImplicitly] public ParticleEventType ParticleEventType - { - get => particleEventType; - set => particleEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public ParticleEventType ParticleEventType + { + get => particleEventType; + set => particleEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index ef0b2e8..ba11577 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhysicsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] public class PhysicsCollision2DEvent : ConnectorBase { - [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = PhysicsCollision2DEventType.CollisionEnter2D; [SerializeField] private Component component = default; + [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = PhysicsCollision2DEventType.CollisionEnter2D; - [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType - { - get => physicsCollision2DEventType; - set => physicsCollision2DEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType + { + get => physicsCollision2DEventType; + set => physicsCollision2DEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index 734c228..fc13bd6 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] public class PhysicsCollisionEvent : ConnectorBase { - [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = PhysicsCollisionEventType.CollisionEnter; + [ValuePublisher] public Component Component + { + get => component ? component : component = this; + set => component = value; + } [SerializeField] private Component component = default; + [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = PhysicsCollisionEventType.CollisionEnter; [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType { get => physicsCollisionEventType; set => physicsCollisionEventType = value; } - [ValuePublisher] public Component Component - { - get => component ? component : component = this; - set => component = value; - } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 1724c0e..57e092a 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] public class PhysicsTrigger2DEvent : ConnectorBase { - [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = PhysicsTrigger2DEventType.TriggerEnter2D; + [ValuePublisher] public Component Component + { + get => component ? component : component = this; + set => component = value; + } [SerializeField] private Component component = default; + [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = PhysicsTrigger2DEventType.TriggerEnter2D; [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType { get => physicsTrigger2DEventType; set => physicsTrigger2DEventType = value; } - [ValuePublisher] public Component Component - { - get => component ? component : component = this; - set => component = value; - } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 6e0a06b..7600bd6 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/PhysicsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] public class PhysicsTriggerEvent : ConnectorBase { - [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = PhysicsTriggerEventType.TriggerEnter; [SerializeField] private Component component = default; + [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = PhysicsTriggerEventType.TriggerEnter; - [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType - { - get => physicsTriggerEventType; - set => physicsTriggerEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType + { + get => physicsTriggerEventType; + set => physicsTriggerEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index b6726e8..afcadb7 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] public class RectTransformEvent : ConnectorBase { - [SerializeField] private RectTransformEventType rectTransformEventType = RectTransformEventType.CanvasGroupChanged; [SerializeField] private Component component = default; + [SerializeField] private RectTransformEventType rectTransformEventType = RectTransformEventType.CanvasGroupChanged; - [UsedImplicitly] public RectTransformEventType RectTransformEventType - { - get => rectTransformEventType; - set => rectTransformEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public RectTransformEventType RectTransformEventType + { + get => rectTransformEventType; + set => rectTransformEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 5c4a6eb..8b24577 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -10,24 +10,14 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] public class SimpleAnimationEvent : ConnectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private Animator animator = default; + [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = SimpleAnimationEventType.Play; [SerializeField] [Tooltip("If you do not specify it will not be filtered")] private AnimationClip animationClip = default; - [SerializeField] private GameObject baseGameObject = default; - [SerializeField] private Animator animator = default; - [SerializeField] private SimpleAnimation simpleAnimation = default; - [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType - { - get => simpleAnimationEventType; - set => simpleAnimationEventType = value; - } - [ValuePublisher] public AnimationClip AnimationClip - { - get => animationClip; - set => animationClip = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -56,6 +46,16 @@ [ValuePublisher] public SimpleAnimation SimpleAnimation ; set => simpleAnimation = value; } + [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType + { + get => simpleAnimationEventType; + set => simpleAnimationEventType = value; + } + [ValuePublisher] public AnimationClip AnimationClip + { + get => animationClip; + set => animationClip = value; + } private ISubject<(SimpleAnimationEventType eventType, AnimationClip animationClip)> CurrentStateSubject { get; } = new Subject<(SimpleAnimationEventType, AnimationClip)>(); diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index df6c542..b0afeee 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -14,21 +14,11 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/TimelineEvent", (int) ConnectorType.TimelineEvent)] public class TimelineEvent : ConnectorBase { - [SerializeField] private TimelineEventType timelineEventType = TimelineEventType.Play; - [SerializeField] private TimelineAsset timelineAsset = default; [SerializeField] private GameObject baseGameObject = default; [SerializeField] private PlayableDirector playableDirector = default; + [SerializeField] private TimelineEventType timelineEventType = TimelineEventType.Play; + [SerializeField] private TimelineAsset timelineAsset = default; - [UsedImplicitly] public TimelineEventType TimelineEventType - { - get => timelineEventType; - set => timelineEventType = value; - } - [ValuePublisher] public TimelineAsset TimelineAsset - { - get => timelineAsset; - set => timelineAsset = value; - } [ValueReceiver] public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; @@ -45,6 +35,16 @@ [ValuePublisher] public PlayableDirector PlayableDirector : BaseGameObject.AddComponent(); set => playableDirector = value; } + [UsedImplicitly] public TimelineEventType TimelineEventType + { + get => timelineEventType; + set => timelineEventType = value; + } + [ValuePublisher] public TimelineAsset TimelineAsset + { + get => timelineAsset; + set => timelineAsset = value; + } private static Begin beginSignal = default; private static End endSignal = default; diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index e45719f..4ee72d4 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -10,19 +10,19 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/TransformEvent", (int) ConnectorType.TransformEvent)] public class TransformEvent : ConnectorBase { - [SerializeField] private TransformEventType transformEventType = TransformEventType.TransformChildrenChanged; [SerializeField] private Component component = default; + [SerializeField] private TransformEventType transformEventType = TransformEventType.TransformChildrenChanged; - [UsedImplicitly] public TransformEventType TransformEventType - { - get => transformEventType; - set => transformEventType = value; - } [ValuePublisher] public Component Component { get => component ? component : component = this; set => component = value; } + [UsedImplicitly] public TransformEventType TransformEventType + { + get => transformEventType; + set => transformEventType = value; + } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 9ba89b6..718b483 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -12,21 +12,27 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] public class UIBehaviourEventTrigger : ConnectorBase { - [SerializeField] private EventTriggerType eventTriggerType = EventTriggerType.PointerClick; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private UIBehaviour uiBehaviour = default; + [SerializeField] private EventTriggerType eventTriggerType = EventTriggerType.PointerClick; [SerializeField] private bool activateBeforeConnect = default; [SerializeField] private bool deactivateAfterConnect = default; - [UsedImplicitly] public EventTriggerType EventTriggerType + [ValueReceiver] public GameObject BaseGameObject { - get => eventTriggerType; - set => eventTriggerType = value; + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; } [ValueReceiver] public UIBehaviour UIBehaviour { - get => uiBehaviour ? uiBehaviour : uiBehaviour = GetComponent(); + get => uiBehaviour ? uiBehaviour : uiBehaviour = BaseGameObject.GetComponent(); set => uiBehaviour = value; } + [UsedImplicitly] public EventTriggerType EventTriggerType + { + get => eventTriggerType; + set => eventTriggerType = value; + } [ValueReceiver] public bool ActivateBeforeConnect { get => activateBeforeConnect; From 80286c010f86c63f9519b07965d0b16608c7e959 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 16:05:47 +0900 Subject: [PATCH 247/453] :sparkles: Sort in SearchWindow --- Assets/Editor/Scripts/SearchWindowProvider.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index b7e49e9..8240de9 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -23,13 +23,14 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider { "Controller", "Event", + "Logic", + "Receiver", + "Misc", "ValueProvider", "ValueComparer", "ValueExtractor", "ValueCombiner", - "Logic", - "Receiver", - "Misc", + "ValueInjector", }; public void Initialize(FlowGraphView flowGraphView) From 626c96742d765e5b3f3d8b6678285310cfb7e04a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 16:06:02 +0900 Subject: [PATCH 248/453] :name_badge: Rename component menu --- .../ValueInjector/{ImageController.cs => ImageInjector.cs} | 4 ++-- .../{ImageController.cs.meta => ImageInjector.cs.meta} | 0 .../{RawImageController.cs => RawImageInjector.cs} | 2 +- .../{RawImageController.cs.meta => RawImageInjector.cs.meta} | 0 4 files changed, 3 insertions(+), 3 deletions(-) rename Assets/Scripts/Connector/ValueInjector/{ImageController.cs => ImageInjector.cs} (85%) rename Assets/Scripts/Connector/ValueInjector/{ImageController.cs.meta => ImageInjector.cs.meta} (100%) rename Assets/Scripts/Connector/ValueInjector/{RawImageController.cs => RawImageInjector.cs} (95%) rename Assets/Scripts/Connector/ValueInjector/{RawImageController.cs.meta => RawImageInjector.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/ValueInjector/ImageController.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs similarity index 85% rename from Assets/Scripts/Connector/ValueInjector/ImageController.cs rename to Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index b290b70..81a946c 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageController.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -5,8 +5,8 @@ namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/Controller/ImageController", (int) ConnectorType.ValueInjectorImage)] - public class ImageController : InjectorBase + [AddComponentMenu("UniFlow/ValueInjector/ImageInjector", (int) ConnectorType.ValueInjectorImage)] + public class ImageInjector : InjectorBase { [SerializeField] private Image image = default; [SerializeField] private Sprite sprite = default; diff --git a/Assets/Scripts/Connector/ValueInjector/ImageController.cs.meta b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueInjector/ImageController.cs.meta rename to Assets/Scripts/Connector/ValueInjector/ImageInjector.cs.meta diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageController.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs similarity index 95% rename from Assets/Scripts/Connector/ValueInjector/RawImageController.cs rename to Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index f01d061..1d7d424 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageController.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/ValueInjector/RawImageInjector", (int) ConnectorType.ValueInjectorRawImage)] - public class RawImageController : InjectorBase + public class RawImageInjector : InjectorBase { [SerializeField] private RawImage rawImage = default; [SerializeField] private Texture texture = default; diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageController.cs.meta b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueInjector/RawImageController.cs.meta rename to Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs.meta From 89de6dbba247cd2c6a0d49402a924ce9606c00aa Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 16:18:15 +0900 Subject: [PATCH 249/453] :sparkles: Fix search window directory order --- Assets/Editor/Scripts/SearchWindowProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 8240de9..01ad07a 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -55,7 +55,7 @@ public void Initialize(FlowGraphView flowGraphView) .Select(x => (menu: x.GetCustomAttributes(typeof(AddComponentMenu), false).OfType().First(), type: x)) .Select(x => (x.menu, x.type, entries: x.menu.componentMenu.Split('/').Skip(1).ToArray())) .Select(x => (x.menu, x.type, x.entries, directory: x.entries.Take(x.entries.Length - 1).Aggregate((a, b) => $"{a}/{b}"))) - .Select(x => (x.menu, x.type, x.entries, x.directory, directoryOrder: DirectoryOrder.Contains(x.directory) ? DirectoryOrder.Select((directory, index) => (directory, index)).First(y => y.directory == x.directory).index : int.MaxValue)) + .Select(x => (x.menu, x.type, x.entries, x.directory, directoryOrder: DirectoryOrder.Contains(x.entries.FirstOrDefault()) ? DirectoryOrder.Select((directory, index) => (directory, index)).First(y => y.directory == x.entries.FirstOrDefault()).index : int.MaxValue)) .OrderBy(x => x.directoryOrder) .ThenBy(x => x.menu.componentOrder) .ToList() From c384d863c5213b6afe9f4ef3dd3c645bf711620e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 16:31:43 +0900 Subject: [PATCH 250/453] :recycle: Tweak fields order --- .../Connector/ValueInjector/ImageInjector.cs | 6 ++++ .../Connector/ValueInjector/InjectorBase.cs | 8 +---- .../ValueInjector/RawImageInjector.cs | 6 ++++ .../Timeline/AnimationTrackInjector.cs | 31 +++++++++++++++++++ .../Timeline/AudioTrackInjector.cs | 31 +++++++++++++++++++ .../Timeline/ControlTrackInjector.cs | 31 +++++++++++++++++++ .../ValueInjector/TimelineInjectorBase.cs | 29 ++--------------- 7 files changed, 109 insertions(+), 33 deletions(-) diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index 81a946c..35e708a 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -8,9 +8,15 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/ValueInjector/ImageInjector", (int) ConnectorType.ValueInjectorImage)] public class ImageInjector : InjectorBase { + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private Image image = default; [SerializeField] private Sprite sprite = default; + [ValueReceiver] public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValueReceiver] public Image Image { get => diff --git a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs index b5f631c..4e01f27 100644 --- a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs @@ -7,13 +7,7 @@ namespace UniFlow.Connector.ValueInjector { public abstract class InjectorBase : ConnectorBase { - [SerializeField] private GameObject baseGameObject = default; - - [ValueReceiver] public GameObject BaseGameObject - { - get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; - } + [ValueReceiver] public abstract GameObject BaseGameObject { get; set; } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index 1d7d424..6c906dc 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -8,9 +8,15 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/ValueInjector/RawImageInjector", (int) ConnectorType.ValueInjectorRawImage)] public class RawImageInjector : InjectorBase { + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private RawImage rawImage = default; [SerializeField] private Texture texture = default; + [ValueReceiver] public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } [ValueReceiver] public RawImage RawImage { get => diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index d562c30..92079f7 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -1,5 +1,6 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Playables; using UnityEngine.Timeline; namespace UniFlow.Connector.ValueInjector.Timeline @@ -7,8 +8,38 @@ namespace UniFlow.Connector.ValueInjector.Timeline [AddComponentMenu("UniFlow/ValueInjector/Timeline/AnimationTrack", (int) ConnectorType.ValueInjectorTimelineAnimationTrack)] public class AnimationTrackInjector : TimelineInjectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private PlayableDirector playableDirector = default; + [SerializeField] private string trackName = default; + [SerializeField] private string clipName = default; [SerializeField] private AnimationClip animationClip = default; + [ValueReceiver] public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + [ValueReceiver] public override PlayableDirector PlayableDirector + { + get => + playableDirector != default + ? playableDirector + : playableDirector = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => playableDirector = value; + } + [ValueReceiver] public override string TrackName + { + get => trackName; + set => trackName = value; + } + [ValueReceiver] public override string ClipName + { + get => clipName; + set => clipName = value; + } [ValueReceiver] public AnimationClip AnimationClip { get => animationClip; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 8c97bf8..af59c8e 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -1,5 +1,6 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Playables; using UnityEngine.Timeline; namespace UniFlow.Connector.ValueInjector.Timeline @@ -7,8 +8,38 @@ namespace UniFlow.Connector.ValueInjector.Timeline [AddComponentMenu("UniFlow/ValueInjector/Timeline/AudioTrack", (int) ConnectorType.ValueInjectorTimelineAudioTrack)] public class AudioTrackInjector : TimelineInjectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private PlayableDirector playableDirector = default; + [SerializeField] private string trackName = default; + [SerializeField] private string clipName = default; [SerializeField] private AudioClip audioClip = default; + [ValueReceiver] public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + [ValueReceiver] public override PlayableDirector PlayableDirector + { + get => + playableDirector != default + ? playableDirector + : playableDirector = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => playableDirector = value; + } + [ValueReceiver] public override string TrackName + { + get => trackName; + set => trackName = value; + } + [ValueReceiver] public override string ClipName + { + get => clipName; + set => clipName = value; + } [ValueReceiver] public AudioClip AudioClip { get => audioClip; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 1a4baad..fef4eae 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -1,5 +1,6 @@ using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Playables; using UnityEngine.Timeline; namespace UniFlow.Connector.ValueInjector.Timeline @@ -7,9 +8,39 @@ namespace UniFlow.Connector.ValueInjector.Timeline [AddComponentMenu("UniFlow/ValueInjector/Timeline/ControlTrack", (int) ConnectorType.ValueInjectorTimelineControlTrack)] public class ControlTrackInjector : TimelineInjectorBase { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private PlayableDirector playableDirector = default; + [SerializeField] private string trackName = default; + [SerializeField] private string clipName = default; [SerializeField] private GameObject sourceGameObject = default; [SerializeField] private GameObject prefabGameObject = default; + [ValueReceiver] public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + [ValueReceiver] public override PlayableDirector PlayableDirector + { + get => + playableDirector != default + ? playableDirector + : playableDirector = + BaseGameObject.GetComponent() != default + ? BaseGameObject.GetComponent() + : BaseGameObject.AddComponent(); + set => playableDirector = value; + } + [ValueReceiver] public override string TrackName + { + get => trackName; + set => trackName = value; + } + [ValueReceiver] public override string ClipName + { + get => clipName; + set => clipName = value; + } [ValueReceiver] public GameObject SourceGameObject { get => sourceGameObject; diff --git a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs index 8abc994..1e4f81b 100644 --- a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs @@ -1,7 +1,6 @@ using System.Linq; using System.Text.RegularExpressions; using UniFlow.Attribute; -using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -9,31 +8,9 @@ namespace UniFlow.Connector.ValueInjector { public abstract class TimelineInjectorBase : InjectorBase where TPlayableAsset : PlayableAsset { - [SerializeField] private PlayableDirector playableDirector = default; - [SerializeField] private string trackName = default; - [SerializeField] private string clipName = default; - - [ValueReceiver] public PlayableDirector PlayableDirector - { - get => - playableDirector != default - ? playableDirector - : playableDirector = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); - set => playableDirector = value; - } - [ValueReceiver] public string TrackName - { - get => trackName; - set => trackName = value; - } - [ValueReceiver] public string ClipName - { - get => clipName; - set => clipName = value; - } + [ValueReceiver] public abstract PlayableDirector PlayableDirector { get; set; } + [ValueReceiver] public abstract string TrackName { get; set; } + [ValueReceiver] public abstract string ClipName { get; set; } protected override void Inject() { From 4b9e80451ab64d20f540a704cedcbccdbb339bcd Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 16:49:21 +0900 Subject: [PATCH 251/453] :beetle: Set reference correctly * How to change for playing timeline...? --- .../Connector/ValueInjector/Timeline/ControlTrackInjector.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index fef4eae..8cdac9a 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -56,7 +56,7 @@ protected override void Inject(ControlPlayableAsset playableAsset) { if (SourceGameObject != default) { - playableAsset.sourceGameObject.defaultValue = SourceGameObject; + PlayableDirector.SetReferenceValue(playableAsset.sourceGameObject.exposedName, SourceGameObject); } if (PrefabGameObject != default) { From 2facfcc8c81accb9fd7e1d3c65da92c0ee266fdb Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 3 Oct 2019 16:49:55 +0900 Subject: [PATCH 252/453] :fire: Remove unnecessary attributes --- Assets/Scripts/Connector/ValueInjector/InjectorBase.cs | 3 +-- .../Connector/ValueInjector/TimelineInjectorBase.cs | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs index 4e01f27..89e0ee7 100644 --- a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs @@ -1,5 +1,4 @@ using System; -using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -7,7 +6,7 @@ namespace UniFlow.Connector.ValueInjector { public abstract class InjectorBase : ConnectorBase { - [ValueReceiver] public abstract GameObject BaseGameObject { get; set; } + public abstract GameObject BaseGameObject { get; set; } public override IObservable OnConnectAsObservable() { diff --git a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs index 1e4f81b..705b4f3 100644 --- a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs @@ -1,6 +1,5 @@ using System.Linq; using System.Text.RegularExpressions; -using UniFlow.Attribute; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -8,9 +7,9 @@ namespace UniFlow.Connector.ValueInjector { public abstract class TimelineInjectorBase : InjectorBase where TPlayableAsset : PlayableAsset { - [ValueReceiver] public abstract PlayableDirector PlayableDirector { get; set; } - [ValueReceiver] public abstract string TrackName { get; set; } - [ValueReceiver] public abstract string ClipName { get; set; } + public abstract PlayableDirector PlayableDirector { get; set; } + public abstract string TrackName { get; set; } + public abstract string ClipName { get; set; } protected override void Inject() { From 8155b5bd37b866c3d942aa0d870ecfc487aa40da Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 4 Oct 2019 02:49:24 +0900 Subject: [PATCH 253/453] :sparkles: Add ObservableReceiver --- Assets/Scripts/Receiver/ObservableReceiver.cs | 9 +++++++++ Assets/Scripts/Receiver/ObservableReceiver.cs.meta | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 Assets/Scripts/Receiver/ObservableReceiver.cs create mode 100644 Assets/Scripts/Receiver/ObservableReceiver.cs.meta diff --git a/Assets/Scripts/Receiver/ObservableReceiver.cs b/Assets/Scripts/Receiver/ObservableReceiver.cs new file mode 100644 index 0000000..1d5fc59 --- /dev/null +++ b/Assets/Scripts/Receiver/ObservableReceiver.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace UniFlow.Receiver +{ + [AddComponentMenu("UniFlow/Receiver/ObservableReceiver", (int) ConnectorType.Receiver)] + public class ObservableReceiver : ObservableReceiverBase + { + } +} diff --git a/Assets/Scripts/Receiver/ObservableReceiver.cs.meta b/Assets/Scripts/Receiver/ObservableReceiver.cs.meta new file mode 100644 index 0000000..c64239f --- /dev/null +++ b/Assets/Scripts/Receiver/ObservableReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: feb3f126ca1a492d8b187534467def01 +timeCreated: 1570121105 \ No newline at end of file From def6cbed89546fb2574467eb67cc75032b16119b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 4 Oct 2019 02:50:36 +0900 Subject: [PATCH 254/453] :beetle: Fixed an issue that sometimes caused timeline event preparation to fail --- Assets/Scripts/Connector/Event/TimelineEvent.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index b0afeee..7a52be8 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -78,10 +78,9 @@ private static End EndSignal private ISubject SignalEmittedSubject { get; } = new Subject(); - protected override void Start() + private void Awake() { RegisterSignal(); - base.Start(); } private void OnDestroy() From 113d1d755a3acbfbb93537ec8bd6682fd8f2f166 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 4 Oct 2019 02:51:15 +0900 Subject: [PATCH 255/453] :beetle: Corrected the property to be used --- Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs index 705b4f3..22defaa 100644 --- a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs @@ -22,7 +22,7 @@ protected override void Inject() .GetOutputTracks() .Where(x => x != default && (string.IsNullOrEmpty(TrackName) || Regex.IsMatch(x.name, TrackName))) .SelectMany(x => x.GetClips()) - .Where(x => x != default && (string.IsNullOrEmpty(ClipName) || Regex.IsMatch(x.displayName, TrackName))) + .Where(x => x != default && (string.IsNullOrEmpty(ClipName) || Regex.IsMatch(x.displayName, ClipName))) .Select(x => x.asset) .OfType() .ToList() From 055d0c334437b41082a6484148cf963c8ff06078 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 4 Oct 2019 02:52:44 +0900 Subject: [PATCH 256/453] :clipboard: Bump up version to v0.1.0-preview.24 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 052fed6..3241345 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.23", + "version": "0.1.0-preview.24", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 867aa5d5550753724ee120029050a8e475d124c6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 4 Oct 2019 02:59:52 +0900 Subject: [PATCH 257/453] :memo: Update CHANGELOG --- Assets/CHANGELOG.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index fcd3038..c6eb034 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,6 +1,17 @@ # Changelog -## [0.1.0-preview.23] - 2019-10- +## [0.1.0-preview.24] - 2019-10-04 + +### Implementations + +* Add `ObservableReceiver` to receive as `IObservable` + +### Fixes + +* Fixed an issue that sometimes caused timeline event preparation to fail +* Corrected the field to be used + +## [0.1.0-preview.23] - 2019-10-03 ### Breaking Changes From 3f3ca42ccfb6400513a14507bcbd69493613c7c4 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Wed, 25 Sep 2019 16:24:24 +0900 Subject: [PATCH 258/453] :sparkles: Implement UnloadSceneEvent --- .../Connector/Event/UnloadSceneEvent.cs | 43 +++++++++++++++++++ .../Connector/Event/UnloadSceneEvent.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 1 + 3 files changed, 47 insertions(+) create mode 100644 Assets/Scripts/Connector/Event/UnloadSceneEvent.cs create mode 100644 Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta diff --git a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs new file mode 100644 index 0000000..5195994 --- /dev/null +++ b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs @@ -0,0 +1,43 @@ +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/UnloadSceneEvent", (int) ConnectorType.UnloadSceneEvent)] + public class UnloadSceneEvent : ConnectorBase + { + [SerializeField] private string sceneName = default; + + [UsedImplicitly] public string SceneName + { + get => sceneName; + set => sceneName = value; + } + + private ISubject Subject { get; } = new Subject(); + + public override IObservable OnConnectAsObservable() => Subject; + + protected override void Start() + { + base.Start(); + SceneManager.sceneUnloaded += DidUnloadScene; + } + + private void OnDestroy() + { + SceneManager.sceneUnloaded -= DidUnloadScene; + } + + private void DidUnloadScene(Scene unloadedScene) + { + if (unloadedScene.name == SceneName) + { + Subject.OnNext(Unit.Default); + } + } + } +} diff --git a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta new file mode 100644 index 0000000..72bd635 --- /dev/null +++ b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: acad2337f85040d398d5626fa6914067 +timeCreated: 1569396014 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index e3acbfb..840b59a 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -39,6 +39,7 @@ public enum ConnectorType LoadScene_Enum, UnloadScene, UnloadScene_Enum, + UnloadSceneEvent, ValueProviderBool = 1000, ValueProviderByte, From 984aeb99610182bf975a34ce2c15f95cf2b1d0ee Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Sat, 5 Oct 2019 02:17:06 +0900 Subject: [PATCH 259/453] :sparkles: Add CanvasGroup into the target of RaycastTargetController --- .../Controller/RaycastTargetController.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 27c2d51..44268fb 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -15,6 +15,7 @@ public class RaycastTargetController : ConnectorBase [SerializeField] private List graphics = default; [SerializeField] private List colliders = default; [SerializeField] private List collider2Ds = default; + [SerializeField] private List canvasGroups = default; [UsedImplicitly] private RaycastTargetControlMethod RaycastTargetControlMethod { @@ -36,6 +37,11 @@ [UsedImplicitly] public IEnumerable Collider2Ds get => collider2Ds; set => collider2Ds = value.ToList(); } + [UsedImplicitly] public IEnumerable CanvasGroups + { + get => canvasGroups; + set => canvasGroups = value.ToList(); + } private IDisposable Disposable { get; } = new CompositeDisposable(); @@ -63,6 +69,11 @@ private void HandleActivation() .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) ) + .Concat( + CanvasGroups + .Where(x => x.blocksRaycasts != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.blocksRaycasts = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) .Concat( GetComponents() .Where(x => x.raycastTarget != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) @@ -78,6 +89,11 @@ private void HandleActivation() .Where(x => x.enabled != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) .Select(x => new Action(() => x.enabled = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) ) + .Concat( + GetComponents() + .Where(x => x.blocksRaycasts != (RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + .Select(x => new Action(() => x.blocksRaycasts = RaycastTargetControlMethod == RaycastTargetControlMethod.Activate)) + ) .ToList(); handleTargets.ForEach(x => x.Invoke()); } From ee79488340eaf1ca897258c4d459de2f73ac8745 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 6 Oct 2019 22:00:57 +0900 Subject: [PATCH 260/453] :sparkles: Add ValueProviderBase for single value providers --- .../Connector/ValueProvider/ValueProviderBase.cs | 16 ++++++++++++++++ .../ValueProvider/ValueProviderBase.cs.meta | 3 +++ 2 files changed, 19 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs new file mode 100644 index 0000000..1aada48 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs @@ -0,0 +1,16 @@ +using JetBrains.Annotations; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + public abstract class ValueProviderBase : ProviderBase where TPublishEvent : UnityEvent, new() + { + [SerializeField] private TValue value = default; + [UsedImplicitly] public TValue Value + { + get => value; + set => this.value = value; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta new file mode 100644 index 0000000..9a09270 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 120eea8349ee4ab4b4cfa3c8248ebaab +timeCreated: 1570366399 \ No newline at end of file From e93aaf36847c7c7b6bd6d36b85e195466967b130 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 6 Oct 2019 22:01:19 +0900 Subject: [PATCH 261/453] :sparkles: Inherits ValueProviderBase --- Assets/Scripts/Connector/ValueProvider/BoolProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/ByteProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/Color32Provider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/ColorProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/FloatProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/IntProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs | 5 +---- .../Connector/ValueProvider/ScriptableObjectProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/StringProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs | 5 +---- Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs | 5 +---- 16 files changed, 16 insertions(+), 64 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index a043f73..7a055b9 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class BoolProvider : ProviderBase + public class BoolProvider : ValueProviderBase { - [SerializeField] private bool value = default; - private bool Value => value; - protected override bool Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index ed16cd4..50d16dc 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] - public class ByteProvider : ProviderBase + public class ByteProvider : ValueProviderBase { - [SerializeField] private byte value = default; - private byte Value => value; - protected override byte Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 6c26a39..5072435 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32Provider : ProviderBase + public class Color32Provider : ValueProviderBase { - [SerializeField] private Color32 value = default; - private Color32 Value => value; - protected override Color32 Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index e41b8b3..befa6d9 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class ColorProvider : ProviderBase + public class ColorProvider : ValueProviderBase { - [SerializeField] private Color value = default; - private Color Value => value; - protected override Color Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index 61fa533..2a6d74c 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class FloatProvider : ProviderBase + public class FloatProvider : ValueProviderBase { - [SerializeField] private float value = default; - private float Value => value; - protected override float Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index 01d707d..1b17983 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] - public class GameObjectProvider : ProviderBase + public class GameObjectProvider : ValueProviderBase { - [SerializeField] private GameObject value = default; - private GameObject Value => value; - protected override GameObject Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 85110d3..79d4734 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class IntProvider : ProviderBase + public class IntProvider : ValueProviderBase { - [SerializeField] private int value = default; - private int Value => value; - protected override int Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index ee01a05..66ec00d 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class ObjectProvider : ProviderBase + public class ObjectProvider : ValueProviderBase { - [SerializeField] private Object value = default; - private Object Value => value; - protected override Object Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 98b0b44..bdc3213 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class QuaternionProvider : ProviderBase + public class QuaternionProvider : ValueProviderBase { - [SerializeField] private Quaternion value = default; - private Quaternion Value => value; - protected override Quaternion Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index d821420..1220134 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] - public class ScriptableObjectProvider : ProviderBase + public class ScriptableObjectProvider : ValueProviderBase { - [SerializeField] private ScriptableObject value = default; - private ScriptableObject Value => value; - protected override ScriptableObject Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 9e2b455..74f370d 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class StringProvider : ProviderBase + public class StringProvider : ValueProviderBase { - [SerializeField] private string value = default; - private string Value => value; - protected override string Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index f0aef2f..08c6114 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2IntProvider : ProviderBase + public class Vector2IntProvider : ValueProviderBase { - [SerializeField] private Vector2Int value = default; - private Vector2Int Value => value; - protected override Vector2Int Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index 4139fed..b7f6579 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2Provider : ProviderBase + public class Vector2Provider : ValueProviderBase { - [SerializeField] private Vector2 value = default; - private Vector2 Value => value; - protected override Vector2 Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index 7bfdf70..d378f87 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3IntProvider : ProviderBase + public class Vector3IntProvider : ValueProviderBase { - [SerializeField] private Vector3Int value = default; - private Vector3Int Value => value; - protected override Vector3Int Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index abc0ceb..c9fb0c9 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3Provider : ProviderBase + public class Vector3Provider : ValueProviderBase { - [SerializeField] private Vector3 value = default; - private Vector3 Value => value; - protected override Vector3 Provide() { return Value; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index b7e667b..8456c13 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -3,11 +3,8 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4Provider : ProviderBase + public class Vector4Provider : ValueProviderBase { - [SerializeField] private Vector4 value = default; - private Vector4 Value => value; - protected override Vector4 Provide() { return Value; From 1ba0927bdb90f74a038cb09a4a3b3ec8c689b584 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Sun, 6 Oct 2019 22:32:54 +0900 Subject: [PATCH 262/453] :fire: Remove unnecessary Take(1) --- Assets/Scripts/Connector/Event/TimelineSignal.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Event/TimelineSignal.cs b/Assets/Scripts/Connector/Event/TimelineSignal.cs index 3ead777..c8d5670 100644 --- a/Assets/Scripts/Connector/Event/TimelineSignal.cs +++ b/Assets/Scripts/Connector/Event/TimelineSignal.cs @@ -15,10 +15,7 @@ public class TimelineSignal : ConnectorBase public override IObservable OnConnectAsObservable() { - return Subject - // Prevents the previous flow from being re-invoked when triggered multiple times - .Take(1) - .AsUnitObservable(); + return Subject.AsUnitObservable(); } [UsedImplicitly] From 56592e3a0c5896b114ba6bcb15d57cc0598fb093 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 7 Oct 2019 20:44:43 +0900 Subject: [PATCH 263/453] :fire: Remove temporary signal emitter on destroy completely --- Assets/Scripts/Connector/Event/TimelineEvent.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 7a52be8..3aff5bc 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -78,6 +78,8 @@ private static End EndSignal private ISubject SignalEmittedSubject { get; } = new Subject(); + private MarkerTrack MarkerTrack { get; set; } + private void Awake() { RegisterSignal(); @@ -85,14 +87,14 @@ private void Awake() private void OnDestroy() { - if (baseGameObject == null || playableDirector == null || !(PlayableDirector.playableAsset is TimelineAsset timeline)) + if (MarkerTrack == default) { return; } - foreach (var marker in timeline.markerTrack.GetMarkers().OfType().Where(x => x.asset is SignalAssetBase signalAsset && signalAsset.IsTemporaryInstance)) + foreach (var marker in MarkerTrack.GetMarkers().OfType().Where(x => x.asset is SignalAssetBase signalAsset && signalAsset.IsTemporaryInstance)) { - timeline.markerTrack.DeleteMarker(marker); + MarkerTrack.DeleteMarker(marker); } } @@ -111,8 +113,8 @@ private void RegisterSignal() var time = TimelineEventType == TimelineEventType.Play ? 0 : timeline.duration; var signal = TimelineEventType == TimelineEventType.Play ? (SignalAsset) BeginSignal : EndSignal; - var emitter = timeline - .markerTrack + MarkerTrack = timeline.markerTrack; + var emitter = MarkerTrack .GetMarkers() .FirstOrDefault( x => x is SignalEmitter signalEmitter @@ -123,7 +125,7 @@ private void RegisterSignal() ) as SignalEmitter; if (emitter == default) { - emitter = timeline.markerTrack.CreateMarker(time); + emitter = MarkerTrack.CreateMarker(time); emitter.asset = signal; } From f0b51ce6ab3b3bf5a9756151a51010fafa0d69fd Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 7 Oct 2019 20:58:29 +0900 Subject: [PATCH 264/453] :clipboard: Upgrade Unity 2019.2.8f1 --- Packages/manifest.json | 2 +- ProjectSettings/ProjectVersion.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Packages/manifest.json b/Packages/manifest.json index cc10ed5..18317d8 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -20,7 +20,7 @@ "com.unity.collab-proxy": "1.2.16", "com.unity.ext.nunit": "1.0.0", "com.unity.ide.rider": "1.1.0", - "com.unity.ide.vscode": "1.1.0", + "com.unity.ide.vscode": "1.1.2", "com.unity.multiplayer-hlapi": "1.0.2", "com.unity.package-manager-ui": "2.2.0", "com.unity.purchasing": "2.0.6", diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 2b1ab8e..3e24348 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.7f2 -m_EditorVersionWithRevision: 2019.2.7f2 (c96f78eb5904) +m_EditorVersion: 2019.2.8f1 +m_EditorVersionWithRevision: 2019.2.8f1 (ff5b465c8d13) From 43d5e2a6f4d41806e7371dcd292c82de72cdfbab Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 7 Oct 2019 21:01:16 +0900 Subject: [PATCH 265/453] :beetle: Make sure to register as a dynamic event --- Assets/Editor/Scripts/FlowValuePublishPort.cs | 116 +++++++----------- 1 file changed, 46 insertions(+), 70 deletions(-) diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs b/Assets/Editor/Scripts/FlowValuePublishPort.cs index 18a772f..a39bc12 100644 --- a/Assets/Editor/Scripts/FlowValuePublishPort.cs +++ b/Assets/Editor/Scripts/FlowValuePublishPort.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Linq; using System.Reflection; -using UnityEditor.Events; using UnityEditor.Experimental.GraphView; using UnityEngine.Events; using UnityEngine.UIElements; @@ -17,14 +15,6 @@ private FlowValuePublishPort(Orientation portOrientation, Direction portDirectio public ConnectorInfo.ValuePublisherInfo ValuePublisherInfo { get; private set; } - private static IDictionary> AddPersistentListenerCallbackMap { get; } = new Dictionary> - { - {typeof(bool), (unityEvent, unityAction) => UnityEventTools.AddBoolPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - {typeof(int), (unityEvent, unityAction) => UnityEventTools.AddIntPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - {typeof(float), (unityEvent, unityAction) => UnityEventTools.AddFloatPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - {typeof(string), (unityEvent, unityAction) => UnityEventTools.AddStringPersistentListener(unityEvent as UnityEvent, unityAction as UnityAction, default)}, - }; - public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ConnectorInfo.ValuePublisherInfo valuePublisherInfo, IEdgeConnectorListener edgeConnectorListener = default) { var port = new FlowValuePublishPort(portOrientation, portDirection, portCapacity, typeof(FlowValuePublishPort)) @@ -53,67 +43,53 @@ public void AddPersistentListener(FlowValueReceivePort valueReceivePort) var setMethodInfo = valueReceivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(true); var unityEvent = ValuePublisherInfo.PropertyInfo.GetValue(publishConnectorInstance); - var unityAction = Delegate - .CreateDelegate( - typeof(UnityAction<>).MakeGenericType(setMethodInfo.GetParameters().First().ParameterType), - receivConnectorInstance, - setMethodInfo.Name, - false - ); - if (AddPersistentListenerCallbackMap.ContainsKey(ValuePublisherInfo.Type)) - { - AddPersistentListenerCallbackMap[ValuePublisherInfo.Type].Invoke(unityEvent, unityAction); - } - else - { - // unityEvent.AddPersistentListener() - unityEvent - .GetType() - .BaseType? - .GetMethodsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? - .First(x => x.Name == "AddPersistentListener" && !x.GetParameters().Any()) - .Invoke(unityEvent, null); - // unityEvent.m_PersistentCalls - var persistentCalls = unityEvent - .GetType() - .GetFieldRecursive("m_PersistentCalls", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .GetValue(unityEvent); - // unityEvent.m_PersistentCalls.RegisterObjectPersistentListener(unityEvent.GetPersistentEventCount() - 1, targetInstance, null, methodInfo.Name); - persistentCalls - .GetType() - .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Invoke( - persistentCalls, - new object[] - { - (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, - receivConnectorInstance, - null, - setMethodInfo.Name - } - ); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1) - var persistentCall = persistentCalls - .GetType() - .GetMethodRecursive("GetListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Invoke(persistentCalls, new object[] {(unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1}); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments - var argumentCache = persistentCall - .GetType() - .GetFieldRecursive("m_Arguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .GetValue(persistentCall); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments.m_ObjectArgumentAssemblyTypeName = setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName - argumentCache - .GetType() - .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Mode = PersistentListenerMode.EventDefined - persistentCall - .GetType() - .GetFieldRecursive("m_Mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .SetValue(persistentCall, PersistentListenerMode.EventDefined); - } + // unityEvent.AddPersistentListener() + unityEvent + .GetType() + .BaseType? + .GetMethodsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? + .First(x => x.Name == "AddPersistentListener" && !x.GetParameters().Any()) + .Invoke(unityEvent, null); + // unityEvent.m_PersistentCalls + var persistentCalls = unityEvent + .GetType() + .GetFieldRecursive("m_PersistentCalls", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .GetValue(unityEvent); + // unityEvent.m_PersistentCalls.RegisterObjectPersistentListener(unityEvent.GetPersistentEventCount() - 1, targetInstance, null, methodInfo.Name); + persistentCalls + .GetType() + .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Invoke( + persistentCalls, + new object[] + { + (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, + receivConnectorInstance, + null, + setMethodInfo.Name + } + ); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1) + var persistentCall = persistentCalls + .GetType() + .GetMethodRecursive("GetListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .Invoke(persistentCalls, new object[] {(unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1}); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments + var argumentCache = persistentCall + .GetType() + .GetFieldRecursive("m_Arguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .GetValue(persistentCall); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments.m_ObjectArgumentAssemblyTypeName = setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName + argumentCache + .GetType() + .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); + // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Mode = PersistentListenerMode.EventDefined + persistentCall + .GetType() + .GetFieldRecursive("m_Mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + .SetValue(persistentCall, PersistentListenerMode.EventDefined); } } } From 900f9a614cc82b8a80d1b428bd2e41481c9acd17 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 7 Oct 2019 21:02:26 +0900 Subject: [PATCH 266/453] :sparkles: Accept Unity official components for ActivationController --- .../Connector/Controller/ActivationController.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index f48d7c6..f501d0a 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -12,7 +12,7 @@ namespace UniFlow.Connector.Controller public class ActivationController : ConnectorBase { [SerializeField] private List targetGameObjects = default; - [SerializeField] private List targetMonoBehaviours = default; + [SerializeField] private List targetBehaviours = default; [SerializeField] private bool activated = default; [UsedImplicitly] public IList GameObjects @@ -20,10 +20,10 @@ [UsedImplicitly] public IList GameObjects get => targetGameObjects; set => targetGameObjects = value.ToList(); } - [UsedImplicitly] public IList MonoBehaviours + [UsedImplicitly] public IList Behaviours { - get => targetMonoBehaviours; - set => targetMonoBehaviours = value.ToList(); + get => targetBehaviours; + set => targetBehaviours = value.ToList(); } [ValueReceiver] public bool Activated { @@ -35,17 +35,17 @@ [ValueReceiver] public GameObject TargetGameObject get => null; set => GameObjects.Add(value); } - [ValueReceiver] public MonoBehaviour TargetMonoBehaviour + [ValueReceiver] public Behaviour TargetBehaviour { get => null; - set => MonoBehaviours.Add(value); + set => Behaviours.Add(value); } public override IObservable OnConnectAsObservable() { var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); gameObjects.ForEach(x => x.SetActive(Activated)); - var monoBehaviours = MonoBehaviours.Where(x => x.enabled != Activated).ToList(); + var monoBehaviours = Behaviours.Where(x => x.enabled != Activated).ToList(); monoBehaviours.ForEach(x => x.enabled = Activated); return Observable.ReturnUnit(); From d4c243d6b277f75a49ac0055a846770d1e82b883 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 7 Oct 2019 21:47:10 +0900 Subject: [PATCH 267/453] :beetle: Make sure to publish to multiple target connectors --- Assets/Scripts/ConnectorBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index b19e403..2c3c20c 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -89,7 +89,7 @@ void IConnector.Connect(IObservable source) ); if (TargetConnectors.Count() > 1) { - observable = observable.Share(); + observable = observable.Replay().RefCount(); } #if UNITY_EDITOR TargetConnectors From 1eef76d11a005cffe1daa215f7615812ddd2b5ca Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 8 Oct 2019 11:49:34 +0900 Subject: [PATCH 268/453] :sparkles: Implement EmptyBehaviorSubject and use it --- Assets/Scripts/ConnectorBase.cs | 2 +- Assets/Scripts/EmptyBehaviorSubject.cs | 314 ++++++++++++++++++++ Assets/Scripts/EmptyBehaviorSubject.cs.meta | 3 + 3 files changed, 318 insertions(+), 1 deletion(-) create mode 100644 Assets/Scripts/EmptyBehaviorSubject.cs create mode 100644 Assets/Scripts/EmptyBehaviorSubject.cs.meta diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 2c3c20c..8016b52 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -89,7 +89,7 @@ void IConnector.Connect(IObservable source) ); if (TargetConnectors.Count() > 1) { - observable = observable.Replay().RefCount(); + observable = observable.Multicast(new EmptyBehaviorSubject()).RefCount(); } #if UNITY_EDITOR TargetConnectors diff --git a/Assets/Scripts/EmptyBehaviorSubject.cs b/Assets/Scripts/EmptyBehaviorSubject.cs new file mode 100644 index 0000000..5fc6198 --- /dev/null +++ b/Assets/Scripts/EmptyBehaviorSubject.cs @@ -0,0 +1,314 @@ +using System; +using JetBrains.Annotations; +using UniRx; +using UniRx.InternalUtil; + +namespace UniFlow +{ + [PublicAPI] + internal sealed class EmptyBehaviorSubject : ISubject + { + private readonly object observerLock = new object(); + + private bool isStopped; + private bool isDisposed; + private bool hasSetValue; + private T lastValue; + private Exception lastError; + private IObserver outObserver = EmptyObserver.Instance; + + public T Value + { + get + { + ThrowIfDisposed(); + lastError?.Throw(); + return !hasSetValue ? default : lastValue; + } + } + + public bool HasObservers => !(outObserver is EmptyObserver) && !isStopped && !isDisposed; + + public void OnCompleted() + { + IObserver old; + lock (observerLock) + { + ThrowIfDisposed(); + if (isStopped) + { + return; + } + + old = outObserver; + outObserver = EmptyObserver.Instance; + isStopped = true; + } + + old.OnCompleted(); + } + + public void OnError(Exception error) + { + if (error == null) throw new ArgumentNullException(nameof(error)); + + IObserver old; + lock (observerLock) + { + ThrowIfDisposed(); + if (isStopped) + { + return; + } + + old = outObserver; + outObserver = EmptyObserver.Instance; + isStopped = true; + lastError = error; + } + + old.OnError(error); + } + + public void OnNext(T value) + { + IObserver current; + lock (observerLock) + { + if (isStopped) + { + return; + } + + lastValue = value; + hasSetValue = true; + current = outObserver; + } + + current.OnNext(value); + } + + public IDisposable Subscribe(IObserver observer) + { + if (observer == null) + { + throw new ArgumentNullException(nameof(observer)); + } + + var ex = default(Exception); + var v = default(T); + var subscription = default(Subscription); + + lock (observerLock) + { + ThrowIfDisposed(); + if (!isStopped) + { + if (!hasSetValue) + { + return Disposable.Empty; + } + + if (outObserver is ListObserver listObserver) + { + outObserver = listObserver.Add(observer); + } + else + { + var current = outObserver; + outObserver = current is EmptyObserver ? observer : new ListObserver(new ImmutableList>(new[] { current, observer })); + } + + v = lastValue; + subscription = new Subscription(this, observer); + } + else + { + ex = lastError; + } + } + + if (subscription != null && hasSetValue) + { + observer.OnNext(v); + return subscription; + } + + if (ex != null) + { + observer.OnError(ex); + return Disposable.Empty; + } + + observer.OnCompleted(); + return Disposable.Empty; + } + + public void Dispose() + { + lock (observerLock) + { + isDisposed = true; + outObserver = DisposedObserver.Instance; + lastError = null; + lastValue = default; + } + } + + private void ThrowIfDisposed() + { + if (isDisposed) + { + throw new ObjectDisposedException(""); + } + } + + public bool IsRequiredSubscribeOnCurrentThread() + { + return false; + } + + private class Subscription : IDisposable + { + private readonly object gate = new object(); + private EmptyBehaviorSubject parent; + private IObserver unsubscribeTarget; + + public Subscription(EmptyBehaviorSubject parent, IObserver unsubscribeTarget) + { + this.parent = parent; + this.unsubscribeTarget = unsubscribeTarget; + } + + public void Dispose() + { + lock (gate) + { + // ReSharper disable once InvertIf + if (parent != null) + { + lock (parent.observerLock) + { + if (parent.outObserver is ListObserver listObserver) + { + parent.outObserver = listObserver.Remove(unsubscribeTarget); + } + else + { + parent.outObserver = EmptyObserver.Instance; + } + + unsubscribeTarget = null; + parent = null; + } + } + } + } + } + } + + public static class ExceptionExtensions + { + public static void Throw(this Exception exception) + { + throw exception; + } + } + public class ListObserver : IObserver + { + private readonly ImmutableList> observers; + + public ListObserver(ImmutableList> observers) + { + this.observers = observers; + } + + public void OnCompleted() + { + var targetObservers = observers.Data; + foreach (var targetObserver in targetObservers) + { + targetObserver.OnCompleted(); + } + } + + public void OnError(Exception error) + { + var targetObservers = observers.Data; + foreach (var targetObserver in targetObservers) + { + targetObserver.OnError(error); + } + } + + public void OnNext(T value) + { + var targetObservers = observers.Data; + foreach (var targetObserver in targetObservers) + { + targetObserver.OnNext(value); + } + } + + internal IObserver Add(IObserver observer) + { + return new ListObserver(observers.Add(observer)); + } + + internal IObserver Remove(IObserver observer) + { + var i = Array.IndexOf(observers.Data, observer); + if (i < 0) + { + return this; + } + + return observers.Data.Length == 2 ? observers.Data[1 - i] : new ListObserver(observers.Remove(observer)); + } + } + + public class EmptyObserver : IObserver + { + public static readonly EmptyObserver Instance = new EmptyObserver(); + + private EmptyObserver() + { + } + + public void OnCompleted() + { + } + + public void OnError(Exception error) + { + } + + public void OnNext(T value) + { + } + } + + public class DisposedObserver : IObserver + { + public static readonly DisposedObserver Instance = new DisposedObserver(); + + private DisposedObserver() + { + } + + public void OnCompleted() + { + throw new ObjectDisposedException(""); + } + + public void OnError(Exception error) + { + throw new ObjectDisposedException(""); + } + + public void OnNext(T value) + { + throw new ObjectDisposedException(""); + } + } +} diff --git a/Assets/Scripts/EmptyBehaviorSubject.cs.meta b/Assets/Scripts/EmptyBehaviorSubject.cs.meta new file mode 100644 index 0000000..c7d5236 --- /dev/null +++ b/Assets/Scripts/EmptyBehaviorSubject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f34ae58d968649498cce16e8f3125dee +timeCreated: 1570501157 \ No newline at end of file From f9573b298de516a7663eb928bd3a874467d474a0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 8 Oct 2019 19:08:03 +0900 Subject: [PATCH 269/453] :clipboard: Bump up version to v0.1.0-preview.25 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 3241345..c785fbb 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.24", + "version": "0.1.0-preview.25", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 65ac3f001a000ef0095b4a8c0f3a49e668fc5e5a Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Tue, 8 Oct 2019 20:30:21 +0900 Subject: [PATCH 270/453] :sparkles: Add LoadSceneEvent --- .../Scripts/Connector/Event/LoadSceneEvent.cs | 43 +++++++++++++++++++ .../Connector/Event/LoadSceneEvent.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 1 + 3 files changed, 47 insertions(+) create mode 100644 Assets/Scripts/Connector/Event/LoadSceneEvent.cs create mode 100644 Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta diff --git a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs new file mode 100644 index 0000000..bbb93b4 --- /dev/null +++ b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs @@ -0,0 +1,43 @@ +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace UniFlow.Connector.Event +{ + [AddComponentMenu("UniFlow/Event/LoadSceneEvent", (int) ConnectorType.LoadSceneEvent)] + public class LoadSceneEvent : ConnectorBase + { + [SerializeField] private string sceneName = default; + + [UsedImplicitly] public string SceneName + { + get => sceneName; + set => sceneName = value; + } + + private ISubject Subject { get; } = new Subject(); + + public override IObservable OnConnectAsObservable() => Subject; + + protected override void Start() + { + base.Start(); + SceneManager.sceneLoaded += DidLoadScene; + } + + private void OnDestroy() + { + SceneManager.sceneLoaded -= DidLoadScene; + } + + private void DidLoadScene(Scene loadedScene, LoadSceneMode mode) + { + if (loadedScene.name == SceneName) + { + Subject.OnNext(Unit.Default); + } + } + } +} diff --git a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta new file mode 100644 index 0000000..7331b2e --- /dev/null +++ b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 82f9fc4f9d304012b041aeabb5634ba1 +timeCreated: 1570534045 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 840b59a..8f1d8cf 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -37,6 +37,7 @@ public enum ConnectorType LoadScene = 400, LoadScene_Enum, + LoadSceneEvent, UnloadScene, UnloadScene_Enum, UnloadSceneEvent, From 5dcb42ff6c005df8ada2eae2b7557ee14135d4cd Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 11:31:38 +0900 Subject: [PATCH 271/453] Revert ":sparkles: Implement EmptyBehaviorSubject and use it" This reverts commit 1eef76d11a005cffe1daa215f7615812ddd2b5ca. --- Assets/Scripts/ConnectorBase.cs | 2 +- Assets/Scripts/EmptyBehaviorSubject.cs | 314 -------------------- Assets/Scripts/EmptyBehaviorSubject.cs.meta | 3 - 3 files changed, 1 insertion(+), 318 deletions(-) delete mode 100644 Assets/Scripts/EmptyBehaviorSubject.cs delete mode 100644 Assets/Scripts/EmptyBehaviorSubject.cs.meta diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 8016b52..2c3c20c 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -89,7 +89,7 @@ void IConnector.Connect(IObservable source) ); if (TargetConnectors.Count() > 1) { - observable = observable.Multicast(new EmptyBehaviorSubject()).RefCount(); + observable = observable.Replay().RefCount(); } #if UNITY_EDITOR TargetConnectors diff --git a/Assets/Scripts/EmptyBehaviorSubject.cs b/Assets/Scripts/EmptyBehaviorSubject.cs deleted file mode 100644 index 5fc6198..0000000 --- a/Assets/Scripts/EmptyBehaviorSubject.cs +++ /dev/null @@ -1,314 +0,0 @@ -using System; -using JetBrains.Annotations; -using UniRx; -using UniRx.InternalUtil; - -namespace UniFlow -{ - [PublicAPI] - internal sealed class EmptyBehaviorSubject : ISubject - { - private readonly object observerLock = new object(); - - private bool isStopped; - private bool isDisposed; - private bool hasSetValue; - private T lastValue; - private Exception lastError; - private IObserver outObserver = EmptyObserver.Instance; - - public T Value - { - get - { - ThrowIfDisposed(); - lastError?.Throw(); - return !hasSetValue ? default : lastValue; - } - } - - public bool HasObservers => !(outObserver is EmptyObserver) && !isStopped && !isDisposed; - - public void OnCompleted() - { - IObserver old; - lock (observerLock) - { - ThrowIfDisposed(); - if (isStopped) - { - return; - } - - old = outObserver; - outObserver = EmptyObserver.Instance; - isStopped = true; - } - - old.OnCompleted(); - } - - public void OnError(Exception error) - { - if (error == null) throw new ArgumentNullException(nameof(error)); - - IObserver old; - lock (observerLock) - { - ThrowIfDisposed(); - if (isStopped) - { - return; - } - - old = outObserver; - outObserver = EmptyObserver.Instance; - isStopped = true; - lastError = error; - } - - old.OnError(error); - } - - public void OnNext(T value) - { - IObserver current; - lock (observerLock) - { - if (isStopped) - { - return; - } - - lastValue = value; - hasSetValue = true; - current = outObserver; - } - - current.OnNext(value); - } - - public IDisposable Subscribe(IObserver observer) - { - if (observer == null) - { - throw new ArgumentNullException(nameof(observer)); - } - - var ex = default(Exception); - var v = default(T); - var subscription = default(Subscription); - - lock (observerLock) - { - ThrowIfDisposed(); - if (!isStopped) - { - if (!hasSetValue) - { - return Disposable.Empty; - } - - if (outObserver is ListObserver listObserver) - { - outObserver = listObserver.Add(observer); - } - else - { - var current = outObserver; - outObserver = current is EmptyObserver ? observer : new ListObserver(new ImmutableList>(new[] { current, observer })); - } - - v = lastValue; - subscription = new Subscription(this, observer); - } - else - { - ex = lastError; - } - } - - if (subscription != null && hasSetValue) - { - observer.OnNext(v); - return subscription; - } - - if (ex != null) - { - observer.OnError(ex); - return Disposable.Empty; - } - - observer.OnCompleted(); - return Disposable.Empty; - } - - public void Dispose() - { - lock (observerLock) - { - isDisposed = true; - outObserver = DisposedObserver.Instance; - lastError = null; - lastValue = default; - } - } - - private void ThrowIfDisposed() - { - if (isDisposed) - { - throw new ObjectDisposedException(""); - } - } - - public bool IsRequiredSubscribeOnCurrentThread() - { - return false; - } - - private class Subscription : IDisposable - { - private readonly object gate = new object(); - private EmptyBehaviorSubject parent; - private IObserver unsubscribeTarget; - - public Subscription(EmptyBehaviorSubject parent, IObserver unsubscribeTarget) - { - this.parent = parent; - this.unsubscribeTarget = unsubscribeTarget; - } - - public void Dispose() - { - lock (gate) - { - // ReSharper disable once InvertIf - if (parent != null) - { - lock (parent.observerLock) - { - if (parent.outObserver is ListObserver listObserver) - { - parent.outObserver = listObserver.Remove(unsubscribeTarget); - } - else - { - parent.outObserver = EmptyObserver.Instance; - } - - unsubscribeTarget = null; - parent = null; - } - } - } - } - } - } - - public static class ExceptionExtensions - { - public static void Throw(this Exception exception) - { - throw exception; - } - } - public class ListObserver : IObserver - { - private readonly ImmutableList> observers; - - public ListObserver(ImmutableList> observers) - { - this.observers = observers; - } - - public void OnCompleted() - { - var targetObservers = observers.Data; - foreach (var targetObserver in targetObservers) - { - targetObserver.OnCompleted(); - } - } - - public void OnError(Exception error) - { - var targetObservers = observers.Data; - foreach (var targetObserver in targetObservers) - { - targetObserver.OnError(error); - } - } - - public void OnNext(T value) - { - var targetObservers = observers.Data; - foreach (var targetObserver in targetObservers) - { - targetObserver.OnNext(value); - } - } - - internal IObserver Add(IObserver observer) - { - return new ListObserver(observers.Add(observer)); - } - - internal IObserver Remove(IObserver observer) - { - var i = Array.IndexOf(observers.Data, observer); - if (i < 0) - { - return this; - } - - return observers.Data.Length == 2 ? observers.Data[1 - i] : new ListObserver(observers.Remove(observer)); - } - } - - public class EmptyObserver : IObserver - { - public static readonly EmptyObserver Instance = new EmptyObserver(); - - private EmptyObserver() - { - } - - public void OnCompleted() - { - } - - public void OnError(Exception error) - { - } - - public void OnNext(T value) - { - } - } - - public class DisposedObserver : IObserver - { - public static readonly DisposedObserver Instance = new DisposedObserver(); - - private DisposedObserver() - { - } - - public void OnCompleted() - { - throw new ObjectDisposedException(""); - } - - public void OnError(Exception error) - { - throw new ObjectDisposedException(""); - } - - public void OnNext(T value) - { - throw new ObjectDisposedException(""); - } - } -} diff --git a/Assets/Scripts/EmptyBehaviorSubject.cs.meta b/Assets/Scripts/EmptyBehaviorSubject.cs.meta deleted file mode 100644 index c7d5236..0000000 --- a/Assets/Scripts/EmptyBehaviorSubject.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f34ae58d968649498cce16e8f3125dee -timeCreated: 1570501157 \ No newline at end of file From f871fe1a40803ae13837609ab77b0300b00806f9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 11:41:35 +0900 Subject: [PATCH 272/453] :clipboard: Bump up version to v0.1.0-preview.26 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index c785fbb..a165e40 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.25", + "version": "0.1.0-preview.26", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From ca34c6f07ed4c4a13dba633f29e69c766f648acc Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 22:11:08 +0900 Subject: [PATCH 273/453] :sparkles: Add interfaces --- Assets/Scripts/ISignal.cs | 12 ++++++++++++ Assets/Scripts/ISignal.cs.meta | 3 +++ Assets/Scripts/ISignalPublisher.cs | 7 +++++++ Assets/Scripts/ISignalPublisher.cs.meta | 3 +++ Assets/Scripts/ISignalReceiver.cs | 9 +++++++++ Assets/Scripts/ISignalReceiver.cs.meta | 3 +++ 6 files changed, 37 insertions(+) create mode 100644 Assets/Scripts/ISignal.cs create mode 100644 Assets/Scripts/ISignal.cs.meta create mode 100644 Assets/Scripts/ISignalPublisher.cs create mode 100644 Assets/Scripts/ISignalPublisher.cs.meta create mode 100644 Assets/Scripts/ISignalReceiver.cs create mode 100644 Assets/Scripts/ISignalReceiver.cs.meta diff --git a/Assets/Scripts/ISignal.cs b/Assets/Scripts/ISignal.cs new file mode 100644 index 0000000..a14e234 --- /dev/null +++ b/Assets/Scripts/ISignal.cs @@ -0,0 +1,12 @@ +using System; + +namespace UniFlow +{ + public interface ISignal + { + } + + public interface IEquatableSignal : ISignal, IEquatable + { + } +} diff --git a/Assets/Scripts/ISignal.cs.meta b/Assets/Scripts/ISignal.cs.meta new file mode 100644 index 0000000..ffd8524 --- /dev/null +++ b/Assets/Scripts/ISignal.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd44a551199a42bdaaca4e37d96d363a +timeCreated: 1570585967 \ No newline at end of file diff --git a/Assets/Scripts/ISignalPublisher.cs b/Assets/Scripts/ISignalPublisher.cs new file mode 100644 index 0000000..0ee76ae --- /dev/null +++ b/Assets/Scripts/ISignalPublisher.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface ISignalPublisher where TSignal : ISignal + { + void Publish(TSignal signal); + } +} diff --git a/Assets/Scripts/ISignalPublisher.cs.meta b/Assets/Scripts/ISignalPublisher.cs.meta new file mode 100644 index 0000000..4f0b6e3 --- /dev/null +++ b/Assets/Scripts/ISignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0e002f706f2349a7abd6ef46edb64f9e +timeCreated: 1570585919 \ No newline at end of file diff --git a/Assets/Scripts/ISignalReceiver.cs b/Assets/Scripts/ISignalReceiver.cs new file mode 100644 index 0000000..307d44f --- /dev/null +++ b/Assets/Scripts/ISignalReceiver.cs @@ -0,0 +1,9 @@ +using System; + +namespace UniFlow +{ + public interface ISignalReceiver where TSignal : ISignal + { + IObservable OnReceiveAsObservable(); + } +} diff --git a/Assets/Scripts/ISignalReceiver.cs.meta b/Assets/Scripts/ISignalReceiver.cs.meta new file mode 100644 index 0000000..7bf0345 --- /dev/null +++ b/Assets/Scripts/ISignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3a559db669ba4bbb940b4c0bc3c91589 +timeCreated: 1570613141 \ No newline at end of file From 25323a6c1f9062333bbc97b924e23e5b9ef05583 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 22:12:06 +0900 Subject: [PATCH 274/453] :name_badge: Rename for UniFlow.Signal --- Assets/Scripts/Connector/Event/TimelineEvent.cs | 6 +++--- Assets/Scripts/Signal.meta | 4 ++-- Assets/Scripts/TimelineSignal.meta | 3 +++ Assets/Scripts/{Signal => TimelineSignal}/Begin.cs | 4 ++-- Assets/Scripts/{Signal => TimelineSignal}/Begin.cs.meta | 0 Assets/Scripts/{Signal => TimelineSignal}/End.cs | 2 +- Assets/Scripts/{Signal => TimelineSignal}/End.cs.meta | 0 .../Scripts/{Signal => TimelineSignal}/SignalAssetBase.cs | 4 ++-- .../{Signal => TimelineSignal}/SignalAssetBase.cs.meta | 0 9 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 Assets/Scripts/TimelineSignal.meta rename Assets/Scripts/{Signal => TimelineSignal}/Begin.cs (61%) rename Assets/Scripts/{Signal => TimelineSignal}/Begin.cs.meta (100%) rename Assets/Scripts/{Signal => TimelineSignal}/End.cs (62%) rename Assets/Scripts/{Signal => TimelineSignal}/End.cs.meta (100%) rename Assets/Scripts/{Signal => TimelineSignal}/SignalAssetBase.cs (80%) rename Assets/Scripts/{Signal => TimelineSignal}/SignalAssetBase.cs.meta (100%) diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 3aff5bc..ef232d8 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -2,7 +2,7 @@ using System.Linq; using JetBrains.Annotations; using UniFlow.Attribute; -using UniFlow.Signal; +using UniFlow.TimelineSignal; using UniRx; using UnityEngine; using UnityEngine.Events; @@ -129,10 +129,10 @@ private void RegisterSignal() emitter.asset = signal; } - var receiver = PlayableDirector.gameObject.GetComponent(); + var receiver = PlayableDirector.gameObject.GetComponent(); if (receiver == default) { - receiver = PlayableDirector.gameObject.AddComponent(); + receiver = PlayableDirector.gameObject.AddComponent(); } if (receiver.GetReaction(signal) == default) diff --git a/Assets/Scripts/Signal.meta b/Assets/Scripts/Signal.meta index 2406e59..492a118 100644 --- a/Assets/Scripts/Signal.meta +++ b/Assets/Scripts/Signal.meta @@ -1,3 +1,3 @@ fileFormatVersion: 2 -guid: 6272980ab42249b09c1c1bba93ef2509 -timeCreated: 1568471721 \ No newline at end of file +guid: 6c2a9246861748068a2009a0126467bd +timeCreated: 1570615221 \ No newline at end of file diff --git a/Assets/Scripts/TimelineSignal.meta b/Assets/Scripts/TimelineSignal.meta new file mode 100644 index 0000000..2406e59 --- /dev/null +++ b/Assets/Scripts/TimelineSignal.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6272980ab42249b09c1c1bba93ef2509 +timeCreated: 1568471721 \ No newline at end of file diff --git a/Assets/Scripts/Signal/Begin.cs b/Assets/Scripts/TimelineSignal/Begin.cs similarity index 61% rename from Assets/Scripts/Signal/Begin.cs rename to Assets/Scripts/TimelineSignal/Begin.cs index 20d4547..4a6cf60 100644 --- a/Assets/Scripts/Signal/Begin.cs +++ b/Assets/Scripts/TimelineSignal/Begin.cs @@ -1,6 +1,6 @@ -namespace UniFlow.Signal +namespace UniFlow.TimelineSignal { public class Begin : SignalAssetBase { } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Signal/Begin.cs.meta b/Assets/Scripts/TimelineSignal/Begin.cs.meta similarity index 100% rename from Assets/Scripts/Signal/Begin.cs.meta rename to Assets/Scripts/TimelineSignal/Begin.cs.meta diff --git a/Assets/Scripts/Signal/End.cs b/Assets/Scripts/TimelineSignal/End.cs similarity index 62% rename from Assets/Scripts/Signal/End.cs rename to Assets/Scripts/TimelineSignal/End.cs index c81565f..13992cd 100644 --- a/Assets/Scripts/Signal/End.cs +++ b/Assets/Scripts/TimelineSignal/End.cs @@ -1,4 +1,4 @@ -namespace UniFlow.Signal +namespace UniFlow.TimelineSignal { public class End : SignalAssetBase { diff --git a/Assets/Scripts/Signal/End.cs.meta b/Assets/Scripts/TimelineSignal/End.cs.meta similarity index 100% rename from Assets/Scripts/Signal/End.cs.meta rename to Assets/Scripts/TimelineSignal/End.cs.meta diff --git a/Assets/Scripts/Signal/SignalAssetBase.cs b/Assets/Scripts/TimelineSignal/SignalAssetBase.cs similarity index 80% rename from Assets/Scripts/Signal/SignalAssetBase.cs rename to Assets/Scripts/TimelineSignal/SignalAssetBase.cs index d8eda0d..d3761ea 100644 --- a/Assets/Scripts/Signal/SignalAssetBase.cs +++ b/Assets/Scripts/TimelineSignal/SignalAssetBase.cs @@ -1,9 +1,9 @@ using UnityEngine.Timeline; -namespace UniFlow.Signal +namespace UniFlow.TimelineSignal { public class SignalAssetBase : SignalAsset { public bool IsTemporaryInstance { get; set; } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Signal/SignalAssetBase.cs.meta b/Assets/Scripts/TimelineSignal/SignalAssetBase.cs.meta similarity index 100% rename from Assets/Scripts/Signal/SignalAssetBase.cs.meta rename to Assets/Scripts/TimelineSignal/SignalAssetBase.cs.meta From 0b0fdfdf1255e22754f9f84f0c32aa3ad12d629c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 22:12:38 +0900 Subject: [PATCH 275/453] :tada: Implement SignalPublisher and SignalReceiver --- Assets/Scripts/Connector/SignalPublisher.meta | 3 ++ .../ScriptableObjectSignalPublisher.cs | 10 +++++ .../ScriptableObjectSignalPublisher.cs.meta | 3 ++ .../SignalPublisher/StringSignalPublisher.cs | 10 +++++ .../StringSignalPublisher.cs.meta | 3 ++ .../Scripts/Connector/SignalPublisherBase.cs | 25 ++++++++++++ .../Connector/SignalPublisherBase.cs.meta | 3 ++ Assets/Scripts/Connector/SignalReceiver.meta | 3 ++ .../ScriptableObjectSignalReceiver.cs | 10 +++++ .../ScriptableObjectSignalReceiver.cs.meta | 3 ++ .../SignalReceiver/StringSignalReceiver.cs | 10 +++++ .../StringSignalReceiver.cs.meta | 3 ++ .../Scripts/Connector/SignalReceiverBase.cs | 24 ++++++++++++ .../Connector/SignalReceiverBase.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 8 ++++ .../Scripts/Signal/ScriptableObjectSignal.cs | 8 ++++ .../Signal/ScriptableObjectSignal.cs.meta | 3 ++ Assets/Scripts/Signal/StringSignal.cs | 39 +++++++++++++++++++ Assets/Scripts/Signal/StringSignal.cs.meta | 3 ++ Assets/Scripts/Utility.meta | 3 ++ Assets/Scripts/Utility/SignalHandler.cs | 26 +++++++++++++ Assets/Scripts/Utility/SignalHandler.cs.meta | 3 ++ 22 files changed, 206 insertions(+) create mode 100644 Assets/Scripts/Connector/SignalPublisher.meta create mode 100644 Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta create mode 100644 Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs.meta create mode 100644 Assets/Scripts/Connector/SignalPublisherBase.cs create mode 100644 Assets/Scripts/Connector/SignalPublisherBase.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiverBase.cs create mode 100644 Assets/Scripts/Connector/SignalReceiverBase.cs.meta create mode 100644 Assets/Scripts/Signal/ScriptableObjectSignal.cs create mode 100644 Assets/Scripts/Signal/ScriptableObjectSignal.cs.meta create mode 100644 Assets/Scripts/Signal/StringSignal.cs create mode 100644 Assets/Scripts/Signal/StringSignal.cs.meta create mode 100644 Assets/Scripts/Utility.meta create mode 100644 Assets/Scripts/Utility/SignalHandler.cs create mode 100644 Assets/Scripts/Utility/SignalHandler.cs.meta diff --git a/Assets/Scripts/Connector/SignalPublisher.meta b/Assets/Scripts/Connector/SignalPublisher.meta new file mode 100644 index 0000000..1b83d19 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 51ad1a3208304325969fb981ac2600e4 +timeCreated: 1570613103 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs new file mode 100644 index 0000000..8211bf0 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs @@ -0,0 +1,10 @@ +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalPublisher +{ + [AddComponentMenu("UniFlow/SignalPublisher/ScriptableObject", (int) ConnectorType.ScriptableObjectSignalPublisher)] + public class ScriptableObjectSignalPublisher : SignalPublisherBase + { + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta new file mode 100644 index 0000000..aa90d3f --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd2865a0218c4b3bb1b08d940ae9b97c +timeCreated: 1570622344 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs new file mode 100644 index 0000000..bbaa592 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -0,0 +1,10 @@ +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalPublisher +{ + [AddComponentMenu("UniFlow/SignalPublisher/String", (int) ConnectorType.StringSignalPublisher)] + public class StringSignalPublisher : SignalPublisherBase + { + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs.meta new file mode 100644 index 0000000..6e17e92 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 88cd519c3d124dacb1877d2fdcbe9d40 +timeCreated: 1570613103 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs b/Assets/Scripts/Connector/SignalPublisherBase.cs new file mode 100644 index 0000000..07be31e --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs @@ -0,0 +1,25 @@ +using System; +using UniFlow.Attribute; +using UniFlow.Utility; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + public abstract class SignalPublisherBase : ConnectorBase, ISignalPublisher where TSignal : ISignal + { + [SerializeField] private TSignal signal = default; + [ValueReceiver] public TSignal Signal => signal; + + public override IObservable OnConnectAsObservable() + { + ((ISignalPublisher) this).Publish(Signal); + return Observable.ReturnUnit(); + } + + void ISignalPublisher.Publish(TSignal value) + { + SignalHandler.Publish(value); + } + } +} diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs.meta b/Assets/Scripts/Connector/SignalPublisherBase.cs.meta new file mode 100644 index 0000000..b7bf827 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8879c3ee2da64f788d523a264173f92a +timeCreated: 1570585876 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver.meta b/Assets/Scripts/Connector/SignalReceiver.meta new file mode 100644 index 0000000..c5d6eb9 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7f5ca0679ad24724b4d549ec64037285 +timeCreated: 1570613813 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs new file mode 100644 index 0000000..2701410 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs @@ -0,0 +1,10 @@ +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalReceiver +{ + [AddComponentMenu("UniFlow/SignalReceiver/ScriptableObject", (int) ConnectorType.ScriptableObjectSignalReceiver)] + public class ScriptableObjectSignalReceiver : SignalReceiverBase + { + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta new file mode 100644 index 0000000..848d084 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 02dd196ba99c48afa56db823950bd210 +timeCreated: 1570622357 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs new file mode 100644 index 0000000..98e9f23 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -0,0 +1,10 @@ +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalReceiver +{ + [AddComponentMenu("UniFlow/SignalReceiver/String", (int) ConnectorType.StringSignalReceiver)] + public class StringSignalReceiver : SignalReceiverBase + { + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs.meta new file mode 100644 index 0000000..15860d3 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 99d4ba2251f74977b227ba722112eb59 +timeCreated: 1570613813 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs new file mode 100644 index 0000000..64e5c3a --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -0,0 +1,24 @@ +using System; +using UniFlow.Attribute; +using UniFlow.Utility; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector +{ + public abstract class SignalReceiverBase : ConnectorBase, ISignalReceiver where TSignal : ISignal + { + [SerializeField] private TSignal signal = default; + [ValueReceiver] public TSignal Signal => signal; + + public override IObservable OnConnectAsObservable() + { + return ((ISignalReceiver) this).OnReceiveAsObservable().AsUnitObservable(); + } + + IObservable ISignalReceiver.OnReceiveAsObservable() + { + return SignalHandler.OnReceiveAsObservable(Signal); + } + } +} diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs.meta b/Assets/Scripts/Connector/SignalReceiverBase.cs.meta new file mode 100644 index 0000000..35dd21a --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c999e5be3bec4c2d834a03fa9358302c +timeCreated: 1570613871 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 8f1d8cf..e8e88e1 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -112,6 +112,14 @@ public enum ConnectorType ValueInjectorTimelineAudioTrack, ValueInjectorTimelineAnimationTrack, + SignalPublisher = 6000, + StringSignalPublisher, + ScriptableObjectSignalPublisher, + + SignalReceiver = 6500, + StringSignalReceiver, + ScriptableObjectSignalReceiver, + Timer = 9000, Interval, TimeScaleController, diff --git a/Assets/Scripts/Signal/ScriptableObjectSignal.cs b/Assets/Scripts/Signal/ScriptableObjectSignal.cs new file mode 100644 index 0000000..51c2bf4 --- /dev/null +++ b/Assets/Scripts/Signal/ScriptableObjectSignal.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace UniFlow.Signal +{ + public class ScriptableObjectSignal : ScriptableObject, ISignal + { + } +} diff --git a/Assets/Scripts/Signal/ScriptableObjectSignal.cs.meta b/Assets/Scripts/Signal/ScriptableObjectSignal.cs.meta new file mode 100644 index 0000000..fb0baae --- /dev/null +++ b/Assets/Scripts/Signal/ScriptableObjectSignal.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e3ce82478d9c41ccbab0985350d89b33 +timeCreated: 1570622491 \ No newline at end of file diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs new file mode 100644 index 0000000..0e26e3d --- /dev/null +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -0,0 +1,39 @@ +using System; +using JetBrains.Annotations; +using UnityEngine; + +namespace UniFlow.Signal +{ + [Serializable] + [PublicAPI] + public struct StringSignal : IEquatableSignal + { + public StringSignal(string name) + { + this.name = name; + } + + [SerializeField] private string name; + + public string Name + { + get => name; + set => name = value; + } + + public bool Equals(StringSignal other) + { + return Name == other.Name; + } + + public override bool Equals(object obj) + { + return obj is StringSignal other && Equals(other); + } + + public override int GetHashCode() + { + return Name != null ? Name.GetHashCode() : 0; + } + } +} diff --git a/Assets/Scripts/Signal/StringSignal.cs.meta b/Assets/Scripts/Signal/StringSignal.cs.meta new file mode 100644 index 0000000..34ed81e --- /dev/null +++ b/Assets/Scripts/Signal/StringSignal.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4a8ea613e5e647a3bcc4189364cce388 +timeCreated: 1570615221 \ No newline at end of file diff --git a/Assets/Scripts/Utility.meta b/Assets/Scripts/Utility.meta new file mode 100644 index 0000000..78416e2 --- /dev/null +++ b/Assets/Scripts/Utility.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f4786649281c490ca2f003e7955f1867 +timeCreated: 1570620920 \ No newline at end of file diff --git a/Assets/Scripts/Utility/SignalHandler.cs b/Assets/Scripts/Utility/SignalHandler.cs new file mode 100644 index 0000000..c4ec21f --- /dev/null +++ b/Assets/Scripts/Utility/SignalHandler.cs @@ -0,0 +1,26 @@ +using System; +using UniFlow.Signal; +using UniRx; + +namespace UniFlow.Utility +{ + public static class SignalHandler where TSignal : ISignal + { + public static void Publish(TSignal signal) + { + MessageBroker.Default.Publish(signal); + } + + public static IObservable OnReceiveAsObservable() + { + return typeof(ScriptableObjectSignal).IsAssignableFrom(typeof(TSignal)) + ? MessageBroker.Default.Receive().Where(x => x is TSignal).Select(x => (TSignal) (ISignal) x) + : MessageBroker.Default.Receive(); + } + + public static IObservable OnReceiveAsObservable(TSignal signal) + { + return OnReceiveAsObservable().Where(x => !(x is IEquatableSignal valueSignal) || valueSignal.Equals(signal)); + } + } +} diff --git a/Assets/Scripts/Utility/SignalHandler.cs.meta b/Assets/Scripts/Utility/SignalHandler.cs.meta new file mode 100644 index 0000000..8ef7d8c --- /dev/null +++ b/Assets/Scripts/Utility/SignalHandler.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b6ee557d0ae944b48d75e41ebfe2aaaf +timeCreated: 1570618810 \ No newline at end of file From 853b43ac4691cf967e75deb171ab21fb891782c5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 22:12:52 +0900 Subject: [PATCH 276/453] :wrench: Add Signals into order list in Graph View --- Assets/Editor/Scripts/SearchWindowProvider.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 01ad07a..af38121 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -31,6 +31,8 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "ValueExtractor", "ValueCombiner", "ValueInjector", + "SignalPublisher", + "SignalReceiver", }; public void Initialize(FlowGraphView flowGraphView) From 68bb30a853de075af61abeb15b861be83612580a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 9 Oct 2019 22:17:51 +0900 Subject: [PATCH 277/453] :clipboard: Bump up version to v0.1.0-preview.27 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index a165e40..bca147d 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.26", + "version": "0.1.0-preview.27", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From e7edb6b90d408d546aa677624f5ff41a189c479d Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Fri, 11 Oct 2019 03:29:34 +0900 Subject: [PATCH 278/453] :tada: Add RuntimePlatformProvider / RuntimePlatformComparer --- .../ValueComparer/RuntimePlatformComparer.cs | 9 +++++++++ .../ValueComparer/RuntimePlatformComparer.cs.meta | 3 +++ .../ValueProvider/RuntimePlatformProvider.cs | 13 +++++++++++++ .../ValueProvider/RuntimePlatformProvider.cs.meta | 3 +++ Assets/Scripts/ConnectorType.cs | 2 ++ Assets/Scripts/PublishValueEvent.cs | 5 +++++ 6 files changed, 35 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs create mode 100644 Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs.meta create mode 100644 Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs new file mode 100644 index 0000000..059a8bd --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace UniFlow.Connector.ValueComparer +{ + [AddComponentMenu("UniFlow/ValueComparer/RuntimePlatform", (int) ConnectorType.ValueComparerRuntimePlatform)] + public class RuntimePlatformComparer : EnumComparerBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs.meta b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs.meta new file mode 100644 index 0000000..8b44fc6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a7c266820be04ffb87162fa4820ab210 +timeCreated: 1570731972 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs new file mode 100644 index 0000000..7a4fafe --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatform", (int) ConnectorType.ValueProviderRuntimePlatform)] + public class RuntimePlatformProvider : ValueProviderBase + { + protected override RuntimePlatform Provide() + { + return Application.platform; + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs.meta b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs.meta new file mode 100644 index 0000000..872e64c --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5aa491aa255c4965a33b16241963cf07 +timeCreated: 1570731798 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index e8e88e1..48d4377 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -61,6 +61,7 @@ public enum ConnectorType ValueProviderVector3Int, ValueProviderColor, ValueProviderColor32, + ValueProviderRuntimePlatform, CustomValueProvider, ValueComparerBool = 2000, @@ -82,6 +83,7 @@ public enum ConnectorType ValueComparerVector3Int, ValueComparerColor, ValueComparerColor32, + ValueComparerRuntimePlatform, CustomValueComparer, ValueExtractorVector2 = 3000, diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs index 2c4fd2e..24db0d6 100644 --- a/Assets/Scripts/PublishValueEvent.cs +++ b/Assets/Scripts/PublishValueEvent.cs @@ -216,5 +216,10 @@ public class PublishObservableTweenEaseTypeEvent : UnityEvent + { + } + #endregion } From d035f34a4e421b53670531fd01b6ad1a8d90246d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:08:47 +0900 Subject: [PATCH 279/453] :beetle: Avoid IndexOutOfRangeException --- Assets/Editor/Scripts/FlowGraphView.cs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index addff6b..abda161 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -131,14 +131,21 @@ public void Relocation(bool forceReset = false) var groupId = Undo.GetCurrentGroup(); + if (!NormalizedPositionDictionary.Any()) + { + return; + } + + var maxX = NormalizedPositionDictionary.Max(x => x.Value.x); + for (var i = 0; i <= maxX; i++) + { + nextYList.Add(0.0f); + } + foreach (var pair in NormalizedPositionDictionary) { var node = pair.Key; var normalizedPosition = pair.Value; - if (nextYList.Count <= normalizedPosition.x) - { - nextYList.Add(0.0f); - } if (!forceReset && node.GetRecordedPosition().magnitude > 0.0f) { From dcba8f6c4ecf4ebc29ef863600b22aa6adfb8884 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:19:31 +0900 Subject: [PATCH 280/453] :sparkles: Add interfaces for Signals --- Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs | 7 +++++++ .../Connector/SignalPublisher/ISignalCreator.cs.meta | 3 +++ Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs | 7 +++++++ .../Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta | 3 +++ 4 files changed, 20 insertions(+) create mode 100644 Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta diff --git a/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs b/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs new file mode 100644 index 0000000..5eb6452 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs @@ -0,0 +1,7 @@ +namespace UniFlow.Connector.SignalPublisher +{ + public interface ISignalCreator where TSignal : ISignal + { + TSignal CreateSignal(); + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta b/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta new file mode 100644 index 0000000..73e2a22 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f627a481c7f14f61ab6c4d48bf024d3d +timeCreated: 1570702872 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs b/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs new file mode 100644 index 0000000..491e449 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs @@ -0,0 +1,7 @@ +namespace UniFlow.Connector.SignalReceiver +{ + public interface ISignalFilter : ISignalReceiver where TSignal : ISignal + { + bool Filter(TSignal signal); + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta b/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta new file mode 100644 index 0000000..7598ab5 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eb841db22da3404ab0707a89477ec5db +timeCreated: 1570702686 \ No newline at end of file From e81bd7542c74055d475b482aaddc47447d7a6fdd Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:20:11 +0900 Subject: [PATCH 281/453] :sparkles: Use interfaces instead of abstraction methods --- .../SignalPublisher/StringSignalPublisher.cs | 14 ++++++++++++- .../Scripts/Connector/SignalPublisherBase.cs | 11 +++++++++- .../SignalReceiver/StringSignalReceiver.cs | 20 ++++++++++++++++++- .../Scripts/Connector/SignalReceiverBase.cs | 19 ++++++++++++++++-- 4 files changed, 59 insertions(+), 5 deletions(-) diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index bbaa592..1523420 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -1,10 +1,22 @@ +using UniFlow.Attribute; using UniFlow.Signal; using UnityEngine; namespace UniFlow.Connector.SignalPublisher { [AddComponentMenu("UniFlow/SignalPublisher/String", (int) ConnectorType.StringSignalPublisher)] - public class StringSignalPublisher : SignalPublisherBase + public class StringSignalPublisher : SignalPublisherBase, ISignalCreator { + [SerializeField] private string signalName = default; + [ValueReceiver] public string SignalName + { + get => signalName; + set => signalName = value; + } + + StringSignal ISignalCreator.CreateSignal() + { + return string.IsNullOrEmpty(SignalName) ? Signal : new StringSignal(SignalName); + } } } diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs b/Assets/Scripts/Connector/SignalPublisherBase.cs index 07be31e..5988c53 100644 --- a/Assets/Scripts/Connector/SignalPublisherBase.cs +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs @@ -1,5 +1,6 @@ using System; using UniFlow.Attribute; +using UniFlow.Connector.SignalPublisher; using UniFlow.Utility; using UniRx; using UnityEngine; @@ -9,10 +10,18 @@ namespace UniFlow.Connector public abstract class SignalPublisherBase : ConnectorBase, ISignalPublisher where TSignal : ISignal { [SerializeField] private TSignal signal = default; - [ValueReceiver] public TSignal Signal => signal; + [ValueReceiver] public TSignal Signal + { + get => signal; + set => signal = value; + } public override IObservable OnConnectAsObservable() { + if (this is ISignalCreator signalCreator) + { + Signal = signalCreator.CreateSignal(); + } ((ISignalPublisher) this).Publish(Signal); return Observable.ReturnUnit(); } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 98e9f23..24d08d0 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -1,10 +1,28 @@ +using UniFlow.Attribute; +using UniFlow.Connector.SignalPublisher; using UniFlow.Signal; using UnityEngine; namespace UniFlow.Connector.SignalReceiver { [AddComponentMenu("UniFlow/SignalReceiver/String", (int) ConnectorType.StringSignalReceiver)] - public class StringSignalReceiver : SignalReceiverBase + public class StringSignalReceiver : SignalReceiverBase, ISignalCreator, ISignalFilter { + [SerializeField] private string signalName = default; + [ValueReceiver] public string SignalName + { + get => signalName; + set => signalName = value; + } + + bool ISignalFilter.Filter(StringSignal signal) + { + return signal.Name == SignalName; + } + + StringSignal ISignalCreator.CreateSignal() + { + return string.IsNullOrEmpty(SignalName) ? Signal : new StringSignal(SignalName); + } } } diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index 64e5c3a..679a2bf 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -1,5 +1,7 @@ using System; using UniFlow.Attribute; +using UniFlow.Connector.SignalPublisher; +using UniFlow.Connector.SignalReceiver; using UniFlow.Utility; using UniRx; using UnityEngine; @@ -9,16 +11,29 @@ namespace UniFlow.Connector public abstract class SignalReceiverBase : ConnectorBase, ISignalReceiver where TSignal : ISignal { [SerializeField] private TSignal signal = default; - [ValueReceiver] public TSignal Signal => signal; + [ValueReceiver] public TSignal Signal + { + get => signal; + set => signal = value; + } public override IObservable OnConnectAsObservable() { + if (this is ISignalCreator signalCreator) + { + Signal = signalCreator.CreateSignal(); + } return ((ISignalReceiver) this).OnReceiveAsObservable().AsUnitObservable(); } IObservable ISignalReceiver.OnReceiveAsObservable() { - return SignalHandler.OnReceiveAsObservable(Signal); + var observable = SignalHandler.OnReceiveAsObservable(Signal); + if (this is ISignalFilter signalFilter) + { + observable = observable.Where(signalFilter.Filter); + } + return observable; } } } From 9cb2e788331d4ba21e621c7f67251782c43932c1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:20:33 +0900 Subject: [PATCH 282/453] :beetle: Publish signals correctly for ScriptableObject --- Assets/Scripts/Utility/SignalHandler.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Utility/SignalHandler.cs b/Assets/Scripts/Utility/SignalHandler.cs index c4ec21f..ad51ef8 100644 --- a/Assets/Scripts/Utility/SignalHandler.cs +++ b/Assets/Scripts/Utility/SignalHandler.cs @@ -8,7 +8,14 @@ public static class SignalHandler where TSignal : ISignal { public static void Publish(TSignal signal) { - MessageBroker.Default.Publish(signal); + if (typeof(ScriptableObjectSignal).IsAssignableFrom(typeof(TSignal))) + { + MessageBroker.Default.Publish(signal as ScriptableObjectSignal); + } + else + { + MessageBroker.Default.Publish(signal); + } } public static IObservable OnReceiveAsObservable() From e9d8d0935e562454d19c8a0f33760d5ddddf3f22 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:29:11 +0900 Subject: [PATCH 283/453] :wrench: Change default GameObject on create node --- Assets/Editor/Scripts/FlowNode.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index cf2a758..3693187 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -346,9 +346,9 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI private static GameObject DeterminateGameObject() { - if (Selection.activeGameObject != default) + if (UniFlowSettings.instance.SelectedGameObject) { - return Selection.activeGameObject; + return UniFlowSettings.instance.SelectedGameObject; } if (GameObject.Find(DefaultTargetGameObjectName) != default) From f36abc44452872e232e006943c7bc876ebbc718f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:31:19 +0900 Subject: [PATCH 284/453] :tada: Implement And, Or, Xor, Not connector --- Assets/Scripts/Connector/Expression.meta | 3 +++ Assets/Scripts/Connector/Expression/And.cs | 27 +++++++++++++++++++ .../Scripts/Connector/Expression/And.cs.meta | 3 +++ Assets/Scripts/Connector/Expression/Not.cs | 27 +++++++++++++++++++ .../Scripts/Connector/Expression/Not.cs.meta | 3 +++ Assets/Scripts/Connector/Expression/Or.cs | 27 +++++++++++++++++++ .../Scripts/Connector/Expression/Or.cs.meta | 3 +++ Assets/Scripts/Connector/Expression/Xor.cs | 19 +++++++++++++ .../Scripts/Connector/Expression/Xor.cs.meta | 3 +++ Assets/Scripts/ConnectorType.cs | 5 ++++ 10 files changed, 120 insertions(+) create mode 100644 Assets/Scripts/Connector/Expression.meta create mode 100644 Assets/Scripts/Connector/Expression/And.cs create mode 100644 Assets/Scripts/Connector/Expression/And.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/Not.cs create mode 100644 Assets/Scripts/Connector/Expression/Not.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/Or.cs create mode 100644 Assets/Scripts/Connector/Expression/Or.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/Xor.cs create mode 100644 Assets/Scripts/Connector/Expression/Xor.cs.meta diff --git a/Assets/Scripts/Connector/Expression.meta b/Assets/Scripts/Connector/Expression.meta new file mode 100644 index 0000000..d549b80 --- /dev/null +++ b/Assets/Scripts/Connector/Expression.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9ef5fd6a410a4aac838f670a8fb6bc98 +timeCreated: 1570698173 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/And.cs b/Assets/Scripts/Connector/Expression/And.cs new file mode 100644 index 0000000..79c85e1 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/And.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/And", (int) ConnectorType.And)] + public class And : ConnectorBase + { + private IList Conditions { get; } = new List(); + + [ValueReceiver] + public bool Value + { + get => Conditions.All(x => x); + set => Conditions.Add(value); + } + + public override IObservable OnConnectAsObservable() + { + return Value ? Observable.ReturnUnit() : Observable.Empty(); + } + } +} diff --git a/Assets/Scripts/Connector/Expression/And.cs.meta b/Assets/Scripts/Connector/Expression/And.cs.meta new file mode 100644 index 0000000..99f6600 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/And.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dbd6c658e45e428dbad1bcf00f3d0b41 +timeCreated: 1570697873 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/Not.cs b/Assets/Scripts/Connector/Expression/Not.cs new file mode 100644 index 0000000..cd56904 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Not.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/Not", (int) ConnectorType.Not)] + public class Not : ConnectorBase + { + private IList Conditions { get; } = new List(); + + [ValueReceiver] + public bool Value + { + get => Conditions.All(x => !x); + set => Conditions.Add(value); + } + + public override IObservable OnConnectAsObservable() + { + return Value ? Observable.ReturnUnit() : Observable.Empty(); + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Not.cs.meta b/Assets/Scripts/Connector/Expression/Not.cs.meta new file mode 100644 index 0000000..ef2791a --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Not.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 81a19da1e9cb4927bcfaf06a4d3f4b18 +timeCreated: 1570698484 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/Or.cs b/Assets/Scripts/Connector/Expression/Or.cs new file mode 100644 index 0000000..a557d44 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Or.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/Or", (int) ConnectorType.Or)] + public class Or : ConnectorBase + { + private IList Conditions { get; } = new List(); + + [ValueReceiver] + public bool Value + { + get => Conditions.Any(x => x); + set => Conditions.Add(value); + } + + public override IObservable OnConnectAsObservable() + { + return Value ? Observable.ReturnUnit() : Observable.Empty(); + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Or.cs.meta b/Assets/Scripts/Connector/Expression/Or.cs.meta new file mode 100644 index 0000000..2ee7084 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Or.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 96712457dd254e3dabf5e90b9a8d0b58 +timeCreated: 1570698091 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/Xor.cs b/Assets/Scripts/Connector/Expression/Xor.cs new file mode 100644 index 0000000..6f086a2 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Xor.cs @@ -0,0 +1,19 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/Xor", (int) ConnectorType.Xor)] + public class Xor : ConnectorBase + { + [ValueReceiver] public bool Left { get; set; } + [ValueReceiver] public bool Right { get; set; } + + public override IObservable OnConnectAsObservable() + { + return Left ^ Right ? Observable.ReturnUnit() : Observable.Empty(); + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Xor.cs.meta b/Assets/Scripts/Connector/Expression/Xor.cs.meta new file mode 100644 index 0000000..7812a36 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Xor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9866f4f694fb4034967352fe08366978 +timeCreated: 1570698518 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 48d4377..749d1e0 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -122,6 +122,11 @@ public enum ConnectorType StringSignalReceiver, ScriptableObjectSignalReceiver, + And = 8000, + Or, + Xor, + Not, + Timer = 9000, Interval, TimeScaleController, From 9566dc73d6cf595c7879d77cfd4048add5aec39a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:31:46 +0900 Subject: [PATCH 285/453] :wrench: Add sort order --- Assets/Editor/Scripts/SearchWindowProvider.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index af38121..d5b07cd 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -24,6 +24,7 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "Controller", "Event", "Logic", + "Expression", "Receiver", "Misc", "ValueProvider", From 3e13e371afaa00480d298f73f8d3aaad651eabea Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:34:44 +0900 Subject: [PATCH 286/453] :sparkles: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 749d1e0..5f3d81f 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -32,6 +32,7 @@ public enum ConnectorType TimelineSignal, RaycasterController, RaycastTargetController, + TransformSiblingController, MoveParentTransform, DontDestroyOnLoad, From 13563f82b5709cc8ac65f86427d792b03a8da9f8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:34:59 +0900 Subject: [PATCH 287/453] :sparkles: Add Connector --- .../Controller/TransformSiblingController.cs | 55 +++++++++++++++++++ .../TransformSiblingController.cs.meta | 3 + 2 files changed, 58 insertions(+) create mode 100644 Assets/Scripts/Connector/Controller/TransformSiblingController.cs create mode 100644 Assets/Scripts/Connector/Controller/TransformSiblingController.cs.meta diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs new file mode 100644 index 0000000..dc2e509 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs @@ -0,0 +1,55 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/TransformSiblingController", (int) ConnectorType.TransformSiblingController)] + public class TransformSiblingController : ConnectorBase + { + [SerializeField] private Transform targetTransform = default; + [SerializeField] private TransformSiblingControlMethod transformSiblingControlMethod = default; + [SerializeField] private int index = default; + + [ValueReceiver] public Transform TargetTransform + { + get => targetTransform != default + ? targetTransform + : targetTransform = transform; + set => targetTransform = value; + } + private TransformSiblingControlMethod TransformSiblingControlMethod => transformSiblingControlMethod; + [ValueReceiver] public int Index + { + get => index; + set => index = value; + } + + public override IObservable OnConnectAsObservable() + { + switch (TransformSiblingControlMethod) + { + case TransformSiblingControlMethod.SetIndex: + TargetTransform.SetSiblingIndex(Index); + break; + case TransformSiblingControlMethod.AsFirst: + TargetTransform.SetAsFirstSibling(); + break; + case TransformSiblingControlMethod.AsLast: + TargetTransform.SetAsLastSibling(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + return Observable.ReturnUnit(); + } + } + + public enum TransformSiblingControlMethod + { + SetIndex, + AsFirst, + AsLast, + } +} diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs.meta b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs.meta new file mode 100644 index 0000000..a97d743 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 24638babb79546c7aa8f949cb8305d00 +timeCreated: 1570695094 \ No newline at end of file From 8f681d559925856e440234d5664b0f81c2fa3b18 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:37:49 +0900 Subject: [PATCH 288/453] :sparkles: Add interface for value injectable connector --- Assets/Scripts/IInjectable.cs | 7 +++++++ Assets/Scripts/IInjectable.cs.meta | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 Assets/Scripts/IInjectable.cs create mode 100644 Assets/Scripts/IInjectable.cs.meta diff --git a/Assets/Scripts/IInjectable.cs b/Assets/Scripts/IInjectable.cs new file mode 100644 index 0000000..d17e54b --- /dev/null +++ b/Assets/Scripts/IInjectable.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface IInjectable + { + void Inject(T value); + } +} diff --git a/Assets/Scripts/IInjectable.cs.meta b/Assets/Scripts/IInjectable.cs.meta new file mode 100644 index 0000000..7726247 --- /dev/null +++ b/Assets/Scripts/IInjectable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd609ffac31a418481cf73841e41494e +timeCreated: 1570680354 \ No newline at end of file From 406f79f9d4ec6ee60b99b3f1d96b408bd0335f93 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 12:38:37 +0900 Subject: [PATCH 289/453] :tada: Add InjectableExtractorBase --- .../ValueExtractor/InjectableExtractorBase.cs | 34 +++++++++++++++++++ .../InjectableExtractorBase.cs.meta | 3 ++ 2 files changed, 37 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs create mode 100644 Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs new file mode 100644 index 0000000..2a83b20 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs @@ -0,0 +1,34 @@ +using System; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.ValueExtractor +{ + public abstract class InjectableExtractorBase : ConnectorBase, IInjectable + { + [SerializeField] private T value = default; + [ValueReceiver] public T Value + { + get => value; + set => this.value = value; + } + + private ISubject OnExtractSubject { get; } = new AsyncSubject(); + + void IInjectable.Inject(T v) + { + Value = v; + Extract(); + OnExtractSubject.OnNext(Unit.Default); + OnExtractSubject.OnCompleted(); + } + + public override IObservable OnConnectAsObservable() + { + return OnExtractSubject; + } + + protected abstract void Extract(); + } +} diff --git a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta new file mode 100644 index 0000000..2b9d1c4 --- /dev/null +++ b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 936d757740354cf882d575e58af7e527 +timeCreated: 1570680235 \ No newline at end of file From 24cd2f538fe25184bd7cfeef4a31864f7c54c68f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 13:24:11 +0900 Subject: [PATCH 290/453] :sparkles: Tweak interfaces --- .../Connector/ValueExtractor/InjectableExtractorBase.cs | 8 ++++++-- Assets/Scripts/IInjectable.cs | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs index 2a83b20..a1e0f5d 100644 --- a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs +++ b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs @@ -19,16 +19,20 @@ [ValueReceiver] public T Value void IInjectable.Inject(T v) { Value = v; - Extract(); OnExtractSubject.OnNext(Unit.Default); OnExtractSubject.OnCompleted(); } - public override IObservable OnConnectAsObservable() + IObservable IInjectable.WaitForInjectAsObservable() { return OnExtractSubject; } + public override IObservable OnConnectAsObservable() + { + return ((IInjectable) this).WaitForInjectAsObservable().Do(_ => Extract()); + } + protected abstract void Extract(); } } diff --git a/Assets/Scripts/IInjectable.cs b/Assets/Scripts/IInjectable.cs index d17e54b..0d3143b 100644 --- a/Assets/Scripts/IInjectable.cs +++ b/Assets/Scripts/IInjectable.cs @@ -1,7 +1,11 @@ +using System; +using UniRx; + namespace UniFlow { public interface IInjectable { void Inject(T value); + IObservable WaitForInjectAsObservable(); } } From 865bfe15cdabc130d32ac8474e2d283d890e023f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 13:26:23 +0900 Subject: [PATCH 291/453] :sparkles: Expose compared result --- Assets/Scripts/Connector/ValueComparer/ComparerBase.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 6123057..d20c94a 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -10,16 +10,21 @@ public abstract class ComparerBase : ConnectorBase { [SerializeField] private TValue expect = default; - [UsedImplicitly] public TValue Expect + [ValueReceiver] public TValue Expect { get => expect; set => expect = value; } [ValueReceiver] public TValue Actual { get; set; } + [SerializeField] private PublishBoolEvent publishResult = new PublishBoolEvent(); + [ValuePublisher("Result")] public PublishBoolEvent PublishResult => publishResult; + public override IObservable OnConnectAsObservable() { - return Compare(Actual) ? Observable.ReturnUnit() : Observable.Empty(); + var result = Compare(Actual); + PublishResult.Invoke(result); + return result ? Observable.ReturnUnit() : Observable.Empty(); } protected abstract bool Compare(TValue actual); From 2a9213b03ff728136a852ff71dd5198513d20908 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 13:43:22 +0900 Subject: [PATCH 292/453] :sparkles: Change timing for prepare connector --- .../Connector/Controller/PlayableController.cs | 15 ++++++++------- .../Controller/SimpleAnimationController.cs | 3 ++- Assets/Scripts/Connector/Event/AnimationEvent.cs | 9 ++------- .../Connector/Event/SimpleAnimationEvent.cs | 9 ++------- 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index c529484..26cf2e6 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -43,7 +43,14 @@ [ValueReceiver] public TimelineAsset TimelineAsset set => timelineAsset = value; } - private void Awake() + public override IObservable OnConnectAsObservable() + { + PreparePlayableDirector(); + InvokePlayableDirectorMethod(); + return Observable.ReturnUnit(); + } + + private void PreparePlayableDirector() { if (PlayableDirector != default && TimelineAsset != default) { @@ -51,12 +58,6 @@ private void Awake() } } - public override IObservable OnConnectAsObservable() - { - InvokePlayableDirectorMethod(); - return Observable.ReturnUnit(); - } - private void InvokePlayableDirectorMethod() { diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 8b77b03..f53295b 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -73,11 +73,12 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode public override IObservable OnConnectAsObservable() { + PrepareSimpleAnimation(); InvokeSimpleAnimationMethod(); return Observable.ReturnUnit(); } - private void Awake() + private void PrepareSimpleAnimation() { // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 2885be2..a521ba3 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -71,11 +71,7 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode public override IObservable OnConnectAsObservable() { - if (AnimationClip != default && GetComponent() == default && SimpleAnimation.GetStates().All(x => x.clip != AnimationClip)) - { - SimpleAnimation.AddClip(AnimationClip, AnimationClip.GetInstanceID().ToString()); - } - + PrepareAnimationEvent(); return Subject // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) @@ -93,7 +89,7 @@ public void Dispatch(UnityEngine.AnimationEvent animationEvent) Subject.OnNext(animationEvent); } - protected override void Start() + private void PrepareAnimationEvent() { // ReSharper disable once InvertIf // Automatic add components Animator and SimpleAnimation if AudioClip specified and Animator component does not exists. @@ -103,7 +99,6 @@ protected override void Start() SimpleAnimation.cullingMode = CullingMode; Animator.updateMode = UpdateMode; } - base.Start(); } } } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 8b24577..252a467 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -61,14 +61,9 @@ [ValuePublisher] public AnimationClip AnimationClip private IDictionary PlayingStatuses { get; } = new Dictionary(); - protected override void Start() - { - ObserveSimpleAnimation(); - base.Start(); - } - public override IObservable OnConnectAsObservable() { + ObserveSimpleAnimation(); return CurrentStateSubject .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) .AsUnitObservable(); @@ -89,7 +84,7 @@ private void ObserveSimpleAnimation() private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTime)> pair, SimpleAnimation.State state) { - if (!pair.Previous.isPlaying && pair.Current.isPlaying && !PlayingStatuses[state]) + if (pair.Current.isPlaying && !PlayingStatuses[state]) { PlayingStatuses[state] = true; CurrentStateSubject.OnNext((SimpleAnimationEventType.Play, state.clip)); From b87f2c864029a7607bdc72c489161fd3300d75a9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 11 Oct 2019 14:20:27 +0900 Subject: [PATCH 293/453] :clipboard: Bump up version to v0.1.0-preview.28 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index bca147d..445e1ad 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.27", + "version": "0.1.0-preview.28", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 8b6edbd3198de92b9e192946c4d5aabae497d37d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 01:00:21 +0900 Subject: [PATCH 294/453] :beetle: Fix to be corrupted when the enum value is changed --- Assets/Editor/Scripts/FlowNode.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 3693187..e55adbb 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -272,8 +272,23 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI } var serializedObject = new SerializedObject(connectorInfo.Connector as Component); - var field = new PropertyField(serializedObject.FindProperty(parameter.Name), ToDisplayName(parameter.Name)); - field.Bind(serializedObject); + var serializedProperty = serializedObject.FindProperty(parameter.Name); + var displayName = ToDisplayName(parameter.Name); + var field = new PropertyField(serializedProperty, displayName); + try + { + field.Bind(serializedObject); + } + catch (ArgumentException) + { + // First-aid for problems that may cause the display to be corrupted when the enum value is changed + serializedProperty.enumValueIndex = 0; + serializedProperty.ClearArray(); + serializedObject.ApplyModifiedProperties(); + field = new PropertyField(serializedProperty, displayName); + field.Bind(serializedObject); + } + return field; } From f3d3d9326f1a3ba93830eb8ae82bdcb87950ce70 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 01:02:45 +0900 Subject: [PATCH 295/453] :sparkles: Support parameters for StringSignal --- .../SignalPublisher/StringSignalPublisher.cs | 44 ++++++++++++++++++- .../SignalReceiver/StringSignalReceiver.cs | 21 +++++++++ Assets/Scripts/Signal/StringSignal.cs | 38 ++++++++++++++++ 3 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index 1523420..76fe473 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -8,15 +8,57 @@ namespace UniFlow.Connector.SignalPublisher public class StringSignalPublisher : SignalPublisherBase, ISignalCreator { [SerializeField] private string signalName = default; + [SerializeField] private bool boolParameter = default; + [SerializeField] private int intParameter = default; + [SerializeField] private float floatParameter = default; + [SerializeField] private string stringParameter = default; + [SerializeField] private Object objectParameter = default; + [ValueReceiver] public string SignalName { get => signalName; set => signalName = value; } + [ValueReceiver] public bool BoolParameter + { + get => boolParameter; + set => boolParameter = value; + } + [ValueReceiver] public int IntParameter + { + get => intParameter; + set => intParameter = value; + } + [ValueReceiver] public float FloatParameter + { + get => floatParameter; + set => floatParameter = value; + } + [ValueReceiver] public string StringParameter + { + get => stringParameter; + set => stringParameter = value; + } + [ValueReceiver] public Object ObjectParameter + { + get => objectParameter; + set => objectParameter = value; + } StringSignal ISignalCreator.CreateSignal() { - return string.IsNullOrEmpty(SignalName) ? Signal : new StringSignal(SignalName); + return string.IsNullOrEmpty(SignalName) + ? Signal + : new StringSignal( + SignalName, + new StringSignal.SignalParameter( + BoolParameter, + IntParameter, + FloatParameter, + StringParameter, + ObjectParameter + ) + ); } } } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 24d08d0..2e69603 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -15,6 +15,18 @@ [ValueReceiver] public string SignalName set => signalName = value; } + [SerializeField] private PublishBoolEvent publishBoolParameter = new PublishBoolEvent(); + [SerializeField] private PublishIntEvent publishIntParameter = new PublishIntEvent(); + [SerializeField] private PublishFloatEvent publishFloatParameter = new PublishFloatEvent(); + [SerializeField] private PublishStringEvent publishStringParameter = new PublishStringEvent(); + [SerializeField] private PublishObjectEvent publishObjectParameter = new PublishObjectEvent(); + + [ValuePublisher("BoolParameter")] private PublishBoolEvent PublishBoolParameter => publishBoolParameter; + [ValuePublisher("IntParameter")] private PublishIntEvent PublishIntParameter => publishIntParameter; + [ValuePublisher("FloatParameter")] private PublishFloatEvent PublishFloatParameter => publishFloatParameter; + [ValuePublisher("StringParameter")] private PublishStringEvent PublishStringParameter => publishStringParameter; + [ValuePublisher("ObjectParameter")] private PublishObjectEvent PublishObjectParameter => publishObjectParameter; + bool ISignalFilter.Filter(StringSignal signal) { return signal.Name == SignalName; @@ -24,5 +36,14 @@ StringSignal ISignalCreator.CreateSignal() { return string.IsNullOrEmpty(SignalName) ? Signal : new StringSignal(SignalName); } + + protected override void OnReceive(StringSignal receivedSignal) + { + PublishBoolParameter.Invoke(receivedSignal.Parameter.BoolValue); + PublishIntParameter.Invoke(receivedSignal.Parameter.IntValue); + PublishFloatParameter.Invoke(receivedSignal.Parameter.FloatValue); + PublishStringParameter.Invoke(receivedSignal.Parameter.StringValue); + PublishObjectParameter.Invoke(receivedSignal.Parameter.ObjectValue); + } } } diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs index 0e26e3d..6ab3c6c 100644 --- a/Assets/Scripts/Signal/StringSignal.cs +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -1,6 +1,7 @@ using System; using JetBrains.Annotations; using UnityEngine; +using Object = UnityEngine.Object; namespace UniFlow.Signal { @@ -11,15 +12,28 @@ public struct StringSignal : IEquatableSignal public StringSignal(string name) { this.name = name; + parameter = default; + } + + public StringSignal(string name, SignalParameter parameter) + { + this.name = name; + this.parameter = parameter; } [SerializeField] private string name; + [SerializeField] private SignalParameter parameter; public string Name { get => name; set => name = value; } + public SignalParameter Parameter + { + get => parameter; + set => parameter = value; + } public bool Equals(StringSignal other) { @@ -35,5 +49,29 @@ public override int GetHashCode() { return Name != null ? Name.GetHashCode() : 0; } + + [Serializable] + public struct SignalParameter + { + public SignalParameter(bool boolValue, int intValue, float floatValue, string stringValue, Object objectValue) + { + this.boolValue = boolValue; + this.intValue = intValue; + this.floatValue = floatValue; + this.stringValue = stringValue; + this.objectValue = objectValue; + } + + [SerializeField] private bool boolValue; + [SerializeField] private int intValue; + [SerializeField] private float floatValue; + [SerializeField] private string stringValue; + [SerializeField] private Object objectValue; + public bool BoolValue => boolValue; + public int IntValue => intValue; + public float FloatValue => floatValue; + public string StringValue => stringValue; + public Object ObjectValue => objectValue; + } } } From 9226888ec82ff71bb70f4b85de8a7885636116c6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 01:03:04 +0900 Subject: [PATCH 296/453] :sparkles: Callback when receive signals --- Assets/Scripts/Connector/SignalReceiverBase.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index 679a2bf..0bedcd2 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -23,7 +23,11 @@ public override IObservable OnConnectAsObservable() { Signal = signalCreator.CreateSignal(); } - return ((ISignalReceiver) this).OnReceiveAsObservable().AsUnitObservable(); + return ((ISignalReceiver) this).OnReceiveAsObservable().Do(OnReceive).AsUnitObservable(); + } + + protected virtual void OnReceive(TSignal receivedSignal) + { } IObservable ISignalReceiver.OnReceiveAsObservable() From dac206337a5422cbac3ac0bab078bb4650778456 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 01:04:20 +0900 Subject: [PATCH 297/453] :sprakles: Implemented frame version of Connector related to time --- .../Scripts/Connector/Logic/IntervalFrame.cs | 32 +++++++++++++++++++ .../Connector/Logic/IntervalFrame.cs.meta | 3 ++ Assets/Scripts/Connector/Logic/TimerFrame.cs | 32 +++++++++++++++++++ .../Connector/Logic/TimerFrame.cs.meta | 3 ++ 4 files changed, 70 insertions(+) create mode 100644 Assets/Scripts/Connector/Logic/IntervalFrame.cs create mode 100644 Assets/Scripts/Connector/Logic/IntervalFrame.cs.meta create mode 100644 Assets/Scripts/Connector/Logic/TimerFrame.cs create mode 100644 Assets/Scripts/Connector/Logic/TimerFrame.cs.meta diff --git a/Assets/Scripts/Connector/Logic/IntervalFrame.cs b/Assets/Scripts/Connector/Logic/IntervalFrame.cs new file mode 100644 index 0000000..e1162c8 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/IntervalFrame.cs @@ -0,0 +1,32 @@ +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Logic +{ + [AddComponentMenu("UniFlow/Logic/IntervalFrame", (int) ConnectorType.IntervalFrame)] + public class IntervalFrame : ConnectorBase + { + [SerializeField] private int frames = default; + [SerializeField] private FrameCountType frameCountType = FrameCountType.Update; + + [UsedImplicitly] public int Frames + { + get => frames; + set => frames = value; + } + [UsedImplicitly] private FrameCountType FrameCountType + { + get => frameCountType; + set => frameCountType = value; + } + + public override IObservable OnConnectAsObservable() + { + return Observable + .IntervalFrame(Frames, FrameCountType) + .AsUnitObservable(); + } + } +} diff --git a/Assets/Scripts/Connector/Logic/IntervalFrame.cs.meta b/Assets/Scripts/Connector/Logic/IntervalFrame.cs.meta new file mode 100644 index 0000000..25f4c1c --- /dev/null +++ b/Assets/Scripts/Connector/Logic/IntervalFrame.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 630c642b63294c189aca21080b19d66f +timeCreated: 1570784067 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Logic/TimerFrame.cs b/Assets/Scripts/Connector/Logic/TimerFrame.cs new file mode 100644 index 0000000..0c5aec8 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/TimerFrame.cs @@ -0,0 +1,32 @@ +using System; +using JetBrains.Annotations; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Logic +{ + [AddComponentMenu("UniFlow/Logic/TimerFrame", (int) ConnectorType.TimerFrame)] + public class TimerFrame : ConnectorBase + { + [SerializeField] private int frames = default; + [SerializeField] private FrameCountType frameCountType = FrameCountType.Update; + + [UsedImplicitly] public int Frames + { + get => frames; + set => frames = value; + } + [UsedImplicitly] private FrameCountType FrameCountType + { + get => frameCountType; + set => frameCountType = value; + } + + public override IObservable OnConnectAsObservable() + { + return Observable + .TimerFrame(Frames, FrameCountType) + .AsUnitObservable(); + } + } +} diff --git a/Assets/Scripts/Connector/Logic/TimerFrame.cs.meta b/Assets/Scripts/Connector/Logic/TimerFrame.cs.meta new file mode 100644 index 0000000..e924c73 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/TimerFrame.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b18415d1875b4818850abf7f449a7d81 +timeCreated: 1570783942 \ No newline at end of file From 5af3bc1801b762b9cefb4ffdd904cbd9debb1fd6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 00:51:09 +0900 Subject: [PATCH 298/453] :sparkles: Merge VallueCombiner and ValueExtactor into ValueProvider --- Assets/Scripts/Connector/ValueCombiner.meta | 3 -- .../ValueCombiner/Color32Combiner.cs | 26 ------------ .../ValueCombiner/Color32Combiner.cs.meta | 3 -- .../Connector/ValueCombiner/ColorCombiner.cs | 26 ------------ .../ValueCombiner/ColorCombiner.cs.meta | 3 -- .../ValueCombiner/QuaternionCombiner.cs | 26 ------------ .../ValueCombiner/QuaternionCombiner.cs.meta | 3 -- .../ValueCombiner/QuaternionEulerCombiner.cs | 23 ---------- .../QuaternionEulerCombiner.cs.meta | 3 -- .../ValueCombiner/Vector2Combiner.cs | 24 ----------- .../ValueCombiner/Vector2Combiner.cs.meta | 3 -- .../ValueCombiner/Vector2IntCombiner.cs | 24 ----------- .../ValueCombiner/Vector2IntCombiner.cs.meta | 3 -- .../ValueCombiner/Vector3Combiner.cs | 25 ----------- .../ValueCombiner/Vector3Combiner.cs.meta | 3 -- .../ValueCombiner/Vector3IntCombiner.cs | 25 ----------- .../ValueCombiner/Vector3IntCombiner.cs.meta | 3 -- .../ValueCombiner/Vector4Combiner.cs | 26 ------------ .../ValueCombiner/Vector4Combiner.cs.meta | 3 -- .../ValueExtractor/Color32Extractor.cs | 32 -------------- .../ValueExtractor/Color32Extractor.cs.meta | 3 -- .../ValueExtractor/ColorExtractor.cs | 32 -------------- .../ValueExtractor/ColorExtractor.cs.meta | 3 -- .../ValueExtractor/InjectableExtractorBase.cs | 38 ----------------- .../InjectableExtractorBase.cs.meta | 3 -- .../QuaternionEulerExtractor.cs | 23 ---------- .../QuaternionEulerExtractor.cs.meta | 3 -- .../ValueExtractor/QuaternionExtractor.cs | 32 -------------- .../QuaternionExtractor.cs.meta | 3 -- .../ValueExtractor/Vector2Extractor.cs | 26 ------------ .../ValueExtractor/Vector2Extractor.cs.meta | 3 -- .../ValueExtractor/Vector2IntExtractor.cs | 26 ------------ .../Vector2IntExtractor.cs.meta | 3 -- .../ValueExtractor/Vector3Extractor.cs | 29 ------------- .../ValueExtractor/Vector3Extractor.cs.meta | 3 -- .../ValueExtractor/Vector3IntExtractor.cs | 29 ------------- .../Vector3IntExtractor.cs.meta | 3 -- .../ValueExtractor/Vector4Extractor.cs | 32 -------------- .../ValueExtractor/Vector4Extractor.cs.meta | 3 -- .../Connector/ValueProvider/BoolProvider.cs | 6 +-- .../Connector/ValueProvider/ByteProvider.cs | 6 +-- .../ValueProvider/Color32Provider.cs | 35 ++++++++++++++-- .../Connector/ValueProvider/ColorProvider.cs | 35 ++++++++++++++-- .../Connector/ValueProvider/FloatProvider.cs | 6 +-- .../ValueProvider/GameObjectProvider.cs | 6 +-- .../Connector/ValueProvider/IntProvider.cs | 6 +-- .../Connector/ValueProvider/ObjectProvider.cs | 6 +-- .../Connector/ValueProvider/ProviderBase.cs | 34 +++++++++++++-- .../ValueProvider/QuaternionProvider.cs | 42 +++++++++++++++++-- .../ValueProvider/RuntimePlatformProvider.cs | 6 +-- .../ValueProvider/ScriptableObjectProvider.cs | 6 +-- .../Connector/ValueProvider/SelectorBase.cs | 4 +- .../Connector/ValueProvider/StringProvider.cs | 6 +-- .../ValueProvider/ValueProviderBase.cs | 16 ------- .../ValueProvider/ValueProviderBase.cs.meta | 3 -- .../ValueProvider/Vector2IntProvider.cs | 25 +++++++++-- .../ValueProvider/Vector2Provider.cs | 25 +++++++++-- .../ValueProvider/Vector3IntProvider.cs | 30 +++++++++++-- .../ValueProvider/Vector3Provider.cs | 30 +++++++++++-- .../ValueProvider/Vector4Provider.cs | 35 ++++++++++++++-- Assets/Scripts/IInjectable.cs | 11 ----- Assets/Scripts/IValueCombiner.cs | 7 ++++ Assets/Scripts/IValueCombiner.cs.meta | 3 ++ Assets/Scripts/IValueExtractor.cs | 7 ++++ Assets/Scripts/IValueExtractor.cs.meta | 3 ++ Assets/Scripts/IValueInjectable.cs | 27 ++++++++++++ ...table.cs.meta => IValueInjectable.cs.meta} | 0 Assets/Scripts/IValueProvider.cs | 14 +++++++ Assets/Scripts/IValueProvider.cs.meta | 3 ++ 69 files changed, 339 insertions(+), 688 deletions(-) delete mode 100644 Assets/Scripts/Connector/ValueCombiner.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs delete mode 100644 Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs delete mode 100644 Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta delete mode 100644 Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs delete mode 100644 Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta delete mode 100644 Assets/Scripts/IInjectable.cs create mode 100644 Assets/Scripts/IValueCombiner.cs create mode 100644 Assets/Scripts/IValueCombiner.cs.meta create mode 100644 Assets/Scripts/IValueExtractor.cs create mode 100644 Assets/Scripts/IValueExtractor.cs.meta create mode 100644 Assets/Scripts/IValueInjectable.cs rename Assets/Scripts/{IInjectable.cs.meta => IValueInjectable.cs.meta} (100%) create mode 100644 Assets/Scripts/IValueProvider.cs create mode 100644 Assets/Scripts/IValueProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueCombiner.meta b/Assets/Scripts/Connector/ValueCombiner.meta deleted file mode 100644 index 9b6adfe..0000000 --- a/Assets/Scripts/Connector/ValueCombiner.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 54ea261738a14c32abe9604de908260f -timeCreated: 1569915732 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs deleted file mode 100644 index e51f575..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Color32", (int) ConnectorType.ValueCombinerColor32)] - public class Color32Combiner : ConnectorBase - { - [SerializeField] private PublishColor32Event publisher = new PublishColor32Event(); - - [ValueReceiver] private byte R { get; set; } - [ValueReceiver] private byte G { get; set; } - [ValueReceiver] private byte B { get; set; } - [ValueReceiver] private byte A { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Color32(R, G, B, A)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta deleted file mode 100644 index 7643de3..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Color32Combiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 01df211e80774cb8aa65cde25b6ae7c5 -timeCreated: 1569918618 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs deleted file mode 100644 index 383f109..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Color", (int) ConnectorType.ValueCombinerColor)] - public class ColorCombiner : ConnectorBase - { - [SerializeField] private PublishColorEvent publisher = new PublishColorEvent(); - - [ValueReceiver] private float R { get; set; } - [ValueReceiver] private float G { get; set; } - [ValueReceiver] private float B { get; set; } - [ValueReceiver] private float A { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Color(R, G, B, A)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta deleted file mode 100644 index fe8dd01..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/ColorCombiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 89392bb02eb64cea99493e4015d03b1b -timeCreated: 1569918612 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs deleted file mode 100644 index c09753a..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Quaternion", (int) ConnectorType.ValueCombinerQuaternion)] - public class QuaternionCombiner : ConnectorBase - { - [SerializeField] private PublishQuaternionEvent publisher = new PublishQuaternionEvent(); - - [ValueReceiver] private float X { get; set; } - [ValueReceiver] private float Y { get; set; } - [ValueReceiver] private float Z { get; set; } - [ValueReceiver] private float W { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Quaternion(X, Y, Z, W)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta deleted file mode 100644 index 4fed708..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/QuaternionCombiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 76499196f08e41d1ad7c10ddb6edc80b -timeCreated: 1569918586 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs deleted file mode 100644 index fc8ac77..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/QuaternionEuler", (int) ConnectorType.ValueCombinerQuaternionEuler)] - public class QuaternionEulerCombiner : ConnectorBase - { - [SerializeField] private PublishQuaternionEvent publisher = new PublishQuaternionEvent(); - - [ValueReceiver] private Vector3 EulerAngle { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(Quaternion.Euler(EulerAngle)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta deleted file mode 100644 index cabf524..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/QuaternionEulerCombiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6d47f51814764a8fbaa2471b92125b5a -timeCreated: 1569919610 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs deleted file mode 100644 index 38f58a3..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Vector2", (int) ConnectorType.ValueCombinerVector2)] - public class Vector2Combiner : ConnectorBase - { - [SerializeField] private PublishVector2Event publisher = new PublishVector2Event(); - - [ValueReceiver] private float X { get; set; } - [ValueReceiver] private float Y { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Vector2(X, Y)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta deleted file mode 100644 index 2a39c22..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector2Combiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1e5ec100c08845c2a00da28f84fabfd2 -timeCreated: 1569915732 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs deleted file mode 100644 index 38a6164..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Vector2Int", (int) ConnectorType.ValueCombinerVector2Int)] - public class Vector2IntCombiner : ConnectorBase - { - [SerializeField] private PublishVector2IntEvent publisher = new PublishVector2IntEvent(); - - [ValueReceiver] private int X { get; set; } - [ValueReceiver] private int Y { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Vector2Int(X, Y)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta deleted file mode 100644 index 13d6c09..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector2IntCombiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5ccafc14bc2e4c809d19b60fa851792e -timeCreated: 1569918596 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs deleted file mode 100644 index 67aae7b..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Vector3", (int) ConnectorType.ValueCombinerVector3)] - public class Vector3Combiner : ConnectorBase - { - [SerializeField] private PublishVector3Event publisher = new PublishVector3Event(); - - [ValueReceiver] private float X { get; set; } - [ValueReceiver] private float Y { get; set; } - [ValueReceiver] private float Z { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Vector3(X, Y, Z)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta deleted file mode 100644 index 047883a..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector3Combiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6befd9a49a6f4cc9bd51ae65cfc70618 -timeCreated: 1569918569 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs deleted file mode 100644 index be43666..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Vector3Int", (int) ConnectorType.ValueCombinerVector3Int)] - public class Vector3IntCombiner : ConnectorBase - { - [SerializeField] private PublishVector3IntEvent publisher = new PublishVector3IntEvent(); - - [ValueReceiver] private int X { get; set; } - [ValueReceiver] private int Y { get; set; } - [ValueReceiver] private int Z { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Vector3Int(X, Y, Z)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta deleted file mode 100644 index 6e1d823..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector3IntCombiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 517bc72366ed4e399c97635af76f31a6 -timeCreated: 1569918606 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs b/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs deleted file mode 100644 index ce6ca6e..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueCombiner -{ - [AddComponentMenu("UniFlow/ValueCombiner/Vector4", (int) ConnectorType.ValueCombinerVector4)] - public class Vector4Combiner : ConnectorBase - { - [SerializeField] private PublishVector4Event publisher = new PublishVector4Event(); - - [ValueReceiver] private float X { get; set; } - [ValueReceiver] private float Y { get; set; } - [ValueReceiver] private float Z { get; set; } - [ValueReceiver] private float W { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(new Vector4(X, Y, Z, W)); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta b/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta deleted file mode 100644 index c5aa9f1..0000000 --- a/Assets/Scripts/Connector/ValueCombiner/Vector4Combiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ae69d84d6bad4e039a404e7fb03c49b2 -timeCreated: 1569918576 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs deleted file mode 100644 index 6fc88ed..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Color32", (int) ConnectorType.ValueExtractorColor32)] - public class Color32Extractor : ConnectorBase - { - [SerializeField] private PublishByteEvent publisherR = new PublishByteEvent(); - [SerializeField] private PublishByteEvent publisherG = new PublishByteEvent(); - [SerializeField] private PublishByteEvent publisherB = new PublishByteEvent(); - [SerializeField] private PublishByteEvent publisherA = new PublishByteEvent(); - - [ValueReceiver] private Color32 Value { get; set; } - [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; - [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; - [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; - [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; - - public override IObservable OnConnectAsObservable() - { - PublisherR.Invoke(Value.r); - PublisherG.Invoke(Value.g); - PublisherB.Invoke(Value.b); - PublisherA.Invoke(Value.a); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta deleted file mode 100644 index ade1593..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Color32Extractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 34e5d4ae341845e8888fa11bfc6bb1bb -timeCreated: 1569916736 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs deleted file mode 100644 index 572e195..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Color", (int) ConnectorType.ValueExtractorColor)] - public class ColorExtractor : ConnectorBase - { - [SerializeField] private PublishFloatEvent publisherR = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherG = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherB = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherA = new PublishFloatEvent(); - - [ValueReceiver] private Color Value { get; set; } - [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; - [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; - [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; - [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; - - public override IObservable OnConnectAsObservable() - { - PublisherR.Invoke(Value.r); - PublisherG.Invoke(Value.g); - PublisherB.Invoke(Value.b); - PublisherA.Invoke(Value.a); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta deleted file mode 100644 index 4d85d18..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/ColorExtractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 53b666c3374a4e06a33afe6f4125215c -timeCreated: 1569916729 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs deleted file mode 100644 index a1e0f5d..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; - -namespace UniFlow.Connector.ValueExtractor -{ - public abstract class InjectableExtractorBase : ConnectorBase, IInjectable - { - [SerializeField] private T value = default; - [ValueReceiver] public T Value - { - get => value; - set => this.value = value; - } - - private ISubject OnExtractSubject { get; } = new AsyncSubject(); - - void IInjectable.Inject(T v) - { - Value = v; - OnExtractSubject.OnNext(Unit.Default); - OnExtractSubject.OnCompleted(); - } - - IObservable IInjectable.WaitForInjectAsObservable() - { - return OnExtractSubject; - } - - public override IObservable OnConnectAsObservable() - { - return ((IInjectable) this).WaitForInjectAsObservable().Do(_ => Extract()); - } - - protected abstract void Extract(); - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta b/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta deleted file mode 100644 index 2b9d1c4..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/InjectableExtractorBase.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 936d757740354cf882d575e58af7e527 -timeCreated: 1570680235 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs deleted file mode 100644 index 2c29c69..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/QuaternionEuler", (int) ConnectorType.ValueExtractorQuaternionEuler)] - public class QuaternionEulerExtractor : ConnectorBase - { - [SerializeField] private PublishVector3Event publisher = new PublishVector3Event(); - - [ValueReceiver] private Quaternion Value { get; set; } - [ValuePublisher("Value")] private UnityEvent Publisher => publisher; - - public override IObservable OnConnectAsObservable() - { - Publisher.Invoke(Value.eulerAngles); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta deleted file mode 100644 index d06f3bb..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/QuaternionEulerExtractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 936d6ca551414bc5ae5946295e1f355e -timeCreated: 1569919451 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs deleted file mode 100644 index 9810526..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Quaternion", (int) ConnectorType.ValueExtractorQuaternion)] - public class QuaternionExtractor : ConnectorBase - { - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); - - [ValueReceiver] private Quaternion Value { get; set; } - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; - [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; - - public override IObservable OnConnectAsObservable() - { - PublisherX.Invoke(Value.x); - PublisherY.Invoke(Value.y); - PublisherZ.Invoke(Value.z); - PublisherW.Invoke(Value.w); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta deleted file mode 100644 index 6365094..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/QuaternionExtractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d94b827e5a7d4e3a9b8038dc6b424362 -timeCreated: 1569916708 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs deleted file mode 100644 index b5574d1..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Vector2", (int) ConnectorType.ValueExtractorVector2)] - public class Vector2Extractor : ConnectorBase - { - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - - [ValueReceiver] private Vector2 Value { get; set; } - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - - public override IObservable OnConnectAsObservable() - { - PublisherX.Invoke(Value.x); - PublisherY.Invoke(Value.y); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta deleted file mode 100644 index 9244f28..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector2Extractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 62fa429893bd425091b03bf178c95772 -timeCreated: 1569914931 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs deleted file mode 100644 index 7e559b1..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Vector2Int", (int) ConnectorType.ValueExtractorVector2Int)] - public class Vector2IntExtractor : ConnectorBase - { - [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); - [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); - - [ValueReceiver] private Vector2Int Value { get; set; } - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - - public override IObservable OnConnectAsObservable() - { - PublisherX.Invoke(Value.x); - PublisherY.Invoke(Value.y); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta deleted file mode 100644 index dbc6bcb..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector2IntExtractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 20001bb75a8a4cc0a50f9abb69f93c45 -timeCreated: 1569916715 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs deleted file mode 100644 index aaf16d6..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Vector3", (int) ConnectorType.ValueExtractorVector3)] - public class Vector3Extractor : ConnectorBase - { - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); - - [ValueReceiver] private Vector3 Value { get; set; } - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; - - public override IObservable OnConnectAsObservable() - { - PublisherX.Invoke(Value.x); - PublisherY.Invoke(Value.y); - PublisherZ.Invoke(Value.z); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta deleted file mode 100644 index 2e09f3d..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector3Extractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 86ae920c34364b51bfd53e522350cf2e -timeCreated: 1569916686 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs deleted file mode 100644 index 902cd59..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Vector3Int", (int) ConnectorType.ValueExtractorVector3Int)] - public class Vector3IntExtractor : ConnectorBase - { - [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); - [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); - [SerializeField] private PublishIntEvent publisherZ = new PublishIntEvent(); - - [ValueReceiver] private Vector3Int Value { get; set; } - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; - - public override IObservable OnConnectAsObservable() - { - PublisherX.Invoke(Value.x); - PublisherY.Invoke(Value.y); - PublisherZ.Invoke(Value.z); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta deleted file mode 100644 index c2b1353..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector3IntExtractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 544583cd2af2484aa4f48501b7ec32c5 -timeCreated: 1569916724 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs b/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs deleted file mode 100644 index 688e065..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UniFlow.Attribute; -using UniRx; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueExtractor -{ - [AddComponentMenu("UniFlow/ValueExtractor/Vector4", (int) ConnectorType.ValueExtractorVector4)] - public class Vector4Extractor : ConnectorBase - { - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); - - [ValueReceiver] private Vector4 Value { get; set; } - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; - [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; - - public override IObservable OnConnectAsObservable() - { - PublisherX.Invoke(Value.x); - PublisherY.Invoke(Value.y); - PublisherZ.Invoke(Value.z); - PublisherW.Invoke(Value.w); - return Observable.ReturnUnit(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta b/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta deleted file mode 100644 index f6d880b..0000000 --- a/Assets/Scripts/Connector/ValueExtractor/Vector4Extractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 92521c42265444b3baf2c5c74030097f -timeCreated: 1569916697 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index 7a055b9..3339af5 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class BoolProvider : ValueProviderBase + public class BoolProvider : ProviderBase { - protected override bool Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index 50d16dc..0adbbdf 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] - public class ByteProvider : ValueProviderBase + public class ByteProvider : ProviderBase { - protected override byte Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 5072435..1827532 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -1,13 +1,42 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32Provider : ValueProviderBase + public class Color32Provider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Color32 Provide() + private byte? r; + private byte? g; + private byte? b; + private byte? a; + [ValueReceiver] private byte R { get => r ?? Value.r; set => r = value; } + [ValueReceiver] private byte G { get => g ?? Value.g; set => g = value; } + [ValueReceiver] private byte B { get => b ?? Value.b; set => b = value; } + [ValueReceiver] private byte A { get => a ?? Value.a; set => a = value; } + + [SerializeField] private PublishByteEvent publisherR = new PublishByteEvent(); + [SerializeField] private PublishByteEvent publisherG = new PublishByteEvent(); + [SerializeField] private PublishByteEvent publisherB = new PublishByteEvent(); + [SerializeField] private PublishByteEvent publisherA = new PublishByteEvent(); + + [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; + [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; + [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; + [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; + + Color32 IValueCombiner.Combine() + { + return new Color32(R, G, B, A); + } + + void IValueExtractor.Extract(Color32 value) { - return Value; + PublisherR.Invoke(value.r); + PublisherG.Invoke(value.g); + PublisherB.Invoke(value.b); + PublisherA.Invoke(value.a); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index befa6d9..16c9b02 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -1,13 +1,42 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class ColorProvider : ValueProviderBase + public class ColorProvider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Color Provide() + private float? r; + private float? g; + private float? b; + private float? a; + [ValueReceiver] private float R { get => r ?? Value.r; set => r = value; } + [ValueReceiver] private float G { get => g ?? Value.g; set => g = value; } + [ValueReceiver] private float B { get => b ?? Value.b; set => b = value; } + [ValueReceiver] private float A { get => a ?? Value.a; set => a = value; } + + [SerializeField] private PublishFloatEvent publisherR = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherG = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherB = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherA = new PublishFloatEvent(); + + [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; + [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; + [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; + [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; + + Color IValueCombiner.Combine() + { + return new Color(R, G, B, A); + } + + void IValueExtractor.Extract(Color value) { - return Value; + PublisherR.Invoke(value.r); + PublisherG.Invoke(value.g); + PublisherB.Invoke(value.b); + PublisherA.Invoke(value.a); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index 2a6d74c..0437177 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class FloatProvider : ValueProviderBase + public class FloatProvider : ProviderBase { - protected override float Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index 1b17983..b4cfda4 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] - public class GameObjectProvider : ValueProviderBase + public class GameObjectProvider : ProviderBase { - protected override GameObject Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 79d4734..83ea4d7 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class IntProvider : ValueProviderBase + public class IntProvider : ProviderBase { - protected override int Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index 66ec00d..816d10a 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class ObjectProvider : ValueProviderBase + public class ObjectProvider : ProviderBase { - protected override Object Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 5c7fc12..3e8e0be 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -11,12 +11,40 @@ namespace UniFlow.Connector.ValueProvider [SerializeField] private TPublishEvent publisher = new TPublishEvent(); [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; - protected abstract TValue Provide(); + [SerializeField] private TValue value = default; + [ValueReceiver] public TValue Value + { + get => value; + set => this.value = value; + } public override IObservable OnConnectAsObservable() { - Publisher.Invoke(Provide()); - return Observable.ReturnUnit(); + var observable = Observable.ReturnUnit(); + + if (this is IValueProvider valueProvider) + { + Value = valueProvider.Provide(); + } + + if (this is IValueCombiner valueCombiner) + { + Value = valueCombiner.Combine(); + } + + if (this is IValueInjectable valueInjectable) + { + + } + + if (this is IValueExtractor valueExtractor) + { + valueExtractor.Extract(Value); + } + + Publisher.Invoke(Value); + + return observable; } } } diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index bdc3213..49bc0cc 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -1,13 +1,49 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class QuaternionProvider : ValueProviderBase + public class QuaternionProvider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Quaternion Provide() + private float? x; + private float? y; + private float? z; + private float? w; + private Vector3? eulerAngle; + [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } + [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } + [ValueReceiver] private float Z { get => z ?? Value.z; set => z = value; } + [ValueReceiver] private float W { get => w ?? Value.w; set => w = value; } + // Should split class to QuaternionEulerProvider? + [ValueReceiver] private Vector3 EulerAngle { get => eulerAngle ?? Value.eulerAngles; set => eulerAngle = value; } + + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); + [SerializeField] private PublishVector3Event publisherEulerAngle = new PublishVector3Event(); + + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; + // Should split class to QuaternionEulerProvider? + [ValuePublisher("EulerAngle")] private UnityEvent PublisherEulerAngle => publisherEulerAngle; + + Quaternion IValueCombiner.Combine() + { + return eulerAngle != null ? Quaternion.Euler(EulerAngle) : new Quaternion(X, Y, Z, W); + } + + void IValueExtractor.Extract(Quaternion value) { - return Value; + PublisherEulerAngle.Invoke(value.eulerAngles); + PublisherX.Invoke(value.x); + PublisherY.Invoke(value.y); + PublisherZ.Invoke(value.z); + PublisherW.Invoke(value.w); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs index 7a4fafe..7fea1f7 100644 --- a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatform", (int) ConnectorType.ValueProviderRuntimePlatform)] - public class RuntimePlatformProvider : ValueProviderBase + public class RuntimePlatformProvider : ProviderBase { - protected override RuntimePlatform Provide() - { - return Application.platform; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index 1220134..9b2ef3b 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] - public class ScriptableObjectProvider : ValueProviderBase + public class ScriptableObjectProvider : ProviderBase { - protected override ScriptableObject Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index add74e2..908728d 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase where TPublishEvent : UnityEvent, new() + public abstract class SelectorBase : ProviderBase, IValueProvider where TPublishEvent : UnityEvent, new() { [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); @@ -19,7 +19,7 @@ namespace UniFlow.Connector.ValueProvider [ValueReceiver] public TKey Key { get; set; } - protected override TValue Provide() + TValue IValueProvider.Provide() { if (!Keys.Contains(Key)) { diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 74f370d..32dab50 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -3,11 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class StringProvider : ValueProviderBase + public class StringProvider : ProviderBase { - protected override string Provide() - { - return Value; - } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs deleted file mode 100644 index 1aada48..0000000 --- a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs +++ /dev/null @@ -1,16 +0,0 @@ -using JetBrains.Annotations; -using UnityEngine; -using UnityEngine.Events; - -namespace UniFlow.Connector.ValueProvider -{ - public abstract class ValueProviderBase : ProviderBase where TPublishEvent : UnityEvent, new() - { - [SerializeField] private TValue value = default; - [UsedImplicitly] public TValue Value - { - get => value; - set => this.value = value; - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta deleted file mode 100644 index 9a09270..0000000 --- a/Assets/Scripts/Connector/ValueProvider/ValueProviderBase.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 120eea8349ee4ab4b4cfa3c8248ebaab -timeCreated: 1570366399 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index 08c6114..c7bcc6f 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -1,13 +1,32 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2IntProvider : ValueProviderBase + public class Vector2IntProvider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Vector2Int Provide() + private int? x; + private int? y; + [ValueReceiver] private int X { get => x ?? Value.x; set => x = value; } + [ValueReceiver] private int Y { get => y ?? Value.y; set => y = value; } + + [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); + [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); + + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + + Vector2Int IValueCombiner.Combine() + { + return new Vector2Int(X, Y); + } + + void IValueExtractor.Extract(Vector2Int value) { - return Value; + PublisherX.Invoke(value.x); + PublisherY.Invoke(value.y); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index b7f6579..7d36f5c 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -1,13 +1,32 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2Provider : ValueProviderBase + public class Vector2Provider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Vector2 Provide() + private float? x; + private float? y; + [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } + [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } + + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + + Vector2 IValueCombiner.Combine() + { + return new Vector2(X, Y); + } + + void IValueExtractor.Extract(Vector2 value) { - return Value; + PublisherX.Invoke(value.x); + PublisherY.Invoke(value.y); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index d378f87..c203c19 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -1,13 +1,37 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3IntProvider : ValueProviderBase + public class Vector3IntProvider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Vector3Int Provide() + private int? x; + private int? y; + private int? z; + [ValueReceiver] private int X { get => x ?? Value.x; set => x = value; } + [ValueReceiver] private int Y { get => y ?? Value.y; set => y = value; } + [ValueReceiver] private int Z { get => z ?? Value.z; set => z = value; } + + [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); + [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); + [SerializeField] private PublishIntEvent publisherZ = new PublishIntEvent(); + + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + + Vector3Int IValueCombiner.Combine() + { + return new Vector3Int(X, Y, Z); + } + + void IValueExtractor.Extract(Vector3Int value) { - return Value; + PublisherX.Invoke(value.x); + PublisherY.Invoke(value.y); + PublisherZ.Invoke(value.z); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index c9fb0c9..b579e62 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -1,13 +1,37 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3Provider : ValueProviderBase + public class Vector3Provider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Vector3 Provide() + private float? x; + private float? y; + private float? z; + [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } + [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } + [ValueReceiver] private float Z { get => z ?? Value.z; set => z = value; } + + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + + Vector3 IValueCombiner.Combine() + { + return new Vector3(X, Y, Z); + } + + void IValueExtractor.Extract(Vector3 value) { - return Value; + PublisherX.Invoke(value.x); + PublisherY.Invoke(value.y); + PublisherZ.Invoke(value.z); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index 8456c13..db33765 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -1,13 +1,42 @@ +using UniFlow.Attribute; using UnityEngine; +using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4Provider : ValueProviderBase + public class Vector4Provider : ProviderBase, IValueCombiner, IValueExtractor { - protected override Vector4 Provide() + private float? x; + private float? y; + private float? z; + private float? w; + [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } + [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } + [ValueReceiver] private float Z { get => z ?? Value.z; set => z = value; } + [ValueReceiver] private float W { get => w ?? Value.w; set => w = value; } + + [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); + + [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; + [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; + + Vector4 IValueCombiner.Combine() + { + return new Vector4(X, Y, Z, W); + } + + void IValueExtractor.Extract(Vector4 value) { - return Value; + PublisherX.Invoke(value.x); + PublisherY.Invoke(value.y); + PublisherZ.Invoke(value.z); + PublisherW.Invoke(value.w); } } } diff --git a/Assets/Scripts/IInjectable.cs b/Assets/Scripts/IInjectable.cs deleted file mode 100644 index 0d3143b..0000000 --- a/Assets/Scripts/IInjectable.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using UniRx; - -namespace UniFlow -{ - public interface IInjectable - { - void Inject(T value); - IObservable WaitForInjectAsObservable(); - } -} diff --git a/Assets/Scripts/IValueCombiner.cs b/Assets/Scripts/IValueCombiner.cs new file mode 100644 index 0000000..ca21880 --- /dev/null +++ b/Assets/Scripts/IValueCombiner.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface IValueCombiner + { + TValue Combine(); + } +} diff --git a/Assets/Scripts/IValueCombiner.cs.meta b/Assets/Scripts/IValueCombiner.cs.meta new file mode 100644 index 0000000..91307c8 --- /dev/null +++ b/Assets/Scripts/IValueCombiner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e22933c7cd404f4383b327a440d86bdc +timeCreated: 1570805373 \ No newline at end of file diff --git a/Assets/Scripts/IValueExtractor.cs b/Assets/Scripts/IValueExtractor.cs new file mode 100644 index 0000000..8ffc2e8 --- /dev/null +++ b/Assets/Scripts/IValueExtractor.cs @@ -0,0 +1,7 @@ +namespace UniFlow +{ + public interface IValueExtractor + { + void Extract(TValue value); + } +} diff --git a/Assets/Scripts/IValueExtractor.cs.meta b/Assets/Scripts/IValueExtractor.cs.meta new file mode 100644 index 0000000..0860897 --- /dev/null +++ b/Assets/Scripts/IValueExtractor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cf291b91dfbb46e6afc635747a60636d +timeCreated: 1570803663 \ No newline at end of file diff --git a/Assets/Scripts/IValueInjectable.cs b/Assets/Scripts/IValueInjectable.cs new file mode 100644 index 0000000..0204ceb --- /dev/null +++ b/Assets/Scripts/IValueInjectable.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniRx; + +namespace UniFlow +{ + public interface IValueInjectable + { + TValue Value { get; set; } +// void Inject(TValue value); +// IObservable WaitForInjectAsObservable(); + } + + public static class ValueInjectableExtensions + { + public static void Inject(this IValueInjectable injectable, TValue value) + { + injectable.Value = value; + } + + public static void InjectAll(this IEnumerable> injectables, TValue value) + { + injectables.ToList().ForEach(x => x.Inject(value)); + } + } +} diff --git a/Assets/Scripts/IInjectable.cs.meta b/Assets/Scripts/IValueInjectable.cs.meta similarity index 100% rename from Assets/Scripts/IInjectable.cs.meta rename to Assets/Scripts/IValueInjectable.cs.meta diff --git a/Assets/Scripts/IValueProvider.cs b/Assets/Scripts/IValueProvider.cs new file mode 100644 index 0000000..c5e5d93 --- /dev/null +++ b/Assets/Scripts/IValueProvider.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace UniFlow +{ + public interface IValueProvider + { + TValue Provide(); + } + + public interface IListValueProvider + { + IEnumerable Provide(); + } +} diff --git a/Assets/Scripts/IValueProvider.cs.meta b/Assets/Scripts/IValueProvider.cs.meta new file mode 100644 index 0000000..6486f49 --- /dev/null +++ b/Assets/Scripts/IValueProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e2ef0341dbfd4da39aa679e68729a954 +timeCreated: 1570800511 \ No newline at end of file From 24135700bdc2652318b6b60d0f382bf04a4c9ed3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 00:51:37 +0900 Subject: [PATCH 299/453] :sparkles: Implement ListProviderBase --- .../ValueProvider/ListProviderBase.cs | 35 +++++++++++++++++++ .../ValueProvider/ListProviderBase.cs.meta | 3 ++ 2 files changed, 38 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs new file mode 100644 index 0000000..abc3bc6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniFlow.Attribute; +using UniRx; +using UnityEngine; +using UnityEngine.Events; + +namespace UniFlow.Connector.ValueProvider +{ + public abstract class ListProviderBase : ConnectorBase where TPublishEvent : UnityEvent, new() + { + [SerializeField] private TPublishEvent publisher = new TPublishEvent(); + [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; + + [SerializeField] private List values = default; + [ValueReceiver] public IEnumerable Values + { + get => values; + set => values = value.ToList(); + } + + public override IObservable OnConnectAsObservable() + { + if (this is IListValueProvider listValueProvider) + { + Values = listValueProvider.Provide(); + } + + var list = Values.ToList(); + list.ForEach(Publisher.Invoke); + return list.ToObservable().AsUnitObservable(); + } + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs.meta new file mode 100644 index 0000000..62052a7 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d8956625d693492eb20c1e6c6eb07ce1 +timeCreated: 1570799990 \ No newline at end of file From a9a1dcd609e2bfd0e8217f874c68171259cdfb6f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 00:55:29 +0900 Subject: [PATCH 300/453] :sparkles: Implement filterable ListProvider --- .../Scripts/Connector/ValueProvider/ListProviderBase.cs | 8 +++++++- Assets/Scripts/IValueProvider.cs | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index abc3bc6..2e4b2ed 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -24,7 +24,13 @@ public override IObservable OnConnectAsObservable() { if (this is IListValueProvider listValueProvider) { - Values = listValueProvider.Provide(); + var temporaryValues = listValueProvider.Provide(); + if (listValueProvider is IFilteredListValueProvider filteredListValueProvider) + { + temporaryValues = temporaryValues.Where(filteredListValueProvider.Predicate); + } + + Values = temporaryValues; } var list = Values.ToList(); diff --git a/Assets/Scripts/IValueProvider.cs b/Assets/Scripts/IValueProvider.cs index c5e5d93..8daec27 100644 --- a/Assets/Scripts/IValueProvider.cs +++ b/Assets/Scripts/IValueProvider.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; namespace UniFlow @@ -11,4 +12,9 @@ public interface IListValueProvider { IEnumerable Provide(); } + + public interface IFilteredListValueProvider : IListValueProvider + { + Func Predicate { get; } + } } From 45035b75729dfd36f10b71cf2074610f4a2be528 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 00:57:01 +0900 Subject: [PATCH 301/453] :fire: Destructive!: Remove unnecessary ConnectorType --- Assets/Scripts/ConnectorType.cs | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 5f3d81f..acc21c1 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -87,29 +87,7 @@ public enum ConnectorType ValueComparerRuntimePlatform, CustomValueComparer, - ValueExtractorVector2 = 3000, - ValueExtractorVector3, - ValueExtractorVector4, - ValueExtractorQuaternion, - ValueExtractorQuaternionEuler, - ValueExtractorVector2Int, - ValueExtractorVector3Int, - ValueExtractorColor, - ValueExtractorColor32, - CustomValueExtractor, - - ValueCombinerVector2 = 4000, - ValueCombinerVector3, - ValueCombinerVector4, - ValueCombinerQuaternion, - ValueCombinerQuaternionEuler, - ValueCombinerVector2Int, - ValueCombinerVector3Int, - ValueCombinerColor, - ValueCombinerColor32, - CustomValueCombiner, - - ValueInjectorImage = 5000, + ValueInjectorImage = 3000, ValueInjectorRawImage, ValueInjectorTimelineControlTrack, ValueInjectorTimelineAudioTrack, @@ -129,7 +107,9 @@ public enum ConnectorType Not, Timer = 9000, + TimerFrame, Interval, + IntervalFrame, TimeScaleController, Empty, From 55ecc6aa8792bddc1b0d678937ad5b4b3f4def71 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 00:59:39 +0900 Subject: [PATCH 302/453] :fire: Remove unnecessary sort order --- Assets/Editor/Scripts/SearchWindowProvider.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index d5b07cd..024421a 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -29,8 +29,6 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "Misc", "ValueProvider", "ValueComparer", - "ValueExtractor", - "ValueCombiner", "ValueInjector", "SignalPublisher", "SignalReceiver", From e964648439a7f9b595003bd90f857d212f30100b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 19:26:11 +0900 Subject: [PATCH 303/453] :fire: Remove unnecessary code --- Assets/Scripts/Connector/ValueProvider/ProviderBase.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 3e8e0be..2e90a79 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -32,11 +32,6 @@ public override IObservable OnConnectAsObservable() Value = valueCombiner.Combine(); } - if (this is IValueInjectable valueInjectable) - { - - } - if (this is IValueExtractor valueExtractor) { valueExtractor.Extract(Value); From d2adcc7d8790a18dbc8998ff0b098fa81e2b1494 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 19:26:52 +0900 Subject: [PATCH 304/453] :sparkles: Add support for ScriptableObject for Signal --- Assets/Editor/Scripts/FlowGraphView.cs | 6 +++++- .../Connector/SignalPublisher/StringSignalPublisher.cs | 9 ++++++++- .../Connector/SignalReceiver/StringSignalReceiver.cs | 3 +++ Assets/Scripts/Signal/StringSignal.cs | 5 ++++- 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index abda161..32fa762 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -9,6 +9,7 @@ using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UIElements; +using Object = UnityEngine.Object; namespace UniFlow.Editor { @@ -370,7 +371,10 @@ public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAd .Where( x => x is FlowValueReceivePort flowValueReceivePort - && flowValueReceivePort.ValueReceiverInfo.Type.IsAssignableFrom(startFlowValuePublishPort.ValuePublisherInfo.Type) + && ( + flowValueReceivePort.ValueReceiverInfo.Type.IsAssignableFrom(startFlowValuePublishPort.ValuePublisherInfo.Type) + || typeof(ScriptableObject).IsAssignableFrom(startFlowValuePublishPort.ValuePublisherInfo.Type) && typeof(ScriptableObject).IsAssignableFrom(flowValueReceivePort.ValueReceiverInfo.Type) + ) && x.direction != startPort.direction && x.node != startPort.node ) diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index 76fe473..3feb63a 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -13,6 +13,7 @@ public class StringSignalPublisher : SignalPublisherBase, ISignalC [SerializeField] private float floatParameter = default; [SerializeField] private string stringParameter = default; [SerializeField] private Object objectParameter = default; + [SerializeField] private ScriptableObject scriptableObjectParameter = default; [ValueReceiver] public string SignalName { @@ -44,6 +45,11 @@ [ValueReceiver] public Object ObjectParameter get => objectParameter; set => objectParameter = value; } + [ValueReceiver] public ScriptableObject ScriptableObjectParameter + { + get => scriptableObjectParameter; + set => scriptableObjectParameter = value; + } StringSignal ISignalCreator.CreateSignal() { @@ -56,7 +62,8 @@ StringSignal ISignalCreator.CreateSignal() IntParameter, FloatParameter, StringParameter, - ObjectParameter + ObjectParameter, + ScriptableObjectParameter ) ); } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 2e69603..72406eb 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -20,12 +20,14 @@ [ValueReceiver] public string SignalName [SerializeField] private PublishFloatEvent publishFloatParameter = new PublishFloatEvent(); [SerializeField] private PublishStringEvent publishStringParameter = new PublishStringEvent(); [SerializeField] private PublishObjectEvent publishObjectParameter = new PublishObjectEvent(); + [SerializeField] private PublishScriptableObjectEvent publishScriptableObjectParameter = new PublishScriptableObjectEvent(); [ValuePublisher("BoolParameter")] private PublishBoolEvent PublishBoolParameter => publishBoolParameter; [ValuePublisher("IntParameter")] private PublishIntEvent PublishIntParameter => publishIntParameter; [ValuePublisher("FloatParameter")] private PublishFloatEvent PublishFloatParameter => publishFloatParameter; [ValuePublisher("StringParameter")] private PublishStringEvent PublishStringParameter => publishStringParameter; [ValuePublisher("ObjectParameter")] private PublishObjectEvent PublishObjectParameter => publishObjectParameter; + [ValuePublisher("ScriptableObjectParameter")] private PublishScriptableObjectEvent PublishScriptableObjectParameter => publishScriptableObjectParameter; bool ISignalFilter.Filter(StringSignal signal) { @@ -44,6 +46,7 @@ protected override void OnReceive(StringSignal receivedSignal) PublishFloatParameter.Invoke(receivedSignal.Parameter.FloatValue); PublishStringParameter.Invoke(receivedSignal.Parameter.StringValue); PublishObjectParameter.Invoke(receivedSignal.Parameter.ObjectValue); + PublishScriptableObjectParameter.Invoke(receivedSignal.Parameter.ScriptableObjectValue); } } } diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs index 6ab3c6c..6267170 100644 --- a/Assets/Scripts/Signal/StringSignal.cs +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -53,13 +53,14 @@ public override int GetHashCode() [Serializable] public struct SignalParameter { - public SignalParameter(bool boolValue, int intValue, float floatValue, string stringValue, Object objectValue) + public SignalParameter(bool boolValue, int intValue, float floatValue, string stringValue, Object objectValue, ScriptableObject scriptableObjectValue) { this.boolValue = boolValue; this.intValue = intValue; this.floatValue = floatValue; this.stringValue = stringValue; this.objectValue = objectValue; + this.scriptableObjectValue = scriptableObjectValue; } [SerializeField] private bool boolValue; @@ -67,11 +68,13 @@ public SignalParameter(bool boolValue, int intValue, float floatValue, string st [SerializeField] private float floatValue; [SerializeField] private string stringValue; [SerializeField] private Object objectValue; + [SerializeField] private ScriptableObject scriptableObjectValue; public bool BoolValue => boolValue; public int IntValue => intValue; public float FloatValue => floatValue; public string StringValue => stringValue; public Object ObjectValue => objectValue; + public ScriptableObject ScriptableObjectValue => scriptableObjectValue; } } } From ba6bf144cfbfe314829dbde3e864fc98e5047e6a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 19:27:24 +0900 Subject: [PATCH 305/453] :fire: Remove unnecessary .meta --- Assets/Scripts/Connector/ValueExtractor.meta | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 Assets/Scripts/Connector/ValueExtractor.meta diff --git a/Assets/Scripts/Connector/ValueExtractor.meta b/Assets/Scripts/Connector/ValueExtractor.meta deleted file mode 100644 index 879d106..0000000 --- a/Assets/Scripts/Connector/ValueExtractor.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 774fc1f7bb98415fa064b42a2a2f2fe2 -timeCreated: 1569914931 \ No newline at end of file From 1e11ea6db1f803680518b2c4675ee1fd2b91ec55 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 19:39:24 +0900 Subject: [PATCH 306/453] :sparkles: Support to drilldown transform --- .../Scripts/Connector/Controller/AnimatorTrigger.cs | 8 +++++++- .../Scripts/Connector/Controller/AudioController.cs | 12 +++++++++--- .../Connector/Controller/PlayableController.cs | 12 +++++++++--- .../Controller/SimpleAnimationController.cs | 12 +++++++++--- Assets/Scripts/Connector/Event/AnimationEvent.cs | 12 +++++++++--- Assets/Scripts/Connector/Event/AudioEvent.cs | 12 +++++++++--- .../Scripts/Connector/Event/SimpleAnimationEvent.cs | 12 +++++++++--- Assets/Scripts/Connector/Event/TimelineEvent.cs | 12 +++++++++--- .../Connector/Event/UIBehaviourEventTrigger.cs | 8 +++++++- .../Scripts/Connector/ValueInjector/ImageInjector.cs | 12 +++++++++--- .../Connector/ValueInjector/RawImageInjector.cs | 12 +++++++++--- .../ValueInjector/Timeline/AnimationTrackInjector.cs | 12 +++++++++--- .../ValueInjector/Timeline/AudioTrackInjector.cs | 12 +++++++++--- .../ValueInjector/Timeline/ControlTrackInjector.cs | 12 +++++++++--- 14 files changed, 122 insertions(+), 38 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index d24d8e7..901c3db 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -9,6 +9,7 @@ namespace UniFlow.Connector.Controller public class AnimatorTrigger : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] [Tooltip("If you do not specify it will be obtained by GameObject.GetComponent()")] private Animator animator = default; @@ -19,9 +20,14 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public Animator Animator { - get => animator ? animator : animator = BaseGameObject.GetComponent(); + get => animator ? animator : animator = BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent(); set => animator = value; } [ValueReceiver] public string TriggerName diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 5e86529..841a30f 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -10,6 +10,7 @@ namespace UniFlow.Connector.Controller public class AudioController : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private AudioSource audioSource = default; [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; [SerializeField] @@ -21,15 +22,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => audioSource = value; } [UsedImplicitly] public AudioControlMethod AudioControlMethod diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 26cf2e6..cef4a98 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -12,6 +12,7 @@ namespace UniFlow.Connector.Controller public class PlayableController : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private PlayableDirector playableDirector = default; [SerializeField] private PlayableControlMethod playableControlMethod = PlayableControlMethod.Play; [SerializeField] private TimelineAsset timelineAsset = default; @@ -21,15 +22,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => playableDirector = value; } [UsedImplicitly] public PlayableControlMethod PlayableControlMethod diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index f53295b..78b4ab9 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -11,6 +11,7 @@ namespace UniFlow.Connector.Controller public class SimpleAnimationController : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] private SimpleAnimationControlMethod simpleAnimationControlMethod = SimpleAnimationControlMethod.Play; @@ -25,15 +26,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public Animator Animator { get => animator != default ? animator : animator = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => animator = value; } [ValueReceiver] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index a521ba3..35bfcdb 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -12,6 +12,7 @@ namespace UniFlow.Connector.Event public class AnimationEvent : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] @@ -26,15 +27,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public Animator Animator { get => animator != default ? animator : animator = - GetComponent() != default - ? GetComponent() - : gameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => animator = value; } [ValueReceiver] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 4cde785..ffbfff7 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -10,6 +10,7 @@ namespace UniFlow.Connector.Event public class AudioEvent : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private AudioSource audioSource = default; [SerializeField] private AudioEventType audioEventType = AudioEventType.Play; [SerializeField] @@ -21,15 +22,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => audioSource = value; } [UsedImplicitly] public AudioEventType AudioEventType diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 252a467..1a20350 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -11,6 +11,7 @@ namespace UniFlow.Connector.Event public class SimpleAnimationEvent : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private Animator animator = default; [SerializeField] private SimpleAnimation simpleAnimation = default; [SerializeField] private SimpleAnimationEventType simpleAnimationEventType = SimpleAnimationEventType.Play; @@ -23,15 +24,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValuePublisher] public Animator Animator { get => animator != default ? animator : animator = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => animator = value; } [ValuePublisher] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index ef232d8..5e0cc4c 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -15,6 +15,7 @@ namespace UniFlow.Connector.Event public class TimelineEvent : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private PlayableDirector playableDirector = default; [SerializeField] private TimelineEventType timelineEventType = TimelineEventType.Play; [SerializeField] private TimelineAsset timelineAsset = default; @@ -24,15 +25,20 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValuePublisher] public PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => playableDirector = value; } [UsedImplicitly] public TimelineEventType TimelineEventType diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 718b483..c663226 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -13,6 +13,7 @@ namespace UniFlow.Connector.Event public class UIBehaviourEventTrigger : ConnectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private UIBehaviour uiBehaviour = default; [SerializeField] private EventTriggerType eventTriggerType = EventTriggerType.PointerClick; [SerializeField] private bool activateBeforeConnect = default; @@ -23,9 +24,14 @@ [ValueReceiver] public GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public UIBehaviour UIBehaviour { - get => uiBehaviour ? uiBehaviour : uiBehaviour = BaseGameObject.GetComponent(); + get => uiBehaviour ? uiBehaviour : uiBehaviour = BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent(); set => uiBehaviour = value; } [UsedImplicitly] public EventTriggerType EventTriggerType diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index 35e708a..35351ab 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -9,6 +9,7 @@ namespace UniFlow.Connector.Controller public class ImageInjector : InjectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private Image image = default; [SerializeField] private Sprite sprite = default; @@ -17,15 +18,20 @@ [ValueReceiver] public override GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public Image Image { get => image != default ? image : image = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => image = value; } [ValueReceiver] public Sprite Sprite diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index 6c906dc..c979815 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -9,6 +9,7 @@ namespace UniFlow.Connector.Controller public class RawImageInjector : InjectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private RawImage rawImage = default; [SerializeField] private Texture texture = default; @@ -17,15 +18,20 @@ [ValueReceiver] public override GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public RawImage RawImage { get => rawImage != default ? rawImage : rawImage = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => rawImage = value; } [ValueReceiver] public Texture Texture diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index 92079f7..9218d68 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -9,6 +9,7 @@ namespace UniFlow.Connector.ValueInjector.Timeline public class AnimationTrackInjector : TimelineInjectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private PlayableDirector playableDirector = default; [SerializeField] private string trackName = default; [SerializeField] private string clipName = default; @@ -19,15 +20,20 @@ [ValueReceiver] public override GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public override PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => playableDirector = value; } [ValueReceiver] public override string TrackName diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index af59c8e..247f1cf 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -9,6 +9,7 @@ namespace UniFlow.Connector.ValueInjector.Timeline public class AudioTrackInjector : TimelineInjectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private PlayableDirector playableDirector = default; [SerializeField] private string trackName = default; [SerializeField] private string clipName = default; @@ -19,15 +20,20 @@ [ValueReceiver] public override GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public override PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => playableDirector = value; } [ValueReceiver] public override string TrackName diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 8cdac9a..0657862 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -9,6 +9,7 @@ namespace UniFlow.Connector.ValueInjector.Timeline public class ControlTrackInjector : TimelineInjectorBase { [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; [SerializeField] private PlayableDirector playableDirector = default; [SerializeField] private string trackName = default; [SerializeField] private string clipName = default; @@ -20,15 +21,20 @@ [ValueReceiver] public override GameObject BaseGameObject get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } + [ValueReceiver] public string TransformPath + { + get => transformPath; + set => transformPath = value; + } [ValueReceiver] public override PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = - BaseGameObject.GetComponent() != default - ? BaseGameObject.GetComponent() - : BaseGameObject.AddComponent(); + BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default + ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() + : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => playableDirector = value; } [ValueReceiver] public override string TrackName From 30d68fd69b53e00976fcbbd5717498f277f9b46e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 20:23:04 +0900 Subject: [PATCH 307/453] :sparkles: Add extension class --- Assets/Scripts/Extensions.cs | 34 +++++++++++++++++++++++++++++++ Assets/Scripts/Extensions.cs.meta | 3 +++ 2 files changed, 37 insertions(+) create mode 100644 Assets/Scripts/Extensions.cs create mode 100644 Assets/Scripts/Extensions.cs.meta diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs new file mode 100644 index 0000000..50f60b9 --- /dev/null +++ b/Assets/Scripts/Extensions.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace UniFlow +{ + public interface IBaseGameObjectSpecifyable + { + GameObject BaseGameObject { get; } + string TransformPath { get; } + } + + public static class Extensions + { + private static TComponent GetOrAddComponent(this GameObject gameObject) where TComponent : Component + { + return gameObject.GetComponent() != default + ? gameObject.GetComponent() + : gameObject.AddComponent(); + } + + public static TComponent GetComponent(this IBaseGameObjectSpecifyable baseGameObjectSpecifyable) where TComponent : Component + { + return string.IsNullOrEmpty(baseGameObjectSpecifyable.TransformPath) + ? baseGameObjectSpecifyable.BaseGameObject.GetComponent() + : baseGameObjectSpecifyable.BaseGameObject.transform.Find(baseGameObjectSpecifyable.TransformPath).gameObject.GetComponent(); + } + + public static TComponent GetOrAddComponent(this IBaseGameObjectSpecifyable baseGameObjectSpecifyable) where TComponent : Component + { + return string.IsNullOrEmpty(baseGameObjectSpecifyable.TransformPath) + ? baseGameObjectSpecifyable.BaseGameObject.GetOrAddComponent() + : baseGameObjectSpecifyable.BaseGameObject.transform.Find(baseGameObjectSpecifyable.TransformPath).gameObject.GetOrAddComponent(); + } + } +} diff --git a/Assets/Scripts/Extensions.cs.meta b/Assets/Scripts/Extensions.cs.meta new file mode 100644 index 0000000..8128892 --- /dev/null +++ b/Assets/Scripts/Extensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4b38ba7b527b4b068ad32b3cd24aee9b +timeCreated: 1570878558 \ No newline at end of file From 2ff4c55a2d5f0f336b37830bc4e99333ef0744b8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 12 Oct 2019 20:23:23 +0900 Subject: [PATCH 308/453] :wrench: Refactor --- Assets/Scripts/Connector/Controller/AnimatorTrigger.cs | 4 ++-- Assets/Scripts/Connector/Controller/AudioController.cs | 10 ++-------- .../Scripts/Connector/Controller/PlayableController.cs | 10 ++-------- .../Connector/Controller/SimpleAnimationController.cs | 10 ++-------- Assets/Scripts/Connector/Event/AnimationEvent.cs | 10 ++-------- Assets/Scripts/Connector/Event/AudioEvent.cs | 10 ++-------- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 10 ++-------- .../Scripts/Connector/Event/UIBehaviourEventTrigger.cs | 4 ++-- .../Scripts/Connector/ValueInjector/ImageInjector.cs | 10 ++-------- .../Connector/ValueInjector/RawImageInjector.cs | 10 ++-------- .../ValueInjector/Timeline/AnimationTrackInjector.cs | 10 ++-------- .../ValueInjector/Timeline/AudioTrackInjector.cs | 10 ++-------- .../ValueInjector/Timeline/ControlTrackInjector.cs | 10 ++-------- 13 files changed, 26 insertions(+), 92 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 901c3db..272ae4c 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] - public class AnimatorTrigger : ConnectorBase + public class AnimatorTrigger : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -27,7 +27,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public Animator Animator { - get => animator ? animator : animator = BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent(); + get => animator ? animator : animator = this.GetOrAddComponent(); set => animator = value; } [ValueReceiver] public string TriggerName diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 841a30f..e82a625 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] - public class AudioController : ConnectorBase + public class AudioController : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -29,13 +29,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public AudioSource AudioSource { - get => - audioSource != default - ? audioSource - : audioSource = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => audioSource != default ? audioSource : audioSource = this.GetOrAddComponent(); set => audioSource = value; } [UsedImplicitly] public AudioControlMethod AudioControlMethod diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index cef4a98..0572d41 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/PlayableController", (int) ConnectorType.PlayableController)] - public class PlayableController : ConnectorBase + public class PlayableController : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -29,13 +29,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public PlayableDirector PlayableDirector { - get => - playableDirector != default - ? playableDirector - : playableDirector = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } [UsedImplicitly] public PlayableControlMethod PlayableControlMethod diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 78b4ab9..ed69df2 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] - public class SimpleAnimationController : ConnectorBase + public class SimpleAnimationController : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -33,13 +33,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public Animator Animator { - get => - animator != default - ? animator - : animator = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } [ValueReceiver] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 35bfcdb..23684ee 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/AnimationEvent", (int) ConnectorType.AnimationEvent)] - public class AnimationEvent : ConnectorBase + public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -34,13 +34,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public Animator Animator { - get => - animator != default - ? animator - : animator = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } [ValueReceiver] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index ffbfff7..f84eef0 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] - public class AudioEvent : ConnectorBase + public class AudioEvent : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -29,13 +29,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public AudioSource AudioSource { - get => - audioSource != default - ? audioSource - : audioSource = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => audioSource != default ? audioSource : audioSource = this.GetOrAddComponent(); set => audioSource = value; } [UsedImplicitly] public AudioEventType AudioEventType diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 1a20350..1349fcb 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -8,7 +8,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] - public class SimpleAnimationEvent : ConnectorBase + public class SimpleAnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -31,13 +31,7 @@ [ValueReceiver] public string TransformPath } [ValuePublisher] public Animator Animator { - get => - animator != default - ? animator - : animator = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } [ValuePublisher] public SimpleAnimation SimpleAnimation diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index c663226..cf2d239 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -10,7 +10,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] - public class UIBehaviourEventTrigger : ConnectorBase + public class UIBehaviourEventTrigger : ConnectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -31,7 +31,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public UIBehaviour UIBehaviour { - get => uiBehaviour ? uiBehaviour : uiBehaviour = BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent(); + get => uiBehaviour ? uiBehaviour : uiBehaviour = ((IBaseGameObjectSpecifyable) this).GetComponent(); set => uiBehaviour = value; } [UsedImplicitly] public EventTriggerType EventTriggerType diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index 35351ab..c3008a4 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/ValueInjector/ImageInjector", (int) ConnectorType.ValueInjectorImage)] - public class ImageInjector : InjectorBase + public class ImageInjector : InjectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -25,13 +25,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public Image Image { - get => - image != default - ? image - : image = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => image != default ? image : image = this.GetOrAddComponent(); set => image = value; } [ValueReceiver] public Sprite Sprite diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index c979815..198a6ac 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/ValueInjector/RawImageInjector", (int) ConnectorType.ValueInjectorRawImage)] - public class RawImageInjector : InjectorBase + public class RawImageInjector : InjectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -25,13 +25,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public RawImage RawImage { - get => - rawImage != default - ? rawImage - : rawImage = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => rawImage != default ? rawImage : rawImage = this.GetOrAddComponent(); set => rawImage = value; } [ValueReceiver] public Texture Texture diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index 9218d68..10ea308 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.ValueInjector.Timeline { [AddComponentMenu("UniFlow/ValueInjector/Timeline/AnimationTrack", (int) ConnectorType.ValueInjectorTimelineAnimationTrack)] - public class AnimationTrackInjector : TimelineInjectorBase + public class AnimationTrackInjector : TimelineInjectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -27,13 +27,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public override PlayableDirector PlayableDirector { - get => - playableDirector != default - ? playableDirector - : playableDirector = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } [ValueReceiver] public override string TrackName diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 247f1cf..52f1c54 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.ValueInjector.Timeline { [AddComponentMenu("UniFlow/ValueInjector/Timeline/AudioTrack", (int) ConnectorType.ValueInjectorTimelineAudioTrack)] - public class AudioTrackInjector : TimelineInjectorBase + public class AudioTrackInjector : TimelineInjectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -27,13 +27,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public override PlayableDirector PlayableDirector { - get => - playableDirector != default - ? playableDirector - : playableDirector = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } [ValueReceiver] public override string TrackName diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 0657862..9ba7679 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.ValueInjector.Timeline { [AddComponentMenu("UniFlow/ValueInjector/Timeline/ControlTrack", (int) ConnectorType.ValueInjectorTimelineControlTrack)] - public class ControlTrackInjector : TimelineInjectorBase + public class ControlTrackInjector : TimelineInjectorBase, IBaseGameObjectSpecifyable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -28,13 +28,7 @@ [ValueReceiver] public string TransformPath } [ValueReceiver] public override PlayableDirector PlayableDirector { - get => - playableDirector != default - ? playableDirector - : playableDirector = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); + get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } [ValueReceiver] public override string TrackName From 26cc3525fe703930dd6dda23f2147fc1eef10386 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 14 Oct 2019 15:26:08 +0900 Subject: [PATCH 309/453] :sparkles: Implement Message struct --- Assets/Scripts/Message.cs | 91 ++++++++++++++++++++++++++++++++++ Assets/Scripts/Message.cs.meta | 3 ++ 2 files changed, 94 insertions(+) create mode 100644 Assets/Scripts/Message.cs create mode 100644 Assets/Scripts/Message.cs.meta diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs new file mode 100644 index 0000000..c103cfb --- /dev/null +++ b/Assets/Scripts/Message.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; + +namespace UniFlow +{ + [PublicAPI] + public struct Message + { + public Message(IConnector connector, IDictionary parameters = default) + { + this.connector = connector; + this.parameters = parameters; + } + + private IConnector connector; + private IDictionary parameters; + private IDictionary Parameters => parameters ?? (parameters = new Dictionary()); + + public static Message Create(IConnector connector) + { + return new Message(connector); + } + + public static Message Create(IConnector connector, T value) + { + return new Message(connector).AddParameter(value); + } + + public static Message Create(IConnector connector, IEnumerable values) + { + return new Message(connector).AddParameters(values); + } + + public Message AddParameter(T value) + { + GetOrCreateParameterList().Add(value); + return this; + } + + public Message AddParameters(IEnumerable values) + { + var list = GetOrCreateParameterList(); + foreach (var value in values) + { + list.Add(value); + } + + Parameters[typeof(T)] = (IList) list; + + return this; + } + + public bool HasParameter() + { + return GetOrCreateParameterList().Any(); + } + + public bool HasParameter(Func predicate) + { + return GetOrCreateParameterList().Any(predicate); + } + + public IEnumerable GetParameters() + { + return GetOrCreateParameterList(); + } + + public T GetParameter() + { + return GetOrCreateParameterList().First(); + } + + public T GetParameter(Func predicate) + { + return GetOrCreateParameterList().First(predicate); + } + + private IList GetOrCreateParameterList() + { + if (!Parameters.ContainsKey(typeof(T))) + { + Parameters.Add(typeof(T), new List()); + } + + return Parameters[typeof(T)].Cast().ToList(); + } + } +} diff --git a/Assets/Scripts/Message.cs.meta b/Assets/Scripts/Message.cs.meta new file mode 100644 index 0000000..38d210e --- /dev/null +++ b/Assets/Scripts/Message.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be0e7af328f04a199122fce750711034 +timeCreated: 1570879955 \ No newline at end of file From 77fb5df11cb85be99f9fb8d6966df079a3feb095 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 14 Oct 2019 15:30:00 +0900 Subject: [PATCH 310/453] :sparkles: Implement Observable creation --- Assets/Scripts/Utility/ObservableFactory.cs | 23 +++++++++++++++++++ .../Scripts/Utility/ObservableFactory.cs.meta | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 Assets/Scripts/Utility/ObservableFactory.cs create mode 100644 Assets/Scripts/Utility/ObservableFactory.cs.meta diff --git a/Assets/Scripts/Utility/ObservableFactory.cs b/Assets/Scripts/Utility/ObservableFactory.cs new file mode 100644 index 0000000..fd3e761 --- /dev/null +++ b/Assets/Scripts/Utility/ObservableFactory.cs @@ -0,0 +1,23 @@ +using System; +using UniRx; + +namespace UniFlow.Utility +{ + public static class ObservableFactory + { + public static IObservable ReturnMessage(IConnector connector) + { + return Observable.Return(connector.CreateMessage()); + } + + public static IObservable ReturnMessage(IConnector connector, T parameter) + { + return Observable.Return(connector.CreateMessage(parameter)); + } + + public static IObservable EmptyMessage() + { + return Observable.Empty(); + } + } +} diff --git a/Assets/Scripts/Utility/ObservableFactory.cs.meta b/Assets/Scripts/Utility/ObservableFactory.cs.meta new file mode 100644 index 0000000..46a7715 --- /dev/null +++ b/Assets/Scripts/Utility/ObservableFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 15de220706f24935a2e698029ed26043 +timeCreated: 1571026054 \ No newline at end of file From 87c082c8dc4bbbd6e0ae7f78e3664ba167964d02 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 14 Oct 2019 15:30:19 +0900 Subject: [PATCH 311/453] :sparkles: Add extension methods --- Assets/Scripts/Extensions.cs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index 50f60b9..8d2658b 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -1,3 +1,6 @@ +using System; +using System.Collections.Generic; +using UniRx; using UnityEngine; namespace UniFlow @@ -30,5 +33,35 @@ public static TComponent GetOrAddComponent(this IBaseGameObjectSpeci ? baseGameObjectSpecifyable.BaseGameObject.GetOrAddComponent() : baseGameObjectSpecifyable.BaseGameObject.transform.Find(baseGameObjectSpecifyable.TransformPath).gameObject.GetOrAddComponent(); } + + public static IObservable AsMessageObservable(this IObservable observable, IConnector connector) + { + return observable.Select(connector.CreateMessage); + } + + public static IObservable AsMessageObservable(this IObservable observable, IConnector connector) + { + return observable.Select(connector.CreateMessage); + } + + public static Message CreateMessage(this IConnector connector) + { + return Message.Create(connector); + } + + public static Message CreateMessage(this IConnector connector, Unit _) + { + return Message.Create(connector); + } + + public static Message CreateMessage(this IConnector connector, T parameter) + { + return Message.Create(connector, parameter); + } + + public static Message CreateMessage(this IConnector connector, IEnumerable parameters) + { + return Message.Create(connector, parameters); + } } } From 7cf7b5f404639e5924ba7ebd241209455983d18d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 14 Oct 2019 15:30:38 +0900 Subject: [PATCH 312/453] :fire: Remove unnecessary classes and interfaces --- .../Connector/ValueProvider/ChoiceInt.cs | 13 -------- .../Connector/ValueProvider/ChoiceInt.cs.meta | 3 -- Assets/Scripts/IMessage.cs | 30 ------------------- Assets/Scripts/IMessage.cs.meta | 3 -- Assets/Scripts/Message.meta | 3 -- Assets/Scripts/Message/Empty.cs | 7 ----- Assets/Scripts/Message/Empty.cs.meta | 3 -- 7 files changed, 62 deletions(-) delete mode 100644 Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs delete mode 100644 Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta delete mode 100644 Assets/Scripts/IMessage.cs delete mode 100644 Assets/Scripts/IMessage.cs.meta delete mode 100644 Assets/Scripts/Message.meta delete mode 100644 Assets/Scripts/Message/Empty.cs delete mode 100644 Assets/Scripts/Message/Empty.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs b/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs deleted file mode 100644 index ed641c8..0000000 --- a/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using UniRx; - -namespace UniFlow.Connector.ValueProvider -{ - public class ChoiceInt : ConnectorBase - { - public override IObservable OnConnectAsObservable() - { - throw new NotImplementedException(); - } - } -} diff --git a/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta b/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta deleted file mode 100644 index f912888..0000000 --- a/Assets/Scripts/Connector/ValueProvider/ChoiceInt.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cc0fa55af03c4d8ba89b1bbbdafcc272 -timeCreated: 1569822359 \ No newline at end of file diff --git a/Assets/Scripts/IMessage.cs b/Assets/Scripts/IMessage.cs deleted file mode 100644 index 3ec8757..0000000 --- a/Assets/Scripts/IMessage.cs +++ /dev/null @@ -1,30 +0,0 @@ -namespace UniFlow -{ - public interface IMessage - { - ConnectorType ConnectorType { get; } - } - - public interface IMessage : IMessage - { - TSender Sender { get; } - } - - public interface IMessage : IMessage - { - TData Data { get; } - } - - public static class MessageExtensions - { - public static bool Is(this IMessage message) where TMessage : IMessage - { - return message is TMessage; - } - - public static TMessage As(this IMessage message) where TMessage : class, IMessage - { - return message as TMessage; - } - } -} diff --git a/Assets/Scripts/IMessage.cs.meta b/Assets/Scripts/IMessage.cs.meta deleted file mode 100644 index 4f2035e..0000000 --- a/Assets/Scripts/IMessage.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 6594216c22514e63a179b32769b4fb9f -timeCreated: 1568132989 \ No newline at end of file diff --git a/Assets/Scripts/Message.meta b/Assets/Scripts/Message.meta deleted file mode 100644 index b8bc0e9..0000000 --- a/Assets/Scripts/Message.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 29f29381ab994724bdec985218c01a05 -timeCreated: 1568219322 \ No newline at end of file diff --git a/Assets/Scripts/Message/Empty.cs b/Assets/Scripts/Message/Empty.cs deleted file mode 100644 index ca542a2..0000000 --- a/Assets/Scripts/Message/Empty.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow.Message -{ - public struct Empty - { - public static Empty Default = default; - } -} \ No newline at end of file diff --git a/Assets/Scripts/Message/Empty.cs.meta b/Assets/Scripts/Message/Empty.cs.meta deleted file mode 100644 index 062ec9d..0000000 --- a/Assets/Scripts/Message/Empty.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: dc0f660d15bb4e5983a9fba3867397b8 -timeCreated: 1568219322 \ No newline at end of file From acb62e291b87d5dba409a349a9f457e37a20db86 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 14 Oct 2019 15:31:10 +0900 Subject: [PATCH 313/453] :tada: Stream Message instead of Unit --- .../Controller/ActivationController.cs | 6 +- .../Connector/Controller/AnimatorTrigger.cs | 6 +- .../Connector/Controller/AudioController.cs | 6 +- .../Connector/Controller/DestroyInstance.cs | 6 +- .../Connector/Controller/DontDestroyOnLoad.cs | 6 +- .../Controller/InstantiateGameObject.cs | 6 +- .../Connector/Controller/LoadSceneBase.cs | 4 +- .../Controller/MoveParentTransform.cs | 6 +- .../Controller/PlayableController.cs | 6 +- .../Controller/RaycastTargetController.cs | 5 +- .../Controller/RaycasterController.cs | 6 +- .../Controller/SimpleAnimationController.cs | 5 +- .../Controller/TimeScaleController.cs | 4 +- .../Controller/TransformSiblingController.cs | 6 +- .../Connector/Controller/UnloadSceneBase.cs | 4 +- .../Scripts/Connector/Event/AnimationEvent.cs | 4 +- Assets/Scripts/Connector/Event/AudioEvent.cs | 4 +- Assets/Scripts/Connector/Event/CameraEvent.cs | 4 +- Assets/Scripts/Connector/Event/KeyEvent.cs | 4 +- .../Scripts/Connector/Event/LifecycleEvent.cs | 4 +- .../Scripts/Connector/Event/LoadSceneEvent.cs | 2 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 4 +- .../Scripts/Connector/Event/ParticleEvent.cs | 4 +- .../Event/PhysicsCollision2DEvent.cs | 4 +- .../Connector/Event/PhysicsCollisionEvent.cs | 4 +- .../Connector/Event/PhysicsTrigger2DEvent.cs | 4 +- .../Connector/Event/PhysicsTriggerEvent.cs | 4 +- .../Connector/Event/RectTransformEvent.cs | 4 +- .../Connector/Event/SimpleAnimationEvent.cs | 6 +- .../Scripts/Connector/Event/TimelineEvent.cs | 4 +- .../Scripts/Connector/Event/TimelineSignal.cs | 6 +- .../Scripts/Connector/Event/TransformEvent.cs | 4 +- .../Event/UIBehaviourEventTrigger.cs | 6 +- .../Connector/Event/UnloadSceneEvent.cs | 2 +- Assets/Scripts/Connector/Expression/And.cs | 6 +- Assets/Scripts/Connector/Expression/Not.cs | 6 +- Assets/Scripts/Connector/Expression/Or.cs | 6 +- Assets/Scripts/Connector/Expression/Xor.cs | 6 +- Assets/Scripts/Connector/Logic/Empty.cs | 6 +- Assets/Scripts/Connector/Logic/Interval.cs | 6 +- .../Scripts/Connector/Logic/IntervalFrame.cs | 6 +- Assets/Scripts/Connector/Logic/Timer.cs | 6 +- Assets/Scripts/Connector/Logic/TimerFrame.cs | 6 +- Assets/Scripts/Connector/Misc/Receive.cs | 6 +- Assets/Scripts/Connector/Misc/Toss.cs | 7 +- .../Scripts/Connector/SignalPublisherBase.cs | 7 +- .../Scripts/Connector/SignalReceiverBase.cs | 9 ++- .../Connector/ValueComparer/ComparerBase.cs | 8 +- .../Connector/ValueInjector/InjectorBase.cs | 6 +- .../ValueProvider/ListProviderBase.cs | 6 +- .../Connector/ValueProvider/ProviderBase.cs | 6 +- .../Connector/ValueProvider/SelectorBase.cs | 14 ++++ Assets/Scripts/ConnectorBase.cs | 15 ++-- Assets/Scripts/Extensions.cs | 74 ++++++++++++++++-- Assets/Scripts/IConnector.cs | 8 +- Assets/Scripts/Message.cs | 76 ++++++++++++++----- Assets/Scripts/ReceiverBase.cs | 6 +- Assets/Scripts/Utility/ObservableFactory.cs | 4 +- 58 files changed, 305 insertions(+), 161 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index f501d0a..61c3909 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller @@ -41,14 +41,14 @@ [ValueReceiver] public Behaviour TargetBehaviour set => Behaviours.Add(value); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); gameObjects.ForEach(x => x.SetActive(Activated)); var monoBehaviours = Behaviours.Where(x => x.enabled != Activated).ToList(); monoBehaviours.ForEach(x => x.enabled = Activated); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 272ae4c..b851f7a 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -1,6 +1,6 @@ using System; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller @@ -38,10 +38,10 @@ [ValueReceiver] public string TriggerName private int TriggerId => Animator.StringToHash(TriggerName); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { Animator.SetTrigger(TriggerId); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index e82a625..c82c36e 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -1,7 +1,7 @@ using System; using JetBrains.Annotations; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller @@ -43,10 +43,10 @@ [ValueReceiver] public AudioClip AudioClip set => audioClip = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { InvokeAudioSourceMethod(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } private void InvokeAudioSourceMethod() diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs index 7d8e6ac..07a01c2 100644 --- a/Assets/Scripts/Connector/Controller/DestroyInstance.cs +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniRx; +using UniFlow.Utility; using UnityEngine; using Object = UnityEngine.Object; @@ -25,11 +25,11 @@ [UsedImplicitly] public IEnumerable GameObjects set => targetGameObjects = value.ToList(); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { var targets = Components.Concat(GameObjects).ToList(); targets.ToList().ForEach(Destroy); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs b/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs index 993f99f..972dcda 100644 --- a/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs +++ b/Assets/Scripts/Connector/Controller/DontDestroyOnLoad.cs @@ -1,5 +1,5 @@ using System; -using UniRx; +using UniFlow.Utility; using UnityEngine; namespace UniFlow.Connector.Controller @@ -7,10 +7,10 @@ namespace UniFlow.Connector.Controller [AddComponentMenu("UniFlow/Controller/DontDestroyOnLoad", (int) ConnectorType.DontDestroyOnLoad)] public class DontDestroyOnLoad : ConnectorBase { - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { DontDestroyOnLoad(gameObject); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index a74be25..6042329 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -1,6 +1,6 @@ using System; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller @@ -26,11 +26,11 @@ [ValueReceiver] public Transform Parent [ValuePublisher("Instantiated")] private PublishGameObjectEvent Publisher => publisher; - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { var go = Instantiate(Source, Parent); Publisher.Invoke(go); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs index 2b1b2ce..aa64352 100644 --- a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs @@ -12,11 +12,11 @@ public abstract class LoadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return LoadScenes() .ToObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private async UniTask LoadScenes() diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index f92bfe3..ed11177 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,6 +1,6 @@ using System; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller @@ -31,10 +31,10 @@ [ValueReceiver] public bool WorldPositionStays set => worldPositionStays = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { TargetTransform.SetParent(ParentTransform, WorldPositionStays); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 0572d41..b932a0e 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -1,7 +1,7 @@ using System; using JetBrains.Annotations; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -43,11 +43,11 @@ [ValueReceiver] public TimelineAsset TimelineAsset set => timelineAsset = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { PreparePlayableDirector(); InvokePlayableDirectorMethod(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } private void PreparePlayableDirector() diff --git a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs index 44268fb..a55f09a 100644 --- a/Assets/Scripts/Connector/Controller/RaycastTargetController.cs +++ b/Assets/Scripts/Connector/Controller/RaycastTargetController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using UniFlow.Utility; using UniRx; using UnityEngine; using UnityEngine.UI; @@ -45,10 +46,10 @@ [UsedImplicitly] public IEnumerable CanvasGroups private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { HandleActivation(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } private void HandleActivation() diff --git a/Assets/Scripts/Connector/Controller/RaycasterController.cs b/Assets/Scripts/Connector/Controller/RaycasterController.cs index c23c7ed..7c907e2 100644 --- a/Assets/Scripts/Connector/Controller/RaycasterController.cs +++ b/Assets/Scripts/Connector/Controller/RaycasterController.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniRx; +using UniFlow.Utility; using UnityEngine; using UnityEngine.EventSystems; @@ -25,10 +25,10 @@ [UsedImplicitly] private IEnumerable Raycasters set => raycasters = value.ToList(); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { HandleActivation(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } private void HandleActivation() diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index ed69df2..4301ffb 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -1,6 +1,7 @@ using System; using System.Linq; using JetBrains.Annotations; +using UniFlow.Utility; using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -71,11 +72,11 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { PrepareSimpleAnimation(); InvokeSimpleAnimationMethod(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } private void PrepareSimpleAnimation() diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 23c1856..4b2a9de 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -30,10 +30,10 @@ [ValueReceiver] private ObservableTween.EaseType EaseType private ISubject OnCompleteTweenSubject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { ChangeTimeScale(); - return OnCompleteTweenSubject; + return OnCompleteTweenSubject.Select(this.CreateMessage); } private void ChangeTimeScale() diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs index dc2e509..e5d4c18 100644 --- a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs @@ -1,6 +1,6 @@ using System; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller @@ -26,7 +26,7 @@ [ValueReceiver] public int Index set => index = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { switch (TransformSiblingControlMethod) { @@ -42,7 +42,7 @@ public override IObservable OnConnectAsObservable() default: throw new ArgumentOutOfRangeException(); } - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs index 93cc8a0..812b484 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs @@ -12,11 +12,11 @@ public abstract class UnloadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return UnloadScenes() .ToObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private async UniTask UnloadScenes() diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 23684ee..a68a3b8 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -69,13 +69,13 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { PrepareAnimationEvent(); return Subject // Prevents the previous flow from being re-invoked when triggered multiple times .Take(1) - .AsUnitObservable(); + .Select(this.CreateMessage); } /// diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index f84eef0..e4999dc 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -45,10 +45,10 @@ [ValueReceiver] public AudioClip AudioClip private IReadOnlyReactiveProperty> TimePair { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return OnAudioEventAsObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private IObservable OnAudioEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index cd2a205..e9fd05a 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -24,9 +24,9 @@ [UsedImplicitly] public CameraEventType CameraEventType set => cameraEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return OnEventAsObservable(); + return OnEventAsObservable().Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs index 4719e87..7539902 100644 --- a/Assets/Scripts/Connector/Event/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -14,9 +14,9 @@ public class KeyEvent : ConnectorBase private KeyEventType KeyEventType => keyEventType; private KeyCode KeyCode => keyCode; - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return KeyEventAsObservable(); + return KeyEventAsObservable().Select(this.CreateMessage); } private IObservable KeyEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index a0f8cfc..bfb8570 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -27,9 +27,9 @@ [UsedImplicitly] public LifecycleEventType LifecycleEventType private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return OnEventAsObservable(); + return OnEventAsObservable().Select(this.CreateMessage); } protected override void Start() diff --git a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs index bbb93b4..f0eba8c 100644 --- a/Assets/Scripts/Connector/Event/LoadSceneEvent.cs +++ b/Assets/Scripts/Connector/Event/LoadSceneEvent.cs @@ -19,7 +19,7 @@ [UsedImplicitly] public string SceneName private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() => Subject; + public override IObservable OnConnectAsObservable() => Subject.AsMessageObservable(this); protected override void Start() { diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index eaf4707..5256176 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -24,9 +24,9 @@ [UsedImplicitly] public MouseEventType MouseEventType set => mouseEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return OnEventAsObservable(); + return OnEventAsObservable().Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index e9a3fa6..e7ff8f4 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -24,10 +24,10 @@ [UsedImplicitly] public ParticleEventType ParticleEventType set => particleEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index ba11577..62f7d40 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -24,10 +24,10 @@ [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType set => physicsCollision2DEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index fc13bd6..c06192d 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -24,10 +24,10 @@ [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType set => physicsCollisionEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 57e092a..9e3ad48 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -24,10 +24,10 @@ [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType set => physicsTrigger2DEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 7600bd6..93a90b3 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -24,10 +24,10 @@ [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType set => physicsTriggerEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return OnEventAsObservable() - .AsUnitObservable(); + .Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index afcadb7..9c4721e 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -24,9 +24,9 @@ [UsedImplicitly] public RectTransformEventType RectTransformEventType set => rectTransformEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return OnEventAsObservable(); + return OnEventAsObservable().Select(this.CreateMessage); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 1349fcb..7e34a33 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -10,6 +10,8 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] public class SimpleAnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable { + private const string MessageParameterKey = "SimpleAnimationEvent"; + [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; [SerializeField] private Animator animator = default; @@ -61,12 +63,12 @@ [ValuePublisher] public AnimationClip AnimationClip private IDictionary PlayingStatuses { get; } = new Dictionary(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { ObserveSimpleAnimation(); return CurrentStateSubject .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) - .AsUnitObservable(); + .Select(x => this.CreateMessage(MessageParameterKey, x)); } private void ObserveSimpleAnimation() diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 5e0cc4c..99c8bab 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -104,10 +104,10 @@ private void OnDestroy() } } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return SignalEmittedSubject - .AsUnitObservable(); + .Select(this.CreateMessage); } private void RegisterSignal() diff --git a/Assets/Scripts/Connector/Event/TimelineSignal.cs b/Assets/Scripts/Connector/Event/TimelineSignal.cs index c8d5670..d10a8bd 100644 --- a/Assets/Scripts/Connector/Event/TimelineSignal.cs +++ b/Assets/Scripts/Connector/Event/TimelineSignal.cs @@ -11,11 +11,13 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/TimelineSignal", (int) ConnectorType.TimelineSignal)] public class TimelineSignal : ConnectorBase { + private const string MessageParameterKey = "TimelineSignal"; + private ISubject<(int intParameter, float floatParameter, string stringParameter, Object objectParameter)> Subject { get; } = new Subject<(int intParameter, float floatParameter, string stringParameter, Object objectParameter)>(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Subject.AsUnitObservable(); + return Subject.AsMessageObservable(this, MessageParameterKey); } [UsedImplicitly] diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 4ee72d4..727b647 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -24,9 +24,9 @@ [UsedImplicitly] public TransformEventType TransformEventType set => transformEventType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return OnEventAsObservable(); + return OnEventAsObservable().AsMessageObservable(this); } private IObservable OnEventAsObservable() diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index cf2d239..57883fb 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -52,9 +52,9 @@ [ValueReceiver] public bool DeactivateAfterConnect private IDisposable Disposable { get; } = new CompositeDisposable(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Observable + return UniRx.Observable .ReturnUnit() .Do( _ => @@ -75,7 +75,7 @@ public override IObservable OnConnectAsObservable() } } ) - .AsUnitObservable(); + .AsMessageObservable(this); } private IObservable OnEventTriggerAsObservable() diff --git a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs index 5195994..5aed806 100644 --- a/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs +++ b/Assets/Scripts/Connector/Event/UnloadSceneEvent.cs @@ -19,7 +19,7 @@ [UsedImplicitly] public string SceneName private ISubject Subject { get; } = new Subject(); - public override IObservable OnConnectAsObservable() => Subject; + public override IObservable OnConnectAsObservable() => Subject.AsMessageObservable(this); protected override void Start() { diff --git a/Assets/Scripts/Connector/Expression/And.cs b/Assets/Scripts/Connector/Expression/And.cs index 79c85e1..c4ccb87 100644 --- a/Assets/Scripts/Connector/Expression/And.cs +++ b/Assets/Scripts/Connector/Expression/And.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Expression @@ -19,9 +19,9 @@ public bool Value set => Conditions.Add(value); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Value ? Observable.ReturnUnit() : Observable.Empty(); + return Value ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } } } diff --git a/Assets/Scripts/Connector/Expression/Not.cs b/Assets/Scripts/Connector/Expression/Not.cs index cd56904..ded47c0 100644 --- a/Assets/Scripts/Connector/Expression/Not.cs +++ b/Assets/Scripts/Connector/Expression/Not.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Expression @@ -19,9 +19,9 @@ public bool Value set => Conditions.Add(value); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Value ? Observable.ReturnUnit() : Observable.Empty(); + return Value ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } } } diff --git a/Assets/Scripts/Connector/Expression/Or.cs b/Assets/Scripts/Connector/Expression/Or.cs index a557d44..dbe08c8 100644 --- a/Assets/Scripts/Connector/Expression/Or.cs +++ b/Assets/Scripts/Connector/Expression/Or.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Expression @@ -19,9 +19,9 @@ public bool Value set => Conditions.Add(value); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Value ? Observable.ReturnUnit() : Observable.Empty(); + return Value ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } } } diff --git a/Assets/Scripts/Connector/Expression/Xor.cs b/Assets/Scripts/Connector/Expression/Xor.cs index 6f086a2..6ec0a68 100644 --- a/Assets/Scripts/Connector/Expression/Xor.cs +++ b/Assets/Scripts/Connector/Expression/Xor.cs @@ -1,6 +1,6 @@ using System; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Expression @@ -11,9 +11,9 @@ public class Xor : ConnectorBase [ValueReceiver] public bool Left { get; set; } [ValueReceiver] public bool Right { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Left ^ Right ? Observable.ReturnUnit() : Observable.Empty(); + return Left ^ Right ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } } } diff --git a/Assets/Scripts/Connector/Logic/Empty.cs b/Assets/Scripts/Connector/Logic/Empty.cs index 7d251bf..d27e0d1 100644 --- a/Assets/Scripts/Connector/Logic/Empty.cs +++ b/Assets/Scripts/Connector/Logic/Empty.cs @@ -1,5 +1,5 @@ using System; -using UniRx; +using UniFlow.Utility; using UnityEngine; namespace UniFlow.Connector.Logic @@ -7,9 +7,9 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/Empty", (int) ConnectorType.Empty)] public class Empty : ConnectorBase { - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Logic/Interval.cs b/Assets/Scripts/Connector/Logic/Interval.cs index a925acb..4f2fe67 100644 --- a/Assets/Scripts/Connector/Logic/Interval.cs +++ b/Assets/Scripts/Connector/Logic/Interval.cs @@ -8,6 +8,8 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/Interval", (int) ConnectorType.Interval)] public class Interval : ConnectorBase { + private const string MessageParameterKey = "Count"; + [SerializeField] private float seconds = default; [SerializeField] private bool ignoreTimeScale = default; @@ -22,11 +24,11 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return Observable .Interval(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) - .AsUnitObservable(); + .AsMessageObservable(this, MessageParameterKey); } } } diff --git a/Assets/Scripts/Connector/Logic/IntervalFrame.cs b/Assets/Scripts/Connector/Logic/IntervalFrame.cs index e1162c8..aab6010 100644 --- a/Assets/Scripts/Connector/Logic/IntervalFrame.cs +++ b/Assets/Scripts/Connector/Logic/IntervalFrame.cs @@ -8,6 +8,8 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/IntervalFrame", (int) ConnectorType.IntervalFrame)] public class IntervalFrame : ConnectorBase { + private const string MessageParameterKey = "Count"; + [SerializeField] private int frames = default; [SerializeField] private FrameCountType frameCountType = FrameCountType.Update; @@ -22,11 +24,11 @@ [UsedImplicitly] private FrameCountType FrameCountType set => frameCountType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return Observable .IntervalFrame(Frames, FrameCountType) - .AsUnitObservable(); + .AsMessageObservable(this, MessageParameterKey); } } } diff --git a/Assets/Scripts/Connector/Logic/Timer.cs b/Assets/Scripts/Connector/Logic/Timer.cs index 9d82993..c7b39e0 100644 --- a/Assets/Scripts/Connector/Logic/Timer.cs +++ b/Assets/Scripts/Connector/Logic/Timer.cs @@ -8,6 +8,8 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/Timer", (int) ConnectorType.Timer)] public class Timer : ConnectorBase { + private const string MessageParameterKey = "Count"; + [SerializeField] private float seconds = default; [SerializeField] private bool ignoreTimeScale = default; @@ -22,11 +24,11 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return Observable .Timer(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) - .AsUnitObservable(); + .AsMessageObservable(this, MessageParameterKey); } } } diff --git a/Assets/Scripts/Connector/Logic/TimerFrame.cs b/Assets/Scripts/Connector/Logic/TimerFrame.cs index 0c5aec8..720e197 100644 --- a/Assets/Scripts/Connector/Logic/TimerFrame.cs +++ b/Assets/Scripts/Connector/Logic/TimerFrame.cs @@ -8,6 +8,8 @@ namespace UniFlow.Connector.Logic [AddComponentMenu("UniFlow/Logic/TimerFrame", (int) ConnectorType.TimerFrame)] public class TimerFrame : ConnectorBase { + private const string MessageParameterKey = "Count"; + [SerializeField] private int frames = default; [SerializeField] private FrameCountType frameCountType = FrameCountType.Update; @@ -22,11 +24,11 @@ [UsedImplicitly] private FrameCountType FrameCountType set => frameCountType = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { return Observable .TimerFrame(Frames, FrameCountType) - .AsUnitObservable(); + .AsMessageObservable(this, MessageParameterKey); } } } diff --git a/Assets/Scripts/Connector/Misc/Receive.cs b/Assets/Scripts/Connector/Misc/Receive.cs index e45638f..04a0c78 100644 --- a/Assets/Scripts/Connector/Misc/Receive.cs +++ b/Assets/Scripts/Connector/Misc/Receive.cs @@ -1,5 +1,5 @@ using System; -using UniRx; +using UniFlow.Utility; using UnityEngine; namespace UniFlow.Connector.Misc @@ -16,9 +16,9 @@ public override bool ActAsTrigger } } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index 1b4fcb6..09da1b0 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using UniFlow.Utility; using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -18,16 +19,16 @@ [ValueReceiver] public GameObject TargetGameObject set => Targets.Add(value); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { foreach (var target in Targets) { if (target != default && target.activeSelf) { - (target.GetComponent() as IConnector)?.Connect(Observable.ReturnUnit()); + (target.GetComponent() as IConnector)?.Connect(ObservableFactory.ReturnMessage(this)); } } - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } } } diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs b/Assets/Scripts/Connector/SignalPublisherBase.cs index 5988c53..44a84ca 100644 --- a/Assets/Scripts/Connector/SignalPublisherBase.cs +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs @@ -2,13 +2,14 @@ using UniFlow.Attribute; using UniFlow.Connector.SignalPublisher; using UniFlow.Utility; -using UniRx; using UnityEngine; namespace UniFlow.Connector { public abstract class SignalPublisherBase : ConnectorBase, ISignalPublisher where TSignal : ISignal { + private const string MessageParameterKey = "Signal"; + [SerializeField] private TSignal signal = default; [ValueReceiver] public TSignal Signal { @@ -16,14 +17,14 @@ [ValueReceiver] public TSignal Signal set => signal = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { if (this is ISignalCreator signalCreator) { Signal = signalCreator.CreateSignal(); } ((ISignalPublisher) this).Publish(Signal); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this, MessageParameterKey, Signal); } void ISignalPublisher.Publish(TSignal value) diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index 0bedcd2..45e03bf 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -10,6 +10,8 @@ namespace UniFlow.Connector { public abstract class SignalReceiverBase : ConnectorBase, ISignalReceiver where TSignal : ISignal { + private const string MessageParameterKey = "Signal"; + [SerializeField] private TSignal signal = default; [ValueReceiver] public TSignal Signal { @@ -17,13 +19,16 @@ [ValueReceiver] public TSignal Signal set => signal = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { if (this is ISignalCreator signalCreator) { Signal = signalCreator.CreateSignal(); } - return ((ISignalReceiver) this).OnReceiveAsObservable().Do(OnReceive).AsUnitObservable(); + return ((ISignalReceiver) this) + .OnReceiveAsObservable() + .Do(OnReceive) + .Select(x => this.CreateMessage(MessageParameterKey, x)); } protected virtual void OnReceive(TSignal receivedSignal) diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index d20c94a..83be48f 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -1,13 +1,15 @@ using System; using JetBrains.Annotations; +using UniFlow.Utility; using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.ValueComparer { public abstract class ComparerBase : ConnectorBase { + private const string MessageParameterKey = "Result"; + [SerializeField] private TValue expect = default; [ValueReceiver] public TValue Expect @@ -20,11 +22,11 @@ [ValueReceiver] public TValue Expect [SerializeField] private PublishBoolEvent publishResult = new PublishBoolEvent(); [ValuePublisher("Result")] public PublishBoolEvent PublishResult => publishResult; - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { var result = Compare(Actual); PublishResult.Invoke(result); - return result ? Observable.ReturnUnit() : Observable.Empty(); + return result ? ObservableFactory.ReturnMessage(this, MessageParameterKey, true) : ObservableFactory.EmptyMessage(); } protected abstract bool Compare(TValue actual); diff --git a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs index 89e0ee7..255712b 100644 --- a/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/InjectorBase.cs @@ -1,5 +1,5 @@ using System; -using UniRx; +using UniFlow.Utility; using UnityEngine; namespace UniFlow.Connector.ValueInjector @@ -8,10 +8,10 @@ public abstract class InjectorBase : ConnectorBase { public abstract GameObject BaseGameObject { get; set; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { Inject(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } protected abstract void Inject(); diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index 2e4b2ed..1b76938 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -10,6 +10,8 @@ namespace UniFlow.Connector.ValueProvider { public abstract class ListProviderBase : ConnectorBase where TPublishEvent : UnityEvent, new() { + private const string MessageParameterKey = "Value"; + [SerializeField] private TPublishEvent publisher = new TPublishEvent(); [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; @@ -20,7 +22,7 @@ [ValueReceiver] public IEnumerable Values set => values = value.ToList(); } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { if (this is IListValueProvider listValueProvider) { @@ -35,7 +37,7 @@ public override IObservable OnConnectAsObservable() var list = Values.ToList(); list.ForEach(Publisher.Invoke); - return list.ToObservable().AsUnitObservable(); + return list.ToObservable().AsMessageObservable(this, MessageParameterKey); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 2e90a79..0c1ff9b 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -18,9 +18,9 @@ [ValueReceiver] public TValue Value set => this.value = value; } - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { - var observable = Observable.ReturnUnit(); + var message = this.CreateMessage().AddParameter(nameof(Value), Value); if (this is IValueProvider valueProvider) { @@ -39,7 +39,7 @@ public override IObservable OnConnectAsObservable() Publisher.Invoke(Value); - return observable; + return Observable.Return(message); } } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 908728d..1d847eb 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -19,8 +19,12 @@ namespace UniFlow.Connector.ValueProvider [ValueReceiver] public TKey Key { get; set; } + private class IntUnityEvent : UnityEvent {} + TValue IValueProvider.Provide() { + var foo = new IntUnityEvent(); + if (!Keys.Contains(Key)) { return default; @@ -30,6 +34,16 @@ TValue IValueProvider.Provide() } } + public abstract class ValueReceiver + { + [SerializeField] private ConnectorBase connector = default; + + public T Receive(Message message) + { + return message.GetParameter(""); + } + } + public abstract class GameObjectSelectorBase : SelectorBase { } diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 2c3c20c..c79ef8c 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using UniFlow.Utility; using UniRx; using UnityEngine; using Zenject; @@ -48,7 +49,7 @@ public Vector2 FlowGraphNodePosition set => flowGraphNodePosition = value; } - public ISubject OnConnectSubject { get; } = new Subject(); + public ISubject OnConnectSubject { get; } = new Subject(); #endif [UsedImplicitly] public virtual bool ActAsTrigger @@ -59,15 +60,17 @@ [UsedImplicitly] public virtual bool ActAsTrigger [Inject] private DiContainer Container { get; } + public IList StreamedMessages { get; private set; } = new List(); + protected virtual void Start() { if (ActAsTrigger) { - ((IConnector) this).Connect(Observable.ReturnUnit()); + ((IConnector) this).Connect(ObservableFactory.ReturnMessage(this)); } } - void IConnector.Connect(IObservable source) + void IConnector.Connect(IObservable source) { #if UNITY_EDITOR if (Logger.IsEnabled) @@ -77,10 +80,12 @@ void IConnector.Connect(IObservable source) #endif var observable = source .SelectMany( - _ => + message => { + StreamedMessages = message.StreamedMessages.ToList(); return (this as IConnector) .OnConnectAsObservable() + .Do(x => x.StreamedMessages?.Add(x)) #if UNITY_EDITOR .Do(OnConnectSubject.OnNext) #endif @@ -109,7 +114,7 @@ void IConnector.Connect(IObservable source) } } - public abstract IObservable OnConnectAsObservable(); + public abstract IObservable OnConnectAsObservable(); [PublicAPI] public void AddConnector(ConnectorBase connectable) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index 8d2658b..3cbfadc 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using UniRx; using UnityEngine; @@ -41,27 +42,90 @@ public static IObservable AsMessageObservable(this IObservable ob public static IObservable AsMessageObservable(this IObservable observable, IConnector connector) { - return observable.Select(connector.CreateMessage); + return observable.AsMessageObservable(connector, typeof(T).Name); + } + + public static IObservable AsMessageObservable(this IObservable observable, IConnector connector, string key) + { + return observable.Select(x => connector.CreateMessage(key, x)); } public static Message CreateMessage(this IConnector connector) { - return Message.Create(connector); + var message = Message.Create(connector, connector.StreamedMessages); + message.StreamedMessages = connector.StreamedMessages; + return message; } public static Message CreateMessage(this IConnector connector, Unit _) { - return Message.Create(connector); + var message = Message.Create(connector, connector.StreamedMessages); + message.StreamedMessages = connector.StreamedMessages; + return message; } public static Message CreateMessage(this IConnector connector, T parameter) { - return Message.Create(connector, parameter); + return connector.CreateMessage(typeof(T).Name, parameter); + } + + public static Message CreateMessage(this IConnector connector, string key, T parameter) + { + var message = Message.Create(connector, key, parameter); + message.StreamedMessages = connector.StreamedMessages; + return message; } public static Message CreateMessage(this IConnector connector, IEnumerable parameters) { - return Message.Create(connector, parameters); + return connector.CreateMessage($"{typeof(T).Name}List", parameters); + } + + public static Message CreateMessage(this IConnector connector, string key, IEnumerable parameters) + { + var message = Message.Create(connector, key, parameters); + message.StreamedMessages = connector.StreamedMessages; + return message; + } + + public static bool HasMessage(this IEnumerable messages) + { + return messages.HasMessage(typeof(T).Name); + } + + public static bool HasMessage(this IEnumerable messages, string key) + { + return messages.Any(x => x.HasParameter(key)); + } + + public static bool HasMessage(this IEnumerable messages, Func predicate) + { + return messages.HasMessage(typeof(T).Name, predicate); + } + + public static bool HasMessage(this IEnumerable messages, string key, Func predicate) + { + return messages.Any(x => x.HasParameter(key, predicate)); + } + + public static Message FindMessage(this IEnumerable messages, bool latest = true) + { + return messages.FindMessage(typeof(T).Name, latest); + } + + public static Message FindMessage(this IEnumerable messages, string key, bool latest = true) + { + return latest ? messages.Last(x => x.HasParameter(key)) : messages.First(x => x.HasParameter(key)); + } + + public static Message FindMessage(this IEnumerable messages, Func predicate, bool latest = true) + { + return messages.FindMessage(typeof(T).Name, predicate, latest); + } + + public static Message FindMessage(this IEnumerable messages, string key, Func predicate, bool latest = true) + { + return latest ? messages.Last(x => x.HasParameter(key, predicate)) : messages.First(x => x.HasParameter(key, predicate)); } } } diff --git a/Assets/Scripts/IConnector.cs b/Assets/Scripts/IConnector.cs index 2beca75..f4cb8b2 100644 --- a/Assets/Scripts/IConnector.cs +++ b/Assets/Scripts/IConnector.cs @@ -1,14 +1,16 @@ using System; +using System.Collections.Generic; using UniRx; namespace UniFlow { public interface IConnector { - IObservable OnConnectAsObservable(); - void Connect(IObservable source); + IObservable OnConnectAsObservable(); + void Connect(IObservable source); + IList StreamedMessages { get; } #if UNITY_EDITOR - ISubject OnConnectSubject { get; } + ISubject OnConnectSubject { get; } #endif } } diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index c103cfb..cff9c04 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -9,15 +9,24 @@ namespace UniFlow [PublicAPI] public struct Message { - public Message(IConnector connector, IDictionary parameters = default) + public Message(IConnector connector, IDictionary> parameters = default) { this.connector = connector; this.parameters = parameters; + streamedMessages = default; } private IConnector connector; - private IDictionary parameters; - private IDictionary Parameters => parameters ?? (parameters = new Dictionary()); + private IDictionary> parameters; + private IList streamedMessages; + + private IDictionary> Parameters => parameters ?? (parameters = new Dictionary>()); + + public IList StreamedMessages + { + get => streamedMessages ?? (streamedMessages = new List()); + set => streamedMessages = value; + } public static Message Create(IConnector connector) { @@ -26,66 +35,91 @@ public static Message Create(IConnector connector) public static Message Create(IConnector connector, T value) { - return new Message(connector).AddParameter(value); + return Create(connector, typeof(T).Name, value); + } + + public static Message Create(IConnector connector, string key, T value) + { + return new Message(connector).AddParameter(key, value); } public static Message Create(IConnector connector, IEnumerable values) { - return new Message(connector).AddParameters(values); + return Create(connector, $"{typeof(T).Name}List", values); + } + + public static Message Create(IConnector connector, string key, IEnumerable values) + { + return new Message(connector).AddParameters(key, values); } public Message AddParameter(T value) { - GetOrCreateParameterList().Add(value); + return AddParameter(typeof(T).Name, value); + } + + public Message AddParameter(string key, T value) + { + GetOrCreateParameterList(key).Add(value); return this; } public Message AddParameters(IEnumerable values) { - var list = GetOrCreateParameterList(); + return AddParameters($"{typeof(T).Name}List", values); + } + + public Message AddParameters(string key, IEnumerable values) + { + var list = GetOrCreateParameterList(key); foreach (var value in values) { list.Add(value); } - Parameters[typeof(T)] = (IList) list; + Parameters[typeof(T)][key] = list as IList; return this; } - public bool HasParameter() + public bool HasParameter(string key) { - return GetOrCreateParameterList().Any(); + return GetOrCreateParameterList(key).Any(); } - public bool HasParameter(Func predicate) + public bool HasParameter(string key, Func predicate) { - return GetOrCreateParameterList().Any(predicate); + return GetOrCreateParameterList(key).Any(predicate); } - public IEnumerable GetParameters() + public IEnumerable GetParameters(string key) { - return GetOrCreateParameterList(); + return GetOrCreateParameterList(key); } - public T GetParameter() + public T GetParameter(string key, bool latest = true) { - return GetOrCreateParameterList().First(); + return latest ? GetOrCreateParameterList(key).Last() : GetOrCreateParameterList(key).First(); } - public T GetParameter(Func predicate) + public T GetParameter(string key, Func predicate, bool latest = true) { - return GetOrCreateParameterList().First(predicate); + return latest ? GetOrCreateParameterList(key).Last(predicate) : GetOrCreateParameterList(key).First(predicate); } - private IList GetOrCreateParameterList() + private IList GetOrCreateParameterList(string key) { if (!Parameters.ContainsKey(typeof(T))) { - Parameters.Add(typeof(T), new List()); + Parameters.Add(typeof(T), new Dictionary()); + } + + if (!Parameters[typeof(T)].ContainsKey(key)) + { + Parameters[typeof(T)][key] = new List(); } - return Parameters[typeof(T)].Cast().ToList(); + return Parameters[typeof(T)][key] as IList; } } } diff --git a/Assets/Scripts/ReceiverBase.cs b/Assets/Scripts/ReceiverBase.cs index cbc9e6c..24fc714 100644 --- a/Assets/Scripts/ReceiverBase.cs +++ b/Assets/Scripts/ReceiverBase.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using UniRx; +using UniFlow.Utility; namespace UniFlow { @@ -8,10 +8,10 @@ public abstract class ReceiverBase : ConnectorBase, IReceiver { protected override IEnumerable TargetConnectors { get; } = new List(); - public override IObservable OnConnectAsObservable() + public override IObservable OnConnectAsObservable() { OnReceive(); - return Observable.ReturnUnit(); + return ObservableFactory.ReturnMessage(this); } public abstract void OnReceive(); diff --git a/Assets/Scripts/Utility/ObservableFactory.cs b/Assets/Scripts/Utility/ObservableFactory.cs index fd3e761..8311eed 100644 --- a/Assets/Scripts/Utility/ObservableFactory.cs +++ b/Assets/Scripts/Utility/ObservableFactory.cs @@ -10,9 +10,9 @@ public static IObservable ReturnMessage(IConnector connector) return Observable.Return(connector.CreateMessage()); } - public static IObservable ReturnMessage(IConnector connector, T parameter) + public static IObservable ReturnMessage(IConnector connector, string key, T parameter) { - return Observable.Return(connector.CreateMessage(parameter)); + return Observable.Return(connector.CreateMessage(key, parameter)); } public static IObservable EmptyMessage() From 71ccf45ef1e2c2462ce54e5f4fb60715c6455246 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 15 Oct 2019 23:11:47 +0900 Subject: [PATCH 314/453] :tada: Implement value messaging --- Assets/Editor/Scripts/ConnectorInfo.cs | 28 ++- Assets/Scripts/ConnectorBase.cs | 11 + Assets/Scripts/Extensions.cs | 50 +---- Assets/Scripts/IMessageCollectable.cs | 13 ++ Assets/Scripts/IMessageCollectable.cs.meta | 3 + Assets/Scripts/IMessageComposable.cs | 11 + Assets/Scripts/IMessageComposable.cs.meta | 3 + Assets/Scripts/IValueCollector.cs | 12 ++ Assets/Scripts/IValueCollector.cs.meta | 3 + Assets/Scripts/Message.cs | 68 ++----- Assets/Scripts/MessageAnnotation.cs | 41 ++++ Assets/Scripts/MessageAnnotation.cs.meta | 3 + Assets/Scripts/ValueCollector.cs | 225 +++++++++++++++++++++ Assets/Scripts/ValueCollector.cs.meta | 3 + Assets/Scripts/ValueCollectorBase.cs | 54 +++++ Assets/Scripts/ValueCollectorBase.cs.meta | 3 + 16 files changed, 430 insertions(+), 101 deletions(-) create mode 100644 Assets/Scripts/IMessageCollectable.cs create mode 100644 Assets/Scripts/IMessageCollectable.cs.meta create mode 100644 Assets/Scripts/IMessageComposable.cs create mode 100644 Assets/Scripts/IMessageComposable.cs.meta create mode 100644 Assets/Scripts/IValueCollector.cs create mode 100644 Assets/Scripts/IValueCollector.cs.meta create mode 100644 Assets/Scripts/MessageAnnotation.cs create mode 100644 Assets/Scripts/MessageAnnotation.cs.meta create mode 100644 Assets/Scripts/ValueCollector.cs create mode 100644 Assets/Scripts/ValueCollector.cs.meta create mode 100644 Assets/Scripts/ValueCollectorBase.cs create mode 100644 Assets/Scripts/ValueCollectorBase.cs.meta diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index d906946..3ee7f3e 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -12,7 +12,7 @@ namespace UniFlow.Editor [Serializable] public class ConnectorInfo { - private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, string name, IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers) + private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, string name, IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers, IEnumerable composableMessageAnnotations, IEnumerable collectableMessageAnnotations) { GameObject = gameObject; Connector = connector; @@ -21,6 +21,8 @@ private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, st parameterList = parameters.ToList(); ValuePublishers = valuePublishers; ValueReceivers = valueReceivers; + ComposableMessageAnnotations = composableMessageAnnotations; + CollectableMessageAnnotations = collectableMessageAnnotations; } public GameObject GameObject { get; set; } @@ -31,6 +33,8 @@ private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, st public IEnumerable ParameterList => parameterList; public IEnumerable ValuePublishers { get; } public IEnumerable ValueReceivers { get; } + public IEnumerable ComposableMessageAnnotations { get; } + public IEnumerable CollectableMessageAnnotations { get; } public void ApplyParameter(Parameter parameter) { @@ -96,14 +100,30 @@ public static ConnectorInfo Create(Type type, IConnector instance) .Select(ValuePublisherInfo.Create), type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => x.GetCustomAttribute() != null) - .Select(ValueReceiverInfo.Create) + .Select(ValueReceiverInfo.Create), + typeof(IMessageComposable).IsAssignableFrom(type) && instance != null + ? ((IMessageComposable) instance).GetMessageComposableAnnotations() + : new ComposableMessageAnnotation[0], + typeof(IMessageCollectable).IsAssignableFrom(type) && instance != null + ? ((IMessageCollectable) instance).GetMessageCollectableAnnotations() + : new CollectableMessageAnnotation[0] ); } [PublicAPI] - public static ConnectorInfo Create(GameObject gameObject, IConnector instance, Type type, string name, IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers) + public static ConnectorInfo Create( + GameObject gameObject, + IConnector instance, + Type type, + string name, + IEnumerable parameters, + IEnumerable valuePublishers, + IEnumerable valueReceivers, + IEnumerable composableMessageAnnotations, + IEnumerable collectableMessageAnnotations + ) { - return new ConnectorInfo(gameObject, instance, type, name, parameters, valuePublishers, valueReceivers); + return new ConnectorInfo(gameObject, instance, type, name, parameters, valuePublishers, valueReceivers, composableMessageAnnotations, collectableMessageAnnotations); } [Serializable] diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index c79ef8c..817caa2 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -64,6 +64,11 @@ [UsedImplicitly] public virtual bool ActAsTrigger protected virtual void Start() { + if (this is IMessageCollectable messageCollectable) + { + messageCollectable.RegisterCollectDelegates(); + } + if (ActAsTrigger) { ((IConnector) this).Connect(ObservableFactory.ReturnMessage(this)); @@ -83,6 +88,12 @@ void IConnector.Connect(IObservable source) message => { StreamedMessages = message.StreamedMessages.ToList(); + + if (this is IMessageCollectable messageCollectable) + { + messageCollectable.Collect(); + } + return (this as IConnector) .OnConnectAsObservable() .Do(x => x.StreamedMessages?.Add(x)) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index 3cbfadc..c6785ac 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -76,56 +76,14 @@ public static Message CreateMessage(this IConnector connector, string key, T return message; } - public static Message CreateMessage(this IConnector connector, IEnumerable parameters) + public static bool HasMessage(this IEnumerable messages, IConnector connector) { - return connector.CreateMessage($"{typeof(T).Name}List", parameters); + return messages.Any(x => x.Connector == connector); } - public static Message CreateMessage(this IConnector connector, string key, IEnumerable parameters) + public static Message FindMessage(this IEnumerable messages, IConnector connector) { - var message = Message.Create(connector, key, parameters); - message.StreamedMessages = connector.StreamedMessages; - return message; - } - - public static bool HasMessage(this IEnumerable messages) - { - return messages.HasMessage(typeof(T).Name); - } - - public static bool HasMessage(this IEnumerable messages, string key) - { - return messages.Any(x => x.HasParameter(key)); - } - - public static bool HasMessage(this IEnumerable messages, Func predicate) - { - return messages.HasMessage(typeof(T).Name, predicate); - } - - public static bool HasMessage(this IEnumerable messages, string key, Func predicate) - { - return messages.Any(x => x.HasParameter(key, predicate)); - } - - public static Message FindMessage(this IEnumerable messages, bool latest = true) - { - return messages.FindMessage(typeof(T).Name, latest); - } - - public static Message FindMessage(this IEnumerable messages, string key, bool latest = true) - { - return latest ? messages.Last(x => x.HasParameter(key)) : messages.First(x => x.HasParameter(key)); - } - - public static Message FindMessage(this IEnumerable messages, Func predicate, bool latest = true) - { - return messages.FindMessage(typeof(T).Name, predicate, latest); - } - - public static Message FindMessage(this IEnumerable messages, string key, Func predicate, bool latest = true) - { - return latest ? messages.Last(x => x.HasParameter(key, predicate)) : messages.First(x => x.HasParameter(key, predicate)); + return messages.Last(x => x.Connector == connector); } } } diff --git a/Assets/Scripts/IMessageCollectable.cs b/Assets/Scripts/IMessageCollectable.cs new file mode 100644 index 0000000..37f0897 --- /dev/null +++ b/Assets/Scripts/IMessageCollectable.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace UniFlow +{ + public interface IMessageCollectable + { + // Editor 専用にする? + IEnumerable GetMessageCollectableAnnotations(); + + void Collect(); + void RegisterCollectDelegates(); + } +} diff --git a/Assets/Scripts/IMessageCollectable.cs.meta b/Assets/Scripts/IMessageCollectable.cs.meta new file mode 100644 index 0000000..d76772b --- /dev/null +++ b/Assets/Scripts/IMessageCollectable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 50110082724742419a1b005d85d13dcb +timeCreated: 1571105816 \ No newline at end of file diff --git a/Assets/Scripts/IMessageComposable.cs b/Assets/Scripts/IMessageComposable.cs new file mode 100644 index 0000000..466f902 --- /dev/null +++ b/Assets/Scripts/IMessageComposable.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace UniFlow +{ + public interface IMessageComposable + { + // Editor 専用にする? + IEnumerable GetMessageComposableAnnotations(); + Message Compose(Message message); + } +} diff --git a/Assets/Scripts/IMessageComposable.cs.meta b/Assets/Scripts/IMessageComposable.cs.meta new file mode 100644 index 0000000..f4ffdd1 --- /dev/null +++ b/Assets/Scripts/IMessageComposable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb16a7b2aea540a98fe2692aae401516 +timeCreated: 1571105788 \ No newline at end of file diff --git a/Assets/Scripts/IValueCollector.cs b/Assets/Scripts/IValueCollector.cs new file mode 100644 index 0000000..f60edce --- /dev/null +++ b/Assets/Scripts/IValueCollector.cs @@ -0,0 +1,12 @@ +using System; + +namespace UniFlow +{ + public interface IValueCollector + { + IConnector Connector { get; set; } + string TypeString { get; set; } + string ComposerKey { get; set; } + string CollectorLabel { get; set; } + } +} diff --git a/Assets/Scripts/IValueCollector.cs.meta b/Assets/Scripts/IValueCollector.cs.meta new file mode 100644 index 0000000..d9cb94e --- /dev/null +++ b/Assets/Scripts/IValueCollector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: faab41cb299b476f9202ec2030e92562 +timeCreated: 1571122145 \ No newline at end of file diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index cff9c04..4e925ab 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -1,7 +1,5 @@ using System; -using System.Collections; using System.Collections.Generic; -using System.Linq; using JetBrains.Annotations; namespace UniFlow @@ -9,7 +7,7 @@ namespace UniFlow [PublicAPI] public struct Message { - public Message(IConnector connector, IDictionary> parameters = default) + public Message(IConnector connector, IDictionary> parameters = default) { this.connector = connector; this.parameters = parameters; @@ -17,11 +15,12 @@ public Message(IConnector connector, IDictionary> parameters; + private IDictionary> parameters; private IList streamedMessages; - private IDictionary> Parameters => parameters ?? (parameters = new Dictionary>()); + private IDictionary> Parameters => parameters ?? (parameters = new Dictionary>()); + public IConnector Connector => connector; public IList StreamedMessages { get => streamedMessages ?? (streamedMessages = new List()); @@ -43,16 +42,6 @@ public static Message Create(IConnector connector, string key, T value) return new Message(connector).AddParameter(key, value); } - public static Message Create(IConnector connector, IEnumerable values) - { - return Create(connector, $"{typeof(T).Name}List", values); - } - - public static Message Create(IConnector connector, string key, IEnumerable values) - { - return new Message(connector).AddParameters(key, values); - } - public Message AddParameter(T value) { return AddParameter(typeof(T).Name, value); @@ -60,66 +49,43 @@ public Message AddParameter(T value) public Message AddParameter(string key, T value) { - GetOrCreateParameterList(key).Add(value); + GetOrCreateParameterDictionary()[key] = value; return this; } - public Message AddParameters(IEnumerable values) + public bool HasParameter() { - return AddParameters($"{typeof(T).Name}List", values); - } - - public Message AddParameters(string key, IEnumerable values) - { - var list = GetOrCreateParameterList(key); - foreach (var value in values) - { - list.Add(value); - } - - Parameters[typeof(T)][key] = list as IList; - - return this; + return HasParameter(typeof(T).Name); } public bool HasParameter(string key) { - return GetOrCreateParameterList(key).Any(); - } - - public bool HasParameter(string key, Func predicate) - { - return GetOrCreateParameterList(key).Any(predicate); + return GetOrCreateParameterDictionary().ContainsKey(key); } - public IEnumerable GetParameters(string key) + public IDictionary GetParameters() { - return GetOrCreateParameterList(key); + return GetOrCreateParameterDictionary(); } - public T GetParameter(string key, bool latest = true) + public T GetParameter() { - return latest ? GetOrCreateParameterList(key).Last() : GetOrCreateParameterList(key).First(); + return GetParameter(typeof(T).Name); } - public T GetParameter(string key, Func predicate, bool latest = true) + public T GetParameter(string key) { - return latest ? GetOrCreateParameterList(key).Last(predicate) : GetOrCreateParameterList(key).First(predicate); + return GetOrCreateParameterDictionary()[key]; } - private IList GetOrCreateParameterList(string key) + private IDictionary GetOrCreateParameterDictionary() { if (!Parameters.ContainsKey(typeof(T))) { - Parameters.Add(typeof(T), new Dictionary()); - } - - if (!Parameters[typeof(T)].ContainsKey(key)) - { - Parameters[typeof(T)][key] = new List(); + Parameters.Add(typeof(T), new Dictionary()); } - return Parameters[typeof(T)][key] as IList; + return Parameters[typeof(T)] as IDictionary; } } } diff --git a/Assets/Scripts/MessageAnnotation.cs b/Assets/Scripts/MessageAnnotation.cs new file mode 100644 index 0000000..0e9020b --- /dev/null +++ b/Assets/Scripts/MessageAnnotation.cs @@ -0,0 +1,41 @@ +using System; + +namespace UniFlow +{ + public class ComposableMessageAnnotation + { + public ComposableMessageAnnotation(IConnector connector, Type type) : this(connector, type, type.Name) + { + } + + public ComposableMessageAnnotation(IConnector connector, Type type, string key) + { + Type = type; + Connector = connector; + Key = key; + } + + public Type Type { get; } + public IConnector Connector { get; } + public string Key { get; } + public string Label => string.IsNullOrEmpty(Key) ? Type.Name : Key; + } + + public class CollectableMessageAnnotation + { + public CollectableMessageAnnotation(Type type, IValueCollector valueCollector) : this(type, valueCollector, type.Name) + { + } + + public CollectableMessageAnnotation(Type type, IValueCollector valueCollector, string label) + { + Type = type; + ValueCollector = valueCollector; + Label = label; + } + + public Type Type { get; } + public IValueCollector ValueCollector { get; } + public string Label { get; } + } +} diff --git a/Assets/Scripts/MessageAnnotation.cs.meta b/Assets/Scripts/MessageAnnotation.cs.meta new file mode 100644 index 0000000..950407d --- /dev/null +++ b/Assets/Scripts/MessageAnnotation.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f5775525bf1d46a2a3ed82a1d3fde801 +timeCreated: 1571107856 \ No newline at end of file diff --git a/Assets/Scripts/ValueCollector.cs b/Assets/Scripts/ValueCollector.cs new file mode 100644 index 0000000..674b4d4 --- /dev/null +++ b/Assets/Scripts/ValueCollector.cs @@ -0,0 +1,225 @@ +using System; +using UniRx; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.Playables; +using UnityEngine.Timeline; +using Object = UnityEngine.Object; + +namespace UniFlow +{ +#region primitives + + [Serializable] + public class BoolCollector : ValueCollectorBase + { + } + + [Serializable] + public class ByteCollector : ValueCollectorBase + { + } + + [Serializable] + public class IntCollector : ValueCollectorBase + { + } + + [Serializable] + public class FloatCollector : ValueCollectorBase + { + } + + [Serializable] + public class StringCollector : ValueCollectorBase + { + } + +#endregion + +#region UnityEngine.Object + + [Serializable] + public class ObjectCollector : ValueCollectorBase + { + } + + [Serializable] + public class GameObjectCollector : ValueCollectorBase + { + } + + [Serializable] + public class ScriptableObjectCollector : ValueCollectorBase + { + } + +#endregion + +#region assets + + [Serializable] + public class TextureCollector : ValueCollectorBase + { + } + + [Serializable] + public class Texture2DCollector : ValueCollectorBase + { + } + + [Serializable] + public class Texture3DCollector : ValueCollectorBase + { + } + + [Serializable] + public class SpriteCollector : ValueCollectorBase + { + } + + [Serializable] + public class AnimationClipCollector : ValueCollectorBase + { + } + + [Serializable] + public class AudioClipCollector : ValueCollectorBase + { + } + + [Serializable] + public class TimelineAssetCollector : ValueCollectorBase + { + } + +#endregion + +#region components + + [Serializable] + public class ComponentCollector : ValueCollectorBase + { + } + + [Serializable] + public class MonoBehaviourCollector : ValueCollectorBase + { + } + + [Serializable] + public class UIBehaviourCollector : ValueCollectorBase + { + } + + [Serializable] + public class TransformCollector : ValueCollectorBase + { + } + + [Serializable] + public class RectTransformCollector : ValueCollectorBase + { + } + + [Serializable] + public class AnimatorCollector : ValueCollectorBase + { + } + + [Serializable] + public class SimpleAnimationCollector : ValueCollectorBase + { + } + + [Serializable] + public class AudioSourceCollector : ValueCollectorBase + { + } + + [Serializable] + public class PlayableDirectorCollector : ValueCollectorBase + { + } + +#endregion + +#region structs + + [Serializable] + public class Vector2Collector : ValueCollectorBase + { + } + + [Serializable] + public class Vector3Collector : ValueCollectorBase + { + } + + [Serializable] + public class Vector4Collector : ValueCollectorBase + { + } + + [Serializable] + public class QuaternionCollector : ValueCollectorBase + { + } + + [Serializable] + public class Vector2IntCollector : ValueCollectorBase + { + } + + [Serializable] + public class Vector3IntCollector : ValueCollectorBase + { + } + + [Serializable] + public class ColorCollector : ValueCollectorBase + { + } + + [Serializable] + public class Color32Collector : ValueCollectorBase + { + } + +#endregion + +#region classes + + [Serializable] + public class AnimationEventCollector : ValueCollectorBase + { + } + +#endregion + +#region enums + + // If you can register a method that casts from int to enum, this region is unnecessary. + + [Serializable] + public class AnimatorCullingModeCollector : ValueCollectorBase + { + } + + [Serializable] + public class AnimatorUpdateModeCollector : ValueCollectorBase + { + } + + [Serializable] + public class ObservableTweenEaseTypeCollector : ValueCollectorBase + { + } + + [Serializable] + public class RuntimePlatformCollector : ValueCollectorBase + { + } + +#endregion +} diff --git a/Assets/Scripts/ValueCollector.cs.meta b/Assets/Scripts/ValueCollector.cs.meta new file mode 100644 index 0000000..dbe1a44 --- /dev/null +++ b/Assets/Scripts/ValueCollector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8810904243b34aacb59d4d05c075ba26 +timeCreated: 1571147303 \ No newline at end of file diff --git a/Assets/Scripts/ValueCollectorBase.cs b/Assets/Scripts/ValueCollectorBase.cs new file mode 100644 index 0000000..a500f19 --- /dev/null +++ b/Assets/Scripts/ValueCollectorBase.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace UniFlow +{ + [Serializable] + public abstract class ValueCollectorBase : IValueCollector + { + [SerializeField] private ConnectorBase connector = default; + [SerializeField] private string typeString = default; + [SerializeField] private string composerKey = default; + [SerializeField] private string collectorLabel = default; + + public IConnector Connector + { + get => connector; + set => connector = value as ConnectorBase; + } + + public string TypeString + { + get => typeString; + set => typeString = value; + } + + public string ComposerKey + { + get => composerKey; + set => composerKey = value; + } + + public string CollectorLabel + { + get => collectorLabel; + set => collectorLabel = value; + } + + public Action Action { get; set; } + + public void Collect(IList messages) + { + if (messages == null || Connector == null || !messages.HasMessage(Connector) || !messages.FindMessage(Connector).HasParameter()) + { + return; + } + + var value = string.IsNullOrEmpty(ComposerKey) + ? messages.FindMessage(Connector).GetParameter() + : messages.FindMessage(Connector).GetParameter(ComposerKey); + Action(value); + } + } +} diff --git a/Assets/Scripts/ValueCollectorBase.cs.meta b/Assets/Scripts/ValueCollectorBase.cs.meta new file mode 100644 index 0000000..dca7e5c --- /dev/null +++ b/Assets/Scripts/ValueCollectorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2bad4834c1204e7485f4a3e4adbb7d25 +timeCreated: 1571122097 \ No newline at end of file From 796e9cd9bce0bfcc5086092aa1f4238dd24919b2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 15 Oct 2019 23:12:10 +0900 Subject: [PATCH 315/453] :sparkles: Implement connect MessageComposer and MessageCollector using FlowGraph --- Assets/Editor/Scripts/FlowEdge.cs | 8 ++ Assets/Editor/Scripts/FlowGraphView.cs | 74 ++++++++++++++++++- .../Editor/Scripts/FlowMessageCollectPort.cs | 32 ++++++++ .../Scripts/FlowMessageCollectPort.cs.meta | 11 +++ .../Editor/Scripts/FlowMessageComposePort.cs | 32 ++++++++ .../Scripts/FlowMessageComposePort.cs.meta | 11 +++ Assets/Editor/Scripts/FlowNode.cs | 40 +++++++++- .../Scripts/MessageConnectorListener.cs | 51 +++++++++++++ .../Scripts/MessageConnectorListener.cs.meta | 11 +++ 9 files changed, 267 insertions(+), 3 deletions(-) create mode 100644 Assets/Editor/Scripts/FlowMessageCollectPort.cs create mode 100644 Assets/Editor/Scripts/FlowMessageCollectPort.cs.meta create mode 100644 Assets/Editor/Scripts/FlowMessageComposePort.cs create mode 100644 Assets/Editor/Scripts/FlowMessageComposePort.cs.meta create mode 100644 Assets/Editor/Scripts/MessageConnectorListener.cs create mode 100644 Assets/Editor/Scripts/MessageConnectorListener.cs.meta diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs index 0fd11b5..5e8df00 100644 --- a/Assets/Editor/Scripts/FlowEdge.cs +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -23,6 +23,14 @@ void IRemovableElement.RemoveFromGraphView() outputNode.ApplyValuePublishers(); break; } + + switch (input) + { + case FlowMessageCollectPort messageCollectPort: + messageCollectPort.CollectableMessageAnnotation.ValueCollector.Connector = default; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.ComposerKey = default; + break; + } } } } diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 32fa762..12dccc8 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -9,7 +9,6 @@ using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UIElements; -using Object = UnityEngine.Object; namespace UniFlow.Editor { @@ -23,6 +22,7 @@ public class FlowGraphView : GraphView private SearchWindowProvider SearchWindowProvider { get; set; } private EdgeConnectorListener EdgeConnectorListener { get; set; } private ValueInjectionConnectorListener ValueInjectionConnectorListener { get; set; } + private MessageConnectorListener MessageConnectorListener { get; set; } private const float NodeWidth = 300.0f; private static Vector2 NodesOffset { get; } = new Vector2(50.0f, 50.0f); @@ -48,6 +48,7 @@ public void Initialize() SearchWindowProvider.Initialize(this); EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); ValueInjectionConnectorListener = new ValueInjectionConnectorListener(this); + MessageConnectorListener = new MessageConnectorListener(this); viewTransformChanged += graphView => { @@ -99,8 +100,14 @@ public void Initialize() CreateEdges(); + CreateMessageConnectorEdges(); + +#region Will be removed + CreateValueInjectionEdges(); +#endregion + RegisterCallback( (GeometryChangedEvent e) => { @@ -305,6 +312,36 @@ private void CreateEdges() } } + private void CreateMessageConnectorEdges() + { + foreach (var connector in Connectors) + { + var valueCollectors = connector.GetType() + .GetPropertiesRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy) + .Where(x => typeof(IValueCollector).IsAssignableFrom(x.PropertyType)) + .Select(x => x.GetMethod.Invoke(connector, null) as IValueCollector) + .ToArray(); + foreach (var valueCollector in valueCollectors) + { + if (!RenderedNodes.ContainsKey(valueCollector.Connector) || !(valueCollector.Connector is IMessageComposable) || !(connector is IMessageCollectable)) + { + continue; + } + + var messageComposeNode = RenderedNodes[valueCollector.Connector]; + var messageCollectNode = RenderedNodes[connector]; + var messageComposePort = messageComposeNode.MessageComposePorts.FirstOrDefault(x => x.ComposableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && (string.IsNullOrEmpty(valueCollector.ComposerKey) || x.ComposableMessageAnnotation.Key == valueCollector.ComposerKey)); + var messageCollectPort = messageCollectNode.MessageCollectPorts.FirstOrDefault(x => x.CollectableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && (string.IsNullOrEmpty(valueCollector.ComposerKey) || x.CollectableMessageAnnotation.Label == valueCollector.CollectorLabel)); + if (messageComposePort != null && messageCollectPort != null) + { + AddEdge(messageComposePort, messageCollectPort); + } + } + } + } + +#region Will be removed + private void CreateValueInjectionEdges() { foreach (var connector in Connectors) @@ -338,11 +375,13 @@ private void CreateValueInjectionEdges() } } +#endregion + public FlowNode AddNode(Type connectableType, IConnector connectableInstance, Vector2 position) { var connectableInfo = ConnectorInfo.Create(connectableType, connectableInstance); FlowEditorWindow.Window.ConnectableInfoList.Add(connectableInfo); - var node = new FlowNode(connectableInfo, EdgeConnectorListener, ValueInjectionConnectorListener); + var node = new FlowNode(connectableInfo, EdgeConnectorListener, ValueInjectionConnectorListener, MessageConnectorListener); node.Initialize(); node.SetPosition(new Rect(position.x, position.y, 0, 0)); AddElement(node); @@ -395,6 +434,37 @@ x is FlowValuePublishPort flowValuePublishPort .ToList(); } + if (startPort is FlowMessageComposePort startFlowMessageComposePort) + { + return ports + .ToList() + .Where( + x => + x is FlowMessageCollectPort flowMessageCollectPort + && ( + flowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) + || typeof(ScriptableObject).IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) && typeof(ScriptableObject).IsAssignableFrom(flowMessageCollectPort.CollectableMessageAnnotation.Type) + ) + && x.direction != startPort.direction + && x.node != startPort.node + ) + .ToList(); + } + + if (startPort is FlowMessageCollectPort startFlowMessageCollectPort) + { + return ports + .ToList() + .Where( + x => + x is FlowMessageComposePort flowMessageComposePort + && startFlowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(flowMessageComposePort.ComposableMessageAnnotation.Type) + && x.direction != startPort.direction + && x.node != startPort.node + ) + .ToList(); + } + return ports .ToList() .Where(x => x is FlowPort && x.direction != startPort.direction && x.node != startPort.node) diff --git a/Assets/Editor/Scripts/FlowMessageCollectPort.cs b/Assets/Editor/Scripts/FlowMessageCollectPort.cs new file mode 100644 index 0000000..e566235 --- /dev/null +++ b/Assets/Editor/Scripts/FlowMessageCollectPort.cs @@ -0,0 +1,32 @@ +using System; +using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowMessageCollectPort : Port + { + private FlowMessageCollectPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + { + } + + public CollectableMessageAnnotation CollectableMessageAnnotation { get; private set; } + + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, CollectableMessageAnnotation collectableMessageAnnotation, IEdgeConnectorListener edgeConnectorListener = default) + { + var port = new FlowMessageCollectPort(portOrientation, portDirection, portCapacity, typeof(FlowMessageCollectPort)) + { + CollectableMessageAnnotation = collectableMessageAnnotation, + }; + + // ReSharper disable once InvertIf + if (edgeConnectorListener != default) + { + port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); + port.AddManipulator(port.m_EdgeConnector); + } + + return port; + } + } +} diff --git a/Assets/Editor/Scripts/FlowMessageCollectPort.cs.meta b/Assets/Editor/Scripts/FlowMessageCollectPort.cs.meta new file mode 100644 index 0000000..98925b5 --- /dev/null +++ b/Assets/Editor/Scripts/FlowMessageCollectPort.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b15b165d9c8e140e19f047fec52b041b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Scripts/FlowMessageComposePort.cs b/Assets/Editor/Scripts/FlowMessageComposePort.cs new file mode 100644 index 0000000..38bcdd0 --- /dev/null +++ b/Assets/Editor/Scripts/FlowMessageComposePort.cs @@ -0,0 +1,32 @@ +using System; +using UnityEditor.Experimental.GraphView; +using UnityEngine.UIElements; + +namespace UniFlow.Editor +{ + public class FlowMessageComposePort : Port + { + private FlowMessageComposePort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) + { + } + + public ComposableMessageAnnotation ComposableMessageAnnotation { get; private set; } + + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ComposableMessageAnnotation composableMessageAnnotation, IEdgeConnectorListener edgeConnectorListener = default) + { + var port = new FlowMessageComposePort(portOrientation, portDirection, portCapacity, typeof(FlowMessageComposePort)) + { + ComposableMessageAnnotation = composableMessageAnnotation, + }; + + // ReSharper disable once InvertIf + if (edgeConnectorListener != default) + { + port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); + port.AddManipulator(port.m_EdgeConnector); + } + + return port; + } + } +} diff --git a/Assets/Editor/Scripts/FlowMessageComposePort.cs.meta b/Assets/Editor/Scripts/FlowMessageComposePort.cs.meta new file mode 100644 index 0000000..3632d1c --- /dev/null +++ b/Assets/Editor/Scripts/FlowMessageComposePort.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9c4725aac1b94447ae3b85fbc56bcbb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index e55adbb..0a713dc 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -17,11 +17,12 @@ namespace UniFlow.Editor { public class FlowNode : Node, IRemovableElement { - public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener, ValueInjectionConnectorListener valueInjectionConnectorListener) + public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener, ValueInjectionConnectorListener valueInjectionConnectorListener, IEdgeConnectorListener messageConnectorListener) { ConnectorInfo = connectorInfo; EdgeConnectorListener = edgeConnectorListener; ValueInjectionConnectorListener = valueInjectionConnectorListener; + MessageConnectorListener = messageConnectorListener; } public void Initialize() @@ -70,11 +71,14 @@ public void Initialize() public IList ValueReceivePorts { get; } = new List(); public IList ValuePublishPorts { get; } = new List(); + public IList MessageComposePorts { get; } = new List(); + public IList MessageCollectPorts { get; } = new List(); internal ConnectorInfo ConnectorInfo { get; } private IEdgeConnectorListener EdgeConnectorListener { get; } private IEdgeConnectorListener ValueInjectionConnectorListener { get; } + private IEdgeConnectorListener MessageConnectorListener { get; } private const string DefaultTargetGameObjectName = "UniFlowController"; private static IEnumerable ParameterNamesHideInNode { get; } = new List @@ -388,6 +392,8 @@ private void AddPorts() InputPort.portName = "In"; inputContainer.Add(InputPort); +#region Will be removed + if (ConnectorInfo.ValuePublishers.Any()) { var divider = new VisualElement {name = "divider"}; @@ -417,6 +423,38 @@ private void AddPorts() ValueReceivePorts.Add(port as FlowValueReceivePort); } } + +#endregion + + if (ConnectorInfo.ComposableMessageAnnotations.Any()) + { + var divider = new VisualElement {name = "divider"}; + divider.AddToClassList("horizontal"); + outputContainer.Add(divider); + + foreach (var composableMessageAnnotation in ConnectorInfo.ComposableMessageAnnotations) + { + var port = FlowMessageComposePort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, composableMessageAnnotation, MessageConnectorListener); + port.portName = composableMessageAnnotation.Label; + outputContainer.Add(port); + MessageComposePorts.Add(port as FlowMessageComposePort); + } + } + + if (ConnectorInfo.CollectableMessageAnnotations.Any()) + { + var divider = new VisualElement {name = "divider"}; + divider.AddToClassList("horizontal"); + inputContainer.Add(divider); + + foreach (var collectableMessageAnnotation in ConnectorInfo.CollectableMessageAnnotations) + { + var port = FlowMessageCollectPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, collectableMessageAnnotation, MessageConnectorListener); + port.portName = collectableMessageAnnotation.Label; + inputContainer.Add(port); + MessageCollectPorts.Add(port as FlowMessageCollectPort); + } + } } private static string ToDisplayName(string original) diff --git a/Assets/Editor/Scripts/MessageConnectorListener.cs b/Assets/Editor/Scripts/MessageConnectorListener.cs new file mode 100644 index 0000000..743d2fb --- /dev/null +++ b/Assets/Editor/Scripts/MessageConnectorListener.cs @@ -0,0 +1,51 @@ +using UnityEditor; +using UnityEditor.Experimental.GraphView; +using UnityEngine; + +namespace UniFlow.Editor +{ + public class MessageConnectorListener : IEdgeConnectorListener + { + public MessageConnectorListener(FlowGraphView flowGraphView) + { + FlowGraphView = flowGraphView; + } + + private FlowGraphView FlowGraphView { get; } + + void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) + { + // Do nothing. + } + + void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) + { + FlowEdge registeredEdge = default; + switch (edge.output) + { + case FlowMessageComposePort _ when edge.input is FlowMessageCollectPort: + registeredEdge = FlowGraphView.AddEdge(edge.output, edge.input); + break; + case FlowMessageCollectPort _ when edge.input is FlowMessageComposePort: + registeredEdge = FlowGraphView.AddEdge(edge.input, edge.output); + break; + } + + if (registeredEdge == default) + { + return; + } + + if (!(registeredEdge.output is FlowMessageComposePort messageComposePort) || !(registeredEdge.input is FlowMessageCollectPort messageCollectPort)) + { + return; + } + + messageCollectPort.CollectableMessageAnnotation.ValueCollector.Connector = messageComposePort.ComposableMessageAnnotation.Connector; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.TypeString = messageComposePort.ComposableMessageAnnotation.Type.AssemblyQualifiedName; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.ComposerKey = messageComposePort.ComposableMessageAnnotation.Key; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.CollectorLabel = messageCollectPort.CollectableMessageAnnotation.Label; + EditorUtility.SetDirty(((FlowNode) messageCollectPort.node).ConnectorInfo.Connector as ConnectorBase); + } + } +} diff --git a/Assets/Editor/Scripts/MessageConnectorListener.cs.meta b/Assets/Editor/Scripts/MessageConnectorListener.cs.meta new file mode 100644 index 0000000..6416065 --- /dev/null +++ b/Assets/Editor/Scripts/MessageConnectorListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 828ad09f2e7374b03b0718d375b0408d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 0ae3629c6ed52825155526595db1633ee92d019e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 15 Oct 2019 23:12:48 +0900 Subject: [PATCH 316/453] :sprakles: Follow interface changes --- .../Connector/ValueProvider/BoolProvider.cs | 2 +- .../Connector/ValueProvider/ByteProvider.cs | 2 +- .../ValueProvider/Color32Provider.cs | 2 +- .../Connector/ValueProvider/ColorProvider.cs | 2 +- .../Connector/ValueProvider/FloatProvider.cs | 2 +- .../ValueProvider/GameObjectProvider.cs | 2 +- .../Connector/ValueProvider/IntProvider.cs | 2 +- .../ValueProvider/ListProviderBase.cs | 49 +++++++++++++++++-- .../Connector/ValueProvider/ObjectProvider.cs | 2 +- .../Connector/ValueProvider/ProviderBase.cs | 24 ++++++++- .../ValueProvider/QuaternionProvider.cs | 2 +- .../ValueProvider/RuntimePlatformProvider.cs | 2 +- .../ValueProvider/ScriptableObjectProvider.cs | 2 +- .../Connector/ValueProvider/SelectorBase.cs | 29 ++++------- .../Connector/ValueProvider/StringProvider.cs | 2 +- .../ValueProvider/Vector2IntProvider.cs | 2 +- .../ValueProvider/Vector2Provider.cs | 2 +- .../ValueProvider/Vector3IntProvider.cs | 2 +- .../ValueProvider/Vector3Provider.cs | 2 +- .../ValueProvider/Vector4Provider.cs | 2 +- 20 files changed, 94 insertions(+), 42 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index 3339af5..2f5a44d 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class BoolProvider : ProviderBase + public class BoolProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index 0adbbdf..92908ec 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] - public class ByteProvider : ProviderBase + public class ByteProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 1827532..a03f5c7 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Color32Provider : ProviderBase, IValueCombiner, IValueExtractor { private byte? r; private byte? g; diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index 16c9b02..d25f484 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class ColorProvider : ProviderBase, IValueCombiner, IValueExtractor + public class ColorProvider : ProviderBase, IValueCombiner, IValueExtractor { private float? r; private float? g; diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index 0437177..54faa8a 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class FloatProvider : ProviderBase + public class FloatProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index b4cfda4..843f284 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] - public class GameObjectProvider : ProviderBase + public class GameObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 83ea4d7..097c33e 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class IntProvider : ProviderBase + public class IntProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index 1b76938..b231fb7 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -8,20 +8,25 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class ListProviderBase : ConnectorBase where TPublishEvent : UnityEvent, new() + public abstract class ListProviderBase : ConnectorBase, IMessageComposable, IMessageCollectable + where TPublishEvent : UnityEvent, new() + where TValueCollector : ValueCollectorBase>, new() { - private const string MessageParameterKey = "Value"; - [SerializeField] private TPublishEvent publisher = new TPublishEvent(); [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; [SerializeField] private List values = default; - [ValueReceiver] public IEnumerable Values + + [ValueReceiver] + public IEnumerable Values { get => values; set => values = value.ToList(); } + [SerializeField] private TValueCollector valuesCollector = default; + private TValueCollector ValuesCollector => valuesCollector ?? (valuesCollector = new TValueCollector()); + public override IObservable OnConnectAsObservable() { if (this is IListValueProvider listValueProvider) @@ -37,7 +42,41 @@ public override IObservable OnConnectAsObservable() var list = Values.ToList(); list.ForEach(Publisher.Invoke); - return list.ToObservable().AsMessageObservable(this, MessageParameterKey); + return list + .ToObservable() + .AsMessageObservable(this, typeof(TValue).Name); + } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(this, typeof(TValue)), + }; + + Message IMessageComposable.Compose(Message message) + { + throw new NotImplementedException(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(typeof(IEnumerable), ValuesCollector, "List"), + }; + + void IMessageCollectable.Collect() + { + ValuesCollector.Collect(StreamedMessages); + } + + void IMessageCollectable.RegisterCollectDelegates() + { + ValuesCollector.Action = value => Values = value; + } + } + + [Serializable] + public class CollectMessage + { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index 816d10a..9edbd6a 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class ObjectProvider : ProviderBase + public class ObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 0c1ff9b..dc6834b 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class ProviderBase : ConnectorBase where TPublishEvent : UnityEvent, new() + public abstract class ProviderBase : ConnectorBase, IMessageCollectable + where TPublishEvent : UnityEvent, new() + where TValueCollector : ValueCollectorBase, new() { [SerializeField] private TPublishEvent publisher = new TPublishEvent(); [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; @@ -18,6 +21,9 @@ [ValueReceiver] public TValue Value set => this.value = value; } + [SerializeField] private TValueCollector valueCollector = default; + private TValueCollector ValueCollector => valueCollector ?? (valueCollector = new TValueCollector()); + public override IObservable OnConnectAsObservable() { var message = this.CreateMessage().AddParameter(nameof(Value), Value); @@ -41,5 +47,21 @@ public override IObservable OnConnectAsObservable() return Observable.Return(message); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(typeof(TValue), ValueCollector, "Value"), + }; + + void IMessageCollectable.Collect() + { + ValueCollector.Collect(StreamedMessages); + } + + void IMessageCollectable.RegisterCollectDelegates() + { + ValueCollector.Action = v => Value = v; + } } } diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 49bc0cc..80a7eee 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class QuaternionProvider : ProviderBase, IValueCombiner, IValueExtractor + public class QuaternionProvider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs index 7fea1f7..2ac3c45 100644 --- a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatform", (int) ConnectorType.ValueProviderRuntimePlatform)] - public class RuntimePlatformProvider : ProviderBase + public class RuntimePlatformProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index 9b2ef3b..82be6c4 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] - public class ScriptableObjectProvider : ProviderBase + public class ScriptableObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 1d847eb..78682d4 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -9,7 +9,9 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase, IValueProvider where TPublishEvent : UnityEvent, new() + public abstract class SelectorBase : ProviderBase, IValueProvider + where TPublishEvent : UnityEvent, new() + where TValueCollector : ValueCollectorBase, new() { [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); @@ -19,12 +21,8 @@ namespace UniFlow.Connector.ValueProvider [ValueReceiver] public TKey Key { get; set; } - private class IntUnityEvent : UnityEvent {} - TValue IValueProvider.Provide() { - var foo = new IntUnityEvent(); - if (!Keys.Contains(Key)) { return default; @@ -34,29 +32,22 @@ TValue IValueProvider.Provide() } } - public abstract class ValueReceiver - { - [SerializeField] private ConnectorBase connector = default; - - public T Receive(Message message) - { - return message.GetParameter(""); - } - } - - public abstract class GameObjectSelectorBase : SelectorBase + public abstract class GameObjectSelectorBase : SelectorBase { } - public abstract class MonoBehaviourSelectorBase : SelectorBase + public abstract class MonoBehaviourSelectorBase : SelectorBase { } - public abstract class UIBehaviourSelectorBase : SelectorBase + public abstract class UIBehaviourSelectorBase : SelectorBase { } - public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum where TPublishEvent : UnityEvent, new() + public abstract class EnumSelectorBase : SelectorBase + where TEnum : Enum + where TPublishEvent : UnityEvent, new() + where TValueCollector : ValueCollectorBase, new() { } } diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 32dab50..30bcd87 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class StringProvider : ProviderBase + public class StringProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index c7bcc6f..fe36d6c 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2IntProvider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector2IntProvider : ProviderBase, IValueCombiner, IValueExtractor { private int? x; private int? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index 7d36f5c..c5e4a2f 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector2Provider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index c203c19..f880988 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3IntProvider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector3IntProvider : ProviderBase, IValueCombiner, IValueExtractor { private int? x; private int? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index b579e62..f508ec0 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector3Provider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index db33765..2112301 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector4Provider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; From 1381d9bb8a31aa1fec5fb710519a17f19446a7bb Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 00:19:51 +0900 Subject: [PATCH 317/453] :beetle: Avoid ArgumentException --- Assets/Editor/Scripts/FlowGraphView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 12dccc8..9777fe0 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -323,7 +323,7 @@ private void CreateMessageConnectorEdges() .ToArray(); foreach (var valueCollector in valueCollectors) { - if (!RenderedNodes.ContainsKey(valueCollector.Connector) || !(valueCollector.Connector is IMessageComposable) || !(connector is IMessageCollectable)) + if (!(valueCollector.Connector is IMessageComposable) || !RenderedNodes.ContainsKey(valueCollector.Connector) || !(connector is IMessageCollectable)) { continue; } From 2b3d5b16eceab207c1481962ddfd357063dda0a5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 00:20:38 +0900 Subject: [PATCH 318/453] :recycle: Toggle parameter order --- .../Connector/Event/SimpleAnimationEvent.cs | 2 +- Assets/Scripts/Connector/SignalReceiverBase.cs | 2 +- Assets/Scripts/Extensions.cs | 16 +++++++++------- Assets/Scripts/Message.cs | 15 ++++++++------- Assets/Scripts/Utility/ObservableFactory.cs | 2 +- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 7e34a33..d0f4cb2 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -68,7 +68,7 @@ public override IObservable OnConnectAsObservable() ObserveSimpleAnimation(); return CurrentStateSubject .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) - .Select(x => this.CreateMessage(MessageParameterKey, x)); + .Select(x => this.CreateMessage(x, MessageParameterKey)); } private void ObserveSimpleAnimation() diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index 45e03bf..e6ae6bb 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() return ((ISignalReceiver) this) .OnReceiveAsObservable() .Do(OnReceive) - .Select(x => this.CreateMessage(MessageParameterKey, x)); + .Select(x => this.CreateMessage(x, MessageParameterKey)); } protected virtual void OnReceive(TSignal receivedSignal) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index c6785ac..7e0e37c 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -42,36 +42,38 @@ public static IObservable AsMessageObservable(this IObservable ob public static IObservable AsMessageObservable(this IObservable observable, IConnector connector) { - return observable.AsMessageObservable(connector, typeof(T).Name); + return observable.Select(connector.CreateMessage); } public static IObservable AsMessageObservable(this IObservable observable, IConnector connector, string key) { - return observable.Select(x => connector.CreateMessage(key, x)); + return observable.Select(x => connector.CreateMessage(x, key)); } public static Message CreateMessage(this IConnector connector) { - var message = Message.Create(connector, connector.StreamedMessages); + var message = Message.Create(connector); message.StreamedMessages = connector.StreamedMessages; return message; } public static Message CreateMessage(this IConnector connector, Unit _) { - var message = Message.Create(connector, connector.StreamedMessages); + var message = Message.Create(connector); message.StreamedMessages = connector.StreamedMessages; return message; } public static Message CreateMessage(this IConnector connector, T parameter) { - return connector.CreateMessage(typeof(T).Name, parameter); + var message = Message.Create(connector, parameter); + message.StreamedMessages = connector.StreamedMessages; + return message; } - public static Message CreateMessage(this IConnector connector, string key, T parameter) + public static Message CreateMessage(this IConnector connector, T parameter, string key) { - var message = Message.Create(connector, key, parameter); + var message = Message.Create(connector, parameter, key); message.StreamedMessages = connector.StreamedMessages; return message; } diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index 4e925ab..83acda2 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -34,20 +34,21 @@ public static Message Create(IConnector connector) public static Message Create(IConnector connector, T value) { - return Create(connector, typeof(T).Name, value); + return new Message(connector).AddParameter(value); } - public static Message Create(IConnector connector, string key, T value) + public static Message Create(IConnector connector, T value, string key) { - return new Message(connector).AddParameter(key, value); + return new Message(connector).AddParameter(value, key); } public Message AddParameter(T value) { - return AddParameter(typeof(T).Name, value); + GetOrCreateParameterDictionary()[string.Empty] = value; + return this; } - public Message AddParameter(string key, T value) + public Message AddParameter(T value, string key) { GetOrCreateParameterDictionary()[key] = value; return this; @@ -55,7 +56,7 @@ public Message AddParameter(string key, T value) public bool HasParameter() { - return HasParameter(typeof(T).Name); + return GetOrCreateParameterDictionary().ContainsKey(string.Empty); } public bool HasParameter(string key) @@ -70,7 +71,7 @@ public IDictionary GetParameters() public T GetParameter() { - return GetParameter(typeof(T).Name); + return GetOrCreateParameterDictionary()[string.Empty]; } public T GetParameter(string key) diff --git a/Assets/Scripts/Utility/ObservableFactory.cs b/Assets/Scripts/Utility/ObservableFactory.cs index 8311eed..f7892f1 100644 --- a/Assets/Scripts/Utility/ObservableFactory.cs +++ b/Assets/Scripts/Utility/ObservableFactory.cs @@ -12,7 +12,7 @@ public static IObservable ReturnMessage(IConnector connector) public static IObservable ReturnMessage(IConnector connector, string key, T parameter) { - return Observable.Return(connector.CreateMessage(key, parameter)); + return Observable.Return(connector.CreateMessage(parameter, key)); } public static IObservable EmptyMessage() From 42d808e13c9ef0fd22d5a3f92e6ed0a89a9af048 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 00:20:59 +0900 Subject: [PATCH 319/453] :sprakles: Invoke Compose after OnConnectAsObservable --- Assets/Scripts/ConnectorBase.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 817caa2..ca2e04f 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -96,6 +96,7 @@ void IConnector.Connect(IObservable source) return (this as IConnector) .OnConnectAsObservable() + .Select(x => this is IMessageComposable messageComposable ? messageComposable.Compose(x) : x) .Do(x => x.StreamedMessages?.Add(x)) #if UNITY_EDITOR .Do(OnConnectSubject.OnNext) From 41de5151127b3437bb26a5049be2f06cb42fb2ed Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 00:21:31 +0900 Subject: [PATCH 320/453] :sparkles: Remove IMessageCollector from ProviderBase --- .../Connector/ValueProvider/ProviderBase.cs | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index dc6834b..184dc0a 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -7,9 +7,8 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class ProviderBase : ConnectorBase, IMessageCollectable + public abstract class ProviderBase : ConnectorBase, IMessageComposable where TPublishEvent : UnityEvent, new() - where TValueCollector : ValueCollectorBase, new() { [SerializeField] private TPublishEvent publisher = new TPublishEvent(); [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; @@ -21,12 +20,8 @@ [ValueReceiver] public TValue Value set => this.value = value; } - [SerializeField] private TValueCollector valueCollector = default; - private TValueCollector ValueCollector => valueCollector ?? (valueCollector = new TValueCollector()); - public override IObservable OnConnectAsObservable() { - var message = this.CreateMessage().AddParameter(nameof(Value), Value); if (this is IValueProvider valueProvider) { @@ -45,23 +40,21 @@ public override IObservable OnConnectAsObservable() Publisher.Invoke(Value); - return Observable.Return(message); + return Observable.Return(this.CreateMessage()); } - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new[] + public virtual IEnumerable GetMessageComposableAnnotations() + { + return new[] { - new CollectableMessageAnnotation(typeof(TValue), ValueCollector, "Value"), + new ComposableMessageAnnotation(this, typeof(TValue)), }; - - void IMessageCollectable.Collect() - { - ValueCollector.Collect(StreamedMessages); } - void IMessageCollectable.RegisterCollectDelegates() + public virtual Message Compose(Message message) { - ValueCollector.Action = v => Value = v; + return message + .AddParameter(Value); } } } From 251b46b09388912b716d6b4972bf144c7ee8b140 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 00:22:05 +0900 Subject: [PATCH 321/453] :sparkles: Follow interface changes --- .../Connector/ValueProvider/BoolProvider.cs | 2 +- .../Connector/ValueProvider/ByteProvider.cs | 2 +- .../ValueProvider/Color32Provider.cs | 2 +- .../Connector/ValueProvider/ColorProvider.cs | 2 +- .../Connector/ValueProvider/FloatProvider.cs | 2 +- .../ValueProvider/GameObjectProvider.cs | 2 +- .../Connector/ValueProvider/IntProvider.cs | 2 +- .../ValueProvider/ListProviderBase.cs | 5 +- .../Connector/ValueProvider/ObjectProvider.cs | 2 +- .../ValueProvider/QuaternionProvider.cs | 2 +- .../ValueProvider/RuntimePlatformProvider.cs | 2 +- .../ValueProvider/ScriptableObjectProvider.cs | 2 +- .../Connector/ValueProvider/SelectorBase.cs | 46 ++++++++++++++++--- .../Connector/ValueProvider/StringProvider.cs | 2 +- .../ValueProvider/Vector2IntProvider.cs | 2 +- .../ValueProvider/Vector2Provider.cs | 2 +- .../ValueProvider/Vector3IntProvider.cs | 2 +- .../ValueProvider/Vector3Provider.cs | 2 +- .../ValueProvider/Vector4Provider.cs | 2 +- 19 files changed, 57 insertions(+), 28 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index 2f5a44d..3339af5 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class BoolProvider : ProviderBase + public class BoolProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index 92908ec..0adbbdf 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] - public class ByteProvider : ProviderBase + public class ByteProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index a03f5c7..1827532 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Color32Provider : ProviderBase, IValueCombiner, IValueExtractor { private byte? r; private byte? g; diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index d25f484..16c9b02 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class ColorProvider : ProviderBase, IValueCombiner, IValueExtractor + public class ColorProvider : ProviderBase, IValueCombiner, IValueExtractor { private float? r; private float? g; diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index 54faa8a..0437177 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class FloatProvider : ProviderBase + public class FloatProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index 843f284..b4cfda4 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] - public class GameObjectProvider : ProviderBase + public class GameObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 097c33e..83ea4d7 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class IntProvider : ProviderBase + public class IntProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index b231fb7..eb548ce 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -53,10 +53,7 @@ IEnumerable IMessageComposable.GetMessageComposable new ComposableMessageAnnotation(this, typeof(TValue)), }; - Message IMessageComposable.Compose(Message message) - { - throw new NotImplementedException(); - } + Message IMessageComposable.Compose(Message message) => message; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index 9edbd6a..816d10a 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class ObjectProvider : ProviderBase + public class ObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 80a7eee..49bc0cc 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class QuaternionProvider : ProviderBase, IValueCombiner, IValueExtractor + public class QuaternionProvider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs index 2ac3c45..7fea1f7 100644 --- a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatform", (int) ConnectorType.ValueProviderRuntimePlatform)] - public class RuntimePlatformProvider : ProviderBase + public class RuntimePlatformProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index 82be6c4..9b2ef3b 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] - public class ScriptableObjectProvider : ProviderBase + public class ScriptableObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 78682d4..f73672e 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -9,9 +9,9 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase, IValueProvider + public abstract class SelectorBase : ProviderBase, IValueProvider, IMessageCollectable where TPublishEvent : UnityEvent, new() - where TValueCollector : ValueCollectorBase, new() + where TKeyCollector : ValueCollectorBase, new() { [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); @@ -21,6 +21,9 @@ public abstract class SelectorBase [ValueReceiver] public TKey Key { get; set; } + [SerializeField] private TKeyCollector keyCollector = default; + private TKeyCollector KeyCollector => keyCollector ?? (keyCollector = new TKeyCollector()); + TValue IValueProvider.Provide() { if (!Keys.Contains(Key)) @@ -30,24 +33,53 @@ TValue IValueProvider.Provide() return Values[Keys.IndexOf(Key)]; } + + public override IEnumerable GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(this, typeof(TValue)), + }; + + public override Message Compose(Message message) + { + return message + .AddParameter(Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default); + } + + public IEnumerable GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(typeof(TKey), KeyCollector), + }; + + public virtual void Collect() + { + KeyCollector.Collect(StreamedMessages); + } + + public virtual void RegisterCollectDelegates() + { + KeyCollector.Action = x => Key = x; + } + } - public abstract class GameObjectSelectorBase : SelectorBase + public abstract class GameObjectSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } - public abstract class MonoBehaviourSelectorBase : SelectorBase + public abstract class MonoBehaviourSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } - public abstract class UIBehaviourSelectorBase : SelectorBase + public abstract class UIBehaviourSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } - public abstract class EnumSelectorBase : SelectorBase + public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum where TPublishEvent : UnityEvent, new() - where TValueCollector : ValueCollectorBase, new() + where TKeyCollector : ValueCollectorBase, new() { } } diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 30bcd87..32dab50 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class StringProvider : ProviderBase + public class StringProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index fe36d6c..c7bcc6f 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2IntProvider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector2IntProvider : ProviderBase, IValueCombiner, IValueExtractor { private int? x; private int? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index c5e4a2f..7d36f5c 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector2Provider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index f880988..c203c19 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3IntProvider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector3IntProvider : ProviderBase, IValueCombiner, IValueExtractor { private int? x; private int? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index f508ec0..b579e62 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector3Provider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index 2112301..db33765 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -5,7 +5,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector4Provider : ProviderBase, IValueCombiner, IValueExtractor { private float? x; private float? y; From c538bbf1621e2389f2c63dde74e5885a317f44d5 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 00:30:09 +0900 Subject: [PATCH 322/453] :beetle: Avoid NullReferenceException --- Assets/Scripts/Message.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index 83acda2..24a0f93 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using JetBrains.Annotations; namespace UniFlow @@ -86,7 +87,7 @@ private IDictionary GetOrCreateParameterDictionary() Parameters.Add(typeof(T), new Dictionary()); } - return Parameters[typeof(T)] as IDictionary; + return Parameters[typeof(T)].ToDictionary(x => x.Key, x => (T) x.Value); } } } From 84401af5973daba14560fd8b35223ec9e866aad0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 13:23:20 +0900 Subject: [PATCH 323/453] :beetle: Avoid InvalidOperationException --- Assets/Scripts/Extensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index 7e0e37c..8d95c0e 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -85,7 +85,7 @@ public static bool HasMessage(this IEnumerable messages, IConnector con public static Message FindMessage(this IEnumerable messages, IConnector connector) { - return messages.Last(x => x.Connector == connector); + return connector == default ? default : messages.Last(x => x.Connector == connector); } } } From 9a7869b621f9bed61f0717c38c75dde9d0470a3d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 16 Oct 2019 13:23:53 +0900 Subject: [PATCH 324/453] :beetle: Avoid KeyNotFoundException --- Assets/Scripts/Message.cs | 40 ++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index 24a0f93..7fb541b 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; using JetBrains.Annotations; namespace UniFlow @@ -45,49 +44,64 @@ public static Message Create(IConnector connector, T value, string key) public Message AddParameter(T value) { - GetOrCreateParameterDictionary()[string.Empty] = value; + SetValue(string.Empty, value); return this; } public Message AddParameter(T value, string key) { - GetOrCreateParameterDictionary()[key] = value; + SetValue(key, value); return this; } public bool HasParameter() { - return GetOrCreateParameterDictionary().ContainsKey(string.Empty); + return HasValue(string.Empty); } public bool HasParameter(string key) { - return GetOrCreateParameterDictionary().ContainsKey(key); + return HasValue(key); } - public IDictionary GetParameters() + public T GetParameter() { - return GetOrCreateParameterDictionary(); + return GetValue(string.Empty); } - public T GetParameter() + public T GetParameter(string key) { - return GetOrCreateParameterDictionary()[string.Empty]; + return GetValue(key); } - public T GetParameter(string key) + private bool HasValue(string key) { - return GetOrCreateParameterDictionary()[key]; + return Parameters.ContainsKey(typeof(T)) && Parameters[typeof(T)].ContainsKey(key); + } + + private T GetValue(string key) + { + if (!Parameters.ContainsKey(typeof(T))) + { + Parameters.Add(typeof(T), new Dictionary()); + } + + if (!Parameters[typeof(T)].ContainsKey(key)) + { + return default; + } + + return (T) Parameters[typeof(T)][key]; } - private IDictionary GetOrCreateParameterDictionary() + private void SetValue(string key, T value) { if (!Parameters.ContainsKey(typeof(T))) { Parameters.Add(typeof(T), new Dictionary()); } - return Parameters[typeof(T)].ToDictionary(x => x.Key, x => (T) x.Value); + Parameters[typeof(T)][key] = value; } } } From 61ae57553a5c4bc71ad75e33ea717b65e04a3218 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 00:28:18 +0900 Subject: [PATCH 325/453] :tada: Implement messaging --- Assets/Editor/Scripts/ConnectorInfo.cs | 39 ++++++++-- Assets/Editor/Scripts/FlowEdge.cs | 2 +- Assets/Editor/Scripts/FlowGraphView.cs | 8 +- .../Editor/Scripts/FlowMessageCollectPort.cs | 4 +- .../Editor/Scripts/FlowMessageComposePort.cs | 4 +- Assets/Editor/Scripts/FlowNode.cs | 6 +- .../Scripts/MessageConnectorListener.cs | 5 +- .../Controller/ActivationController.cs | 19 ++++- .../Connector/Controller/AnimatorTrigger.cs | 24 +++++- .../Connector/Controller/AudioController.cs | 24 +++++- .../Controller/InstantiateGameObject.cs | 29 ++++++- .../InstantiateGameObjectWithInjectionBase.cs | 59 +++++++++++++++ ...antiateGameObjectWithInjectionBase.cs.meta | 3 + .../Controller/MoveParentTransform.cs | 20 ++++- .../Controller/PlayableController.cs | 24 +++++- .../Controller/SimpleAnimationController.cs | 28 ++++++- .../SignalPublisher/StringSignalPublisher.cs | 30 +++++++- .../SignalReceiver/StringSignalReceiver.cs | 19 ++++- .../Connector/ValueInjector/ImageInjector.cs | 24 +++++- .../ValueInjector/RawImageInjector.cs | 24 +++++- .../Timeline/AnimationTrackInjector.cs | 30 +++++++- .../Timeline/AudioTrackInjector.cs | 30 +++++++- .../Timeline/ControlTrackInjector.cs | 33 +++++++- .../ValueProvider/ListProviderBase.cs | 38 +++------- .../Connector/ValueProvider/ProviderBase.cs | 34 +-------- .../Connector/ValueProvider/SelectorBase.cs | 41 ++-------- Assets/Scripts/ConnectorBase.cs | 9 +-- Assets/Scripts/Extensions.cs | 2 +- Assets/Scripts/IInjectable.cs | 18 +++++ Assets/Scripts/IInjectable.cs.meta | 3 + Assets/Scripts/IMessageCollectable.cs | 6 +- Assets/Scripts/IMessageComposable.cs | 17 ++++- Assets/Scripts/IValueCollector.cs | 13 +++- Assets/Scripts/IValueInjectable.cs | 27 ------- Assets/Scripts/IValueInjectable.cs.meta | 3 - Assets/Scripts/IValueProvider.cs | 20 ----- Assets/Scripts/IValueProvider.cs.meta | 3 - Assets/Scripts/Message.cs | 22 ++++-- Assets/Scripts/MessageAnnotation.cs | 75 +++++++++++++++---- Assets/Scripts/ValueCollector.cs | 16 ++++ Assets/Scripts/ValueCollectorBase.cs | 47 ++++++------ 41 files changed, 639 insertions(+), 243 deletions(-) create mode 100644 Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs create mode 100644 Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs.meta create mode 100644 Assets/Scripts/IInjectable.cs create mode 100644 Assets/Scripts/IInjectable.cs.meta delete mode 100644 Assets/Scripts/IValueInjectable.cs delete mode 100644 Assets/Scripts/IValueInjectable.cs.meta delete mode 100644 Assets/Scripts/IValueProvider.cs delete mode 100644 Assets/Scripts/IValueProvider.cs.meta diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index 3ee7f3e..b8f4142 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -12,7 +12,17 @@ namespace UniFlow.Editor [Serializable] public class ConnectorInfo { - private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, string name, IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers, IEnumerable composableMessageAnnotations, IEnumerable collectableMessageAnnotations) + private ConnectorInfo( + GameObject gameObject, + IConnector connector, + Type type, + string name, + IEnumerable parameters, + IEnumerable valuePublishers, + IEnumerable valueReceivers, + IEnumerable composableMessageAnnotations, + IEnumerable collectableMessageAnnotations + ) { GameObject = gameObject; Connector = connector; @@ -33,8 +43,8 @@ private ConnectorInfo(GameObject gameObject, IConnector connector, Type type, st public IEnumerable ParameterList => parameterList; public IEnumerable ValuePublishers { get; } public IEnumerable ValueReceivers { get; } - public IEnumerable ComposableMessageAnnotations { get; } - public IEnumerable CollectableMessageAnnotations { get; } + public IEnumerable ComposableMessageAnnotations { get; set; } + public IEnumerable CollectableMessageAnnotations { get; set; } public void ApplyParameter(Parameter parameter) { @@ -47,6 +57,21 @@ public void ApplyParameter(Parameter parameter) .SetValue(Connector, parameter.Value); } + public void ReCalculateAnnotations() + { + if (Connector == default) + { + return; + } + + ComposableMessageAnnotations = typeof(IMessageComposable).IsAssignableFrom(Type) + ? ((IMessageComposable) Connector).GetMessageComposableAnnotations() + : new IComposableMessageAnnotation[0]; + CollectableMessageAnnotations = typeof(IMessageCollectable).IsAssignableFrom(Type) + ? ((IMessageCollectable) Connector).GetMessageCollectableAnnotations() + : new ICollectableMessageAnnotation[0]; + } + private static FieldInfo GetFieldRecursive(Type type, string name, BindingFlags bindingFlags) { do @@ -103,10 +128,10 @@ public static ConnectorInfo Create(Type type, IConnector instance) .Select(ValueReceiverInfo.Create), typeof(IMessageComposable).IsAssignableFrom(type) && instance != null ? ((IMessageComposable) instance).GetMessageComposableAnnotations() - : new ComposableMessageAnnotation[0], + : new IComposableMessageAnnotation[0], typeof(IMessageCollectable).IsAssignableFrom(type) && instance != null ? ((IMessageCollectable) instance).GetMessageCollectableAnnotations() - : new CollectableMessageAnnotation[0] + : new ICollectableMessageAnnotation[0] ); } @@ -119,8 +144,8 @@ public static ConnectorInfo Create( IEnumerable parameters, IEnumerable valuePublishers, IEnumerable valueReceivers, - IEnumerable composableMessageAnnotations, - IEnumerable collectableMessageAnnotations + IEnumerable composableMessageAnnotations, + IEnumerable collectableMessageAnnotations ) { return new ConnectorInfo(gameObject, instance, type, name, parameters, valuePublishers, valueReceivers, composableMessageAnnotations, collectableMessageAnnotations); diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs index 5e8df00..4d7bb08 100644 --- a/Assets/Editor/Scripts/FlowEdge.cs +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -27,7 +27,7 @@ void IRemovableElement.RemoveFromGraphView() switch (input) { case FlowMessageCollectPort messageCollectPort: - messageCollectPort.CollectableMessageAnnotation.ValueCollector.Connector = default; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.SourceConnector = default; messageCollectPort.CollectableMessageAnnotation.ValueCollector.ComposerKey = default; break; } diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 9777fe0..1320ccd 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -323,15 +323,15 @@ private void CreateMessageConnectorEdges() .ToArray(); foreach (var valueCollector in valueCollectors) { - if (!(valueCollector.Connector is IMessageComposable) || !RenderedNodes.ContainsKey(valueCollector.Connector) || !(connector is IMessageCollectable)) + if (!(valueCollector.SourceConnector is IMessageComposable) || !RenderedNodes.ContainsKey(valueCollector.SourceConnector) || !(connector is IMessageCollectable)) { continue; } - var messageComposeNode = RenderedNodes[valueCollector.Connector]; + var messageComposeNode = RenderedNodes[valueCollector.SourceConnector]; var messageCollectNode = RenderedNodes[connector]; - var messageComposePort = messageComposeNode.MessageComposePorts.FirstOrDefault(x => x.ComposableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && (string.IsNullOrEmpty(valueCollector.ComposerKey) || x.ComposableMessageAnnotation.Key == valueCollector.ComposerKey)); - var messageCollectPort = messageCollectNode.MessageCollectPorts.FirstOrDefault(x => x.CollectableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && (string.IsNullOrEmpty(valueCollector.ComposerKey) || x.CollectableMessageAnnotation.Label == valueCollector.CollectorLabel)); + var messageComposePort = messageComposeNode.MessageComposePorts.FirstOrDefault(x => x.ComposableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && x.ComposableMessageAnnotation.Key == valueCollector.ComposerKey); + var messageCollectPort = messageCollectNode.MessageCollectPorts.FirstOrDefault(x => x.CollectableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && x.CollectableMessageAnnotation.Key == valueCollector.CollectorKey); if (messageComposePort != null && messageCollectPort != null) { AddEdge(messageComposePort, messageCollectPort); diff --git a/Assets/Editor/Scripts/FlowMessageCollectPort.cs b/Assets/Editor/Scripts/FlowMessageCollectPort.cs index e566235..2351493 100644 --- a/Assets/Editor/Scripts/FlowMessageCollectPort.cs +++ b/Assets/Editor/Scripts/FlowMessageCollectPort.cs @@ -10,9 +10,9 @@ private FlowMessageCollectPort(Orientation portOrientation, Direction portDirect { } - public CollectableMessageAnnotation CollectableMessageAnnotation { get; private set; } + public ICollectableMessageAnnotation CollectableMessageAnnotation { get; private set; } - public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, CollectableMessageAnnotation collectableMessageAnnotation, IEdgeConnectorListener edgeConnectorListener = default) + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ICollectableMessageAnnotation collectableMessageAnnotation, IEdgeConnectorListener edgeConnectorListener = default) { var port = new FlowMessageCollectPort(portOrientation, portDirection, portCapacity, typeof(FlowMessageCollectPort)) { diff --git a/Assets/Editor/Scripts/FlowMessageComposePort.cs b/Assets/Editor/Scripts/FlowMessageComposePort.cs index 38bcdd0..dd91a67 100644 --- a/Assets/Editor/Scripts/FlowMessageComposePort.cs +++ b/Assets/Editor/Scripts/FlowMessageComposePort.cs @@ -10,9 +10,9 @@ private FlowMessageComposePort(Orientation portOrientation, Direction portDirect { } - public ComposableMessageAnnotation ComposableMessageAnnotation { get; private set; } + public IComposableMessageAnnotation ComposableMessageAnnotation { get; private set; } - public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ComposableMessageAnnotation composableMessageAnnotation, IEdgeConnectorListener edgeConnectorListener = default) + public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, IComposableMessageAnnotation composableMessageAnnotation, IEdgeConnectorListener edgeConnectorListener = default) { var port = new FlowMessageComposePort(portOrientation, portDirection, portCapacity, typeof(FlowMessageComposePort)) { diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 0a713dc..3f0be70 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -48,6 +48,7 @@ public void Initialize() if (ConnectorInfo.Connector == default) { ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; + ConnectorInfo.ReCalculateAnnotations(); } AddParameters(); @@ -215,6 +216,7 @@ private void AddParameters() { ConnectorInfo.GameObject = newGameObject; ConnectorInfo.Connector = Undo.AddComponent(ConnectorInfo.GameObject, ConnectorInfo.Type) as IConnector; + ConnectorInfo.ReCalculateAnnotations(); ConnectorInfo.ApplyParameters(); ApplyTargetConnectors(); InputPort?.connections.Select(y => y.output.node).OfType().ToList().ForEach(y => y.ApplyTargetConnectors()); @@ -435,7 +437,7 @@ private void AddPorts() foreach (var composableMessageAnnotation in ConnectorInfo.ComposableMessageAnnotations) { var port = FlowMessageComposePort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, composableMessageAnnotation, MessageConnectorListener); - port.portName = composableMessageAnnotation.Label; + port.portName = composableMessageAnnotation.Key; outputContainer.Add(port); MessageComposePorts.Add(port as FlowMessageComposePort); } @@ -450,7 +452,7 @@ private void AddPorts() foreach (var collectableMessageAnnotation in ConnectorInfo.CollectableMessageAnnotations) { var port = FlowMessageCollectPort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, collectableMessageAnnotation, MessageConnectorListener); - port.portName = collectableMessageAnnotation.Label; + port.portName = collectableMessageAnnotation.Key; inputContainer.Add(port); MessageCollectPorts.Add(port as FlowMessageCollectPort); } diff --git a/Assets/Editor/Scripts/MessageConnectorListener.cs b/Assets/Editor/Scripts/MessageConnectorListener.cs index 743d2fb..baf01b1 100644 --- a/Assets/Editor/Scripts/MessageConnectorListener.cs +++ b/Assets/Editor/Scripts/MessageConnectorListener.cs @@ -41,10 +41,11 @@ void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) return; } - messageCollectPort.CollectableMessageAnnotation.ValueCollector.Connector = messageComposePort.ComposableMessageAnnotation.Connector; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.SourceConnector = ((FlowNode) messageComposePort.node).ConnectorInfo.Connector; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.TargetConnector = ((FlowNode) messageCollectPort.node).ConnectorInfo.Connector; messageCollectPort.CollectableMessageAnnotation.ValueCollector.TypeString = messageComposePort.ComposableMessageAnnotation.Type.AssemblyQualifiedName; messageCollectPort.CollectableMessageAnnotation.ValueCollector.ComposerKey = messageComposePort.ComposableMessageAnnotation.Key; - messageCollectPort.CollectableMessageAnnotation.ValueCollector.CollectorLabel = messageCollectPort.CollectableMessageAnnotation.Label; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.CollectorKey = messageCollectPort.CollectableMessageAnnotation.Key; EditorUtility.SetDirty(((FlowNode) messageCollectPort.node).ConnectorInfo.Connector as ConnectorBase); } } diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 61c3909..47dd7c9 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -9,7 +9,8 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/ActivationController", (int) ConnectorType.LoadScene)] - public class ActivationController : ConnectorBase + public class ActivationController : ConnectorBase, + IMessageCollectable { [SerializeField] private List targetGameObjects = default; [SerializeField] private List targetBehaviours = default; @@ -41,6 +42,14 @@ [ValueReceiver] public Behaviour TargetBehaviour set => Behaviours.Add(value); } + [SerializeField] private BoolCollector activatedCollector = default; + [SerializeField] private GameObjectCollector targetGameObjectCollector = default; + [SerializeField] private BehaviourCollector targetBehaviourCollector = default; + + private BoolCollector ActivatedCollector => activatedCollector; + private GameObjectCollector TargetGameObjectCollector => targetGameObjectCollector; + private BehaviourCollector TargetBehaviourCollector => targetBehaviourCollector; + public override IObservable OnConnectAsObservable() { var gameObjects = GameObjects.Where(x => x.activeSelf != Activated).ToList(); @@ -50,5 +59,13 @@ public override IObservable OnConnectAsObservable() return ObservableFactory.ReturnMessage(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(ActivatedCollector, x => Activated = x, nameof(Activated)), + new CollectableMessageAnnotation(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), + new CollectableMessageAnnotation(TargetBehaviourCollector, x => TargetBehaviour = x, nameof(TargetBehaviour)), + }; } } diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index b851f7a..f2c9e25 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UniFlow.Utility; using UniFlow.Attribute; using UnityEngine; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/AnimatorTrigger", (int) ConnectorType.AnimatorTrigger)] - public class AnimatorTrigger : ConnectorBase, IBaseGameObjectSpecifyable + public class AnimatorTrigger : ConnectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -36,6 +39,16 @@ [ValueReceiver] public string TriggerName set => triggerName = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private AnimatorCollector animatorCollector = default; + [SerializeField] private StringCollector triggerNameCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private AnimatorCollector AnimatorCollector => animatorCollector; + private StringCollector TriggerNameCollector => triggerNameCollector; + private int TriggerId => Animator.StringToHash(TriggerName); public override IObservable OnConnectAsObservable() @@ -43,5 +56,14 @@ public override IObservable OnConnectAsObservable() Animator.SetTrigger(TriggerId); return ObservableFactory.ReturnMessage(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), + new CollectableMessageAnnotation(TriggerNameCollector, x => TriggerName = x, nameof(TriggerName)), + }; } } diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index c82c36e..e7d8f32 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniFlow.Utility; using UniFlow.Attribute; @@ -7,7 +8,9 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/AudioController", (int) ConnectorType.AudioController)] - public class AudioController : ConnectorBase, IBaseGameObjectSpecifyable + public class AudioController : ConnectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -43,6 +46,16 @@ [ValueReceiver] public AudioClip AudioClip set => audioClip = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private AudioSourceCollector audioSourceCollector = default; + [SerializeField] private AudioClipCollector audioClipCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private AudioSourceCollector AudioSourceCollector => audioSourceCollector; + private AudioClipCollector AudioClipCollector => audioClipCollector; + public override IObservable OnConnectAsObservable() { InvokeAudioSourceMethod(); @@ -74,6 +87,15 @@ private void InvokeAudioSourceMethod() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(AudioSourceCollector, x => AudioSource = x), + new CollectableMessageAnnotation(AudioClipCollector, x => AudioClip = x), + }; } public enum AudioControlMethod diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 6042329..97d366b 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -1,12 +1,15 @@ using System; -using UniFlow.Utility; +using System.Collections.Generic; using UniFlow.Attribute; +using UniFlow.Utility; using UnityEngine; namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/InstantiateObject", (int) ConnectorType.InstantiateGameObject)] - public class InstantiateGameObject : ConnectorBase + public class InstantiateGameObject : ConnectorBase, + IMessageCollectable, + IMessageComposable { [SerializeField] private GameObject source = default; [SerializeField] private Transform parent = default; @@ -24,13 +27,35 @@ [ValueReceiver] public Transform Parent set => parent = value; } + [SerializeField] private GameObjectCollector sourceCollector = default; + [SerializeField] private TransformCollector parentCollector = default; + + private GameObjectCollector SourceCollector => sourceCollector; + private TransformCollector ParentCollector => parentCollector; + [ValuePublisher("Instantiated")] private PublishGameObjectEvent Publisher => publisher; + private GameObject Instantiated { get; set; } + public override IObservable OnConnectAsObservable() { var go = Instantiate(Source, Parent); Publisher.Invoke(go); + Instantiated = go; return ObservableFactory.ReturnMessage(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(SourceCollector, x => Source = x, nameof(Source)), + new CollectableMessageAnnotation(ParentCollector, x => Parent = x, nameof(Parent)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Instantiated, nameof(Instantiated)), + }; } } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs new file mode 100644 index 0000000..10cd2b0 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniFlow.Utility; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + public abstract class InstantiateGameObjectWithInjectionBase : ConnectorBase, + IMessageCollectable, + IMessageComposable + { + [SerializeField] private GameObject source = default; + [SerializeField] private Transform parent = default; + + private GameObject Source + { + get => source == default ? gameObject : source; + set => source = value; + } + + private Transform Parent + { + get => parent == default ? transform : parent; + set => parent = value; + } + + [SerializeField] private GameObjectCollector sourceCollector = default; + [SerializeField] private TransformCollector parentCollector = default; + + private GameObjectCollector SourceCollector => sourceCollector; + private TransformCollector ParentCollector => parentCollector; + + private GameObject Instantiated { get; set; } + + public override IObservable OnConnectAsObservable() + { + Instantiated = Instantiate(Source, Parent); + GetMessageCollectableAnnotations().ToList().ForEach(x => x.Inject(Instantiated)); + return ObservableFactory.ReturnMessage(this); + } + + protected virtual IEnumerable GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(SourceCollector, x => Source = x, nameof(Source)), + new CollectableMessageAnnotation(ParentCollector, x => Parent = x, nameof(Parent)), + }; + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + GetMessageCollectableAnnotations(); + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(() => Instantiated), + }; + } +} diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs.meta b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs.meta new file mode 100644 index 0000000..840a211 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1b2ad0b7623049c8b7bf4f3707bdbb8b +timeCreated: 1571233445 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index ed11177..513601d 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UniFlow.Utility; using UniFlow.Attribute; using UnityEngine; @@ -6,7 +7,8 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/MoveParentTransform", (int) ConnectorType.MoveParentTransform)] - public class MoveParentTransform : ConnectorBase + public class MoveParentTransform : ConnectorBase, + IMessageCollectable { // ReSharper disable once InconsistentNaming [SerializeField] private Transform targetTransform = default; @@ -31,10 +33,26 @@ [ValueReceiver] public bool WorldPositionStays set => worldPositionStays = value; } + [SerializeField] private TransformCollector targetTransformCollector = default; + [SerializeField] private TransformCollector parentTransformCollector = default; + [SerializeField] private BoolCollector worldPositionStaysCollector = default; + + private TransformCollector TargetTransformCollector => targetTransformCollector; + private TransformCollector ParentTransformCollector => parentTransformCollector; + private BoolCollector WorldPositionStaysCollector => worldPositionStaysCollector; + public override IObservable OnConnectAsObservable() { TargetTransform.SetParent(ParentTransform, WorldPositionStays); return ObservableFactory.ReturnMessage(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), + new CollectableMessageAnnotation(ParentTransformCollector, x => ParentTransform = x, nameof(ParentTransform)), + new CollectableMessageAnnotation(WorldPositionStaysCollector, x => WorldPositionStays = x, nameof(WorldPositionStays)), + }; } } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index b932a0e..86b9fe7 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniFlow.Utility; using UniFlow.Attribute; @@ -9,7 +10,9 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/PlayableController", (int) ConnectorType.PlayableController)] - public class PlayableController : ConnectorBase, IBaseGameObjectSpecifyable + public class PlayableController : ConnectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -43,6 +46,16 @@ [ValueReceiver] public TimelineAsset TimelineAsset set => timelineAsset = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; + [SerializeField] private TimelineAssetCollector timelineAssetCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private PlayableDirectorCollector PlayableDirectorCollector => playableDirectorCollector; + private TimelineAssetCollector TimelineAssetCollector => timelineAssetCollector; + public override IObservable OnConnectAsObservable() { PreparePlayableDirector(); @@ -79,6 +92,15 @@ private void InvokePlayableDirectorMethod() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x), + new CollectableMessageAnnotation(TimelineAssetCollector, x => TimelineAsset = x), + }; } public enum PlayableControlMethod diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 4301ffb..39f9968 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using UniFlow.Utility; @@ -9,7 +10,9 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/SimpleAnimationController", (int) ConnectorType.SimpleAnimationController)] - public class SimpleAnimationController : ConnectorBase, IBaseGameObjectSpecifyable + public class SimpleAnimationController : ConnectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -70,6 +73,19 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode set => updateMode = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private AnimatorCollector animatorCollector = default; + [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = default; + [SerializeField] private AnimationClipCollector animationClipCollector = default; + // TODO: Implement EnumCollector + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private AnimatorCollector AnimatorCollector => animatorCollector; + private SimpleAnimationCollector SimpleAnimationCollector => simpleAnimationCollector; + private AnimationClipCollector AnimationClipCollector => animationClipCollector; + private IDisposable Disposable { get; } = new CompositeDisposable(); public override IObservable OnConnectAsObservable() @@ -127,6 +143,16 @@ private void OnDestroy() { Disposable.Dispose(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), + new CollectableMessageAnnotation(SimpleAnimationCollector, x => SimpleAnimation = x), + new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x), + }; } public enum SimpleAnimationControlMethod diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index 3feb63a..eb2d513 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UniFlow.Signal; using UnityEngine; @@ -5,7 +6,9 @@ namespace UniFlow.Connector.SignalPublisher { [AddComponentMenu("UniFlow/SignalPublisher/String", (int) ConnectorType.StringSignalPublisher)] - public class StringSignalPublisher : SignalPublisherBase, ISignalCreator + public class StringSignalPublisher : SignalPublisherBase, + ISignalCreator, + IMessageCollectable { [SerializeField] private string signalName = default; [SerializeField] private bool boolParameter = default; @@ -67,5 +70,30 @@ StringSignal ISignalCreator.CreateSignal() ) ); } + + [SerializeField] private BoolCollector boolCollector = default; + [SerializeField] private IntCollector intCollector = default; + [SerializeField] private FloatCollector floatCollector = default; + [SerializeField] private StringCollector stringCollector = default; + [SerializeField] private ObjectCollector objectCollector = default; + [SerializeField] private ScriptableObjectCollector scriptableObjectCollector = default; + + private BoolCollector BoolCollector => boolCollector; + private IntCollector IntCollector => intCollector; + private FloatCollector FloatCollector => floatCollector; + private StringCollector StringCollector => stringCollector; + private ObjectCollector ObjectCollector => objectCollector; + private ScriptableObjectCollector ScriptableObjectCollector => scriptableObjectCollector; + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BoolCollector, x => BoolParameter = x, nameof(BoolParameter)), + new CollectableMessageAnnotation(IntCollector, x => IntParameter = x, nameof(IntParameter)), + new CollectableMessageAnnotation(FloatCollector, x => FloatParameter = x, nameof(FloatParameter)), + new CollectableMessageAnnotation(StringCollector, x => StringParameter = x, nameof(StringParameter)), + new CollectableMessageAnnotation(ObjectCollector, x => ObjectParameter = x, nameof(ObjectParameter)), + new CollectableMessageAnnotation(ScriptableObjectCollector, x => ScriptableObjectParameter = x, nameof(ScriptableObjectParameter)), + }; } } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 72406eb..70a4ac5 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UniFlow.Connector.SignalPublisher; using UniFlow.Signal; @@ -6,7 +7,10 @@ namespace UniFlow.Connector.SignalReceiver { [AddComponentMenu("UniFlow/SignalReceiver/String", (int) ConnectorType.StringSignalReceiver)] - public class StringSignalReceiver : SignalReceiverBase, ISignalCreator, ISignalFilter + public class StringSignalReceiver : SignalReceiverBase, + ISignalCreator, + ISignalFilter, + IMessageComposable { [SerializeField] private string signalName = default; [ValueReceiver] public string SignalName @@ -47,6 +51,19 @@ protected override void OnReceive(StringSignal receivedSignal) PublishStringParameter.Invoke(receivedSignal.Parameter.StringValue); PublishObjectParameter.Invoke(receivedSignal.Parameter.ObjectValue); PublishScriptableObjectParameter.Invoke(receivedSignal.Parameter.ScriptableObjectValue); + + Signal = receivedSignal; } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Signal.Parameter.BoolValue, "BoolParameter"), + new ComposableMessageAnnotation(() => Signal.Parameter.IntValue, "IntParameter"), + new ComposableMessageAnnotation(() => Signal.Parameter.FloatValue, "FloatParameter"), + new ComposableMessageAnnotation(() => Signal.Parameter.StringValue, "StringParameter"), + new ComposableMessageAnnotation(() => Signal.Parameter.ObjectValue, "ObjectParameter"), + new ComposableMessageAnnotation(() => Signal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), + }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index c3008a4..a0eecad 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UniFlow.Connector.ValueInjector; using UnityEngine; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/ValueInjector/ImageInjector", (int) ConnectorType.ValueInjectorImage)] - public class ImageInjector : InjectorBase, IBaseGameObjectSpecifyable + public class ImageInjector : InjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -34,9 +37,28 @@ [ValueReceiver] public Sprite Sprite set => sprite = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private ImageCollector imageCollector = default; + [SerializeField] private SpriteCollector spriteCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private ImageCollector ImageCollector => imageCollector; + private SpriteCollector SpriteCollector => spriteCollector; + protected override void Inject() { Image.sprite = Sprite; } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(ImageCollector, x => Image = x, nameof(Image)), + new CollectableMessageAnnotation(SpriteCollector, x => Sprite = x, nameof(Sprite)), + }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index 198a6ac..e58165b 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UniFlow.Connector.ValueInjector; using UnityEngine; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/ValueInjector/RawImageInjector", (int) ConnectorType.ValueInjectorRawImage)] - public class RawImageInjector : InjectorBase, IBaseGameObjectSpecifyable + public class RawImageInjector : InjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -34,9 +37,28 @@ [ValueReceiver] public Texture Texture set => texture = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private RawImageCollector rawImageCollector = default; + [SerializeField] private TextureCollector textureCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector ?? (baseGameObjectCollector = new GameObjectCollector {TargetConnector = this}); + private StringCollector TransformPathCollector => transformPathCollector ?? (transformPathCollector = new StringCollector {TargetConnector = this}); + private RawImageCollector RawImageCollector => rawImageCollector ?? (rawImageCollector = new RawImageCollector {TargetConnector = this}); + private TextureCollector TextureCollector => textureCollector ?? (textureCollector = new TextureCollector {TargetConnector = this}); + protected override void Inject() { RawImage.texture = Texture; } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(RawImageCollector, x => RawImage = x, nameof(RawImage)), + new CollectableMessageAnnotation(TextureCollector, x => Texture = x, nameof(Texture)), + }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index 10ea308..2eec360 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.ValueInjector.Timeline { [AddComponentMenu("UniFlow/ValueInjector/Timeline/AnimationTrack", (int) ConnectorType.ValueInjectorTimelineAnimationTrack)] - public class AnimationTrackInjector : TimelineInjectorBase, IBaseGameObjectSpecifyable + public class AnimationTrackInjector : TimelineInjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -46,9 +49,34 @@ [ValueReceiver] public AnimationClip AnimationClip set => animationClip = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; + [SerializeField] private StringCollector trackNameCollector = default; + [SerializeField] private StringCollector clipNameCollector = default; + [SerializeField] private AnimationClipCollector animationClipCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private PlayableDirectorCollector PlayableDirectorCollector => playableDirectorCollector; + private StringCollector TrackNameCollector => trackNameCollector; + private StringCollector ClipNameCollector => clipNameCollector; + private AnimationClipCollector AnimationClipCollector => animationClipCollector; + protected override void Inject(AnimationPlayableAsset playableAsset) { playableAsset.clip = AnimationClip; } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + new CollectableMessageAnnotation(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + new CollectableMessageAnnotation(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x, nameof(AnimationClip)), + }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 52f1c54..23c431a 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.ValueInjector.Timeline { [AddComponentMenu("UniFlow/ValueInjector/Timeline/AudioTrack", (int) ConnectorType.ValueInjectorTimelineAudioTrack)] - public class AudioTrackInjector : TimelineInjectorBase, IBaseGameObjectSpecifyable + public class AudioTrackInjector : TimelineInjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -46,9 +49,34 @@ [ValueReceiver] public AudioClip AudioClip set => audioClip = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; + [SerializeField] private StringCollector trackNameCollector = default; + [SerializeField] private StringCollector clipNameCollector = default; + [SerializeField] private AudioClipCollector audioClipCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private PlayableDirectorCollector PlayableDirectorCollector => playableDirectorCollector; + private StringCollector TrackNameCollector => trackNameCollector; + private StringCollector ClipNameCollector => clipNameCollector; + private AudioClipCollector AudioClipCollector => audioClipCollector; + protected override void Inject(AudioPlayableAsset playableAsset) { playableAsset.clip = AudioClip; } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + new CollectableMessageAnnotation(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + new CollectableMessageAnnotation(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + new CollectableMessageAnnotation(AudioClipCollector, x => AudioClip = x, nameof(AudioClip)), + }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 9ba7679..3224915 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; @@ -6,7 +7,9 @@ namespace UniFlow.Connector.ValueInjector.Timeline { [AddComponentMenu("UniFlow/ValueInjector/Timeline/ControlTrack", (int) ConnectorType.ValueInjectorTimelineControlTrack)] - public class ControlTrackInjector : TimelineInjectorBase, IBaseGameObjectSpecifyable + public class ControlTrackInjector : TimelineInjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -52,6 +55,22 @@ [ValueReceiver] public GameObject PrefabGameObject set => prefabGameObject = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; + [SerializeField] private StringCollector trackNameCollector = default; + [SerializeField] private StringCollector clipNameCollector = default; + [SerializeField] private GameObjectCollector sourceGameObjectCollector = default; + [SerializeField] private GameObjectCollector prefabGameObjectCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private PlayableDirectorCollector PlayableDirectorCollector => playableDirectorCollector; + private StringCollector TrackNameCollector => trackNameCollector; + private StringCollector ClipNameCollector => clipNameCollector; + private GameObjectCollector SourceGameObjectCollector => sourceGameObjectCollector; + private GameObjectCollector PrefabGameObjectCollector => prefabGameObjectCollector; + protected override void Inject(ControlPlayableAsset playableAsset) { if (SourceGameObject != default) @@ -63,5 +82,17 @@ protected override void Inject(ControlPlayableAsset playableAsset) playableAsset.prefabGameObject = PrefabGameObject; } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + new CollectableMessageAnnotation(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + new CollectableMessageAnnotation(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + new CollectableMessageAnnotation(SourceGameObjectCollector, x => SourceGameObject = x, nameof(SourceGameObject)), + new CollectableMessageAnnotation(PrefabGameObjectCollector, x => PrefabGameObject = x, nameof(PrefabGameObject)), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index eb548ce..01e5a3b 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -8,7 +8,9 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class ListProviderBase : ConnectorBase, IMessageComposable, IMessageCollectable + public abstract class ListProviderBase : ConnectorBase, + IMessageCollectable, + IMessageComposable where TPublishEvent : UnityEvent, new() where TValueCollector : ValueCollectorBase>, new() { @@ -25,21 +27,10 @@ public IEnumerable Values } [SerializeField] private TValueCollector valuesCollector = default; - private TValueCollector ValuesCollector => valuesCollector ?? (valuesCollector = new TValueCollector()); + private TValueCollector ValuesCollector => valuesCollector; public override IObservable OnConnectAsObservable() { - if (this is IListValueProvider listValueProvider) - { - var temporaryValues = listValueProvider.Provide(); - if (listValueProvider is IFilteredListValueProvider filteredListValueProvider) - { - temporaryValues = temporaryValues.Where(filteredListValueProvider.Predicate); - } - - Values = temporaryValues; - } - var list = Values.ToList(); list.ForEach(Publisher.Invoke); return list @@ -47,29 +38,18 @@ public override IObservable OnConnectAsObservable() .AsMessageObservable(this, typeof(TValue).Name); } - IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new ComposableMessageAnnotation(this, typeof(TValue)), + new CollectableMessageAnnotation>(ValuesCollector, x => Values = x, $"{typeof(TValue).Name}List"), }; - Message IMessageComposable.Compose(Message message) => message; - - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new CollectableMessageAnnotation(typeof(IEnumerable), ValuesCollector, "List"), + // Will compose parameter in OnConnectAsObservable() + new ComposableMessageAnnotation(null), }; - - void IMessageCollectable.Collect() - { - ValuesCollector.Collect(StreamedMessages); - } - - void IMessageCollectable.RegisterCollectDelegates() - { - ValuesCollector.Action = value => Values = value; - } } [Serializable] diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 184dc0a..61fdbe4 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -7,7 +6,7 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class ProviderBase : ConnectorBase, IMessageComposable + public abstract class ProviderBase : ConnectorBase, IInjectable where TPublishEvent : UnityEvent, new() { [SerializeField] private TPublishEvent publisher = new TPublishEvent(); @@ -22,39 +21,12 @@ [ValueReceiver] public TValue Value public override IObservable OnConnectAsObservable() { - - if (this is IValueProvider valueProvider) - { - Value = valueProvider.Provide(); - } - - if (this is IValueCombiner valueCombiner) - { - Value = valueCombiner.Combine(); - } - - if (this is IValueExtractor valueExtractor) - { - valueExtractor.Extract(Value); - } - - Publisher.Invoke(Value); - return Observable.Return(this.CreateMessage()); } - public virtual IEnumerable GetMessageComposableAnnotations() - { - return new[] - { - new ComposableMessageAnnotation(this, typeof(TValue)), - }; - } - - public virtual Message Compose(Message message) + void IInjectable.Inject(TValue v) { - return message - .AddParameter(Value); + Value = v; } } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index f73672e..1d10969 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -9,7 +9,9 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase, IValueProvider, IMessageCollectable + public abstract class SelectorBase : ProviderBase, + IMessageCollectable, + IMessageComposable where TPublishEvent : UnityEvent, new() where TKeyCollector : ValueCollectorBase, new() { @@ -22,46 +24,19 @@ public abstract class SelectorBase : [ValueReceiver] public TKey Key { get; set; } [SerializeField] private TKeyCollector keyCollector = default; - private TKeyCollector KeyCollector => keyCollector ?? (keyCollector = new TKeyCollector()); + private TKeyCollector KeyCollector => keyCollector; - TValue IValueProvider.Provide() - { - if (!Keys.Contains(Key)) - { - return default; - } - - return Values[Keys.IndexOf(Key)]; - } - - public override IEnumerable GetMessageComposableAnnotations() => + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(this, typeof(TValue)), + new ComposableMessageAnnotation(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), }; - public override Message Compose(Message message) - { - return message - .AddParameter(Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default); - } - - public IEnumerable GetMessageCollectableAnnotations() => + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(typeof(TKey), KeyCollector), + new CollectableMessageAnnotation(KeyCollector, x => Key = x), }; - - public virtual void Collect() - { - KeyCollector.Collect(StreamedMessages); - } - - public virtual void RegisterCollectDelegates() - { - KeyCollector.Action = x => Key = x; - } - } public abstract class GameObjectSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index ca2e04f..07ac084 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -64,11 +64,6 @@ [UsedImplicitly] public virtual bool ActAsTrigger protected virtual void Start() { - if (this is IMessageCollectable messageCollectable) - { - messageCollectable.RegisterCollectDelegates(); - } - if (ActAsTrigger) { ((IConnector) this).Connect(ObservableFactory.ReturnMessage(this)); @@ -91,12 +86,12 @@ void IConnector.Connect(IObservable source) if (this is IMessageCollectable messageCollectable) { - messageCollectable.Collect(); + messageCollectable.GetMessageCollectableAnnotations().ToList().ForEach(x => x.Collect()); } return (this as IConnector) .OnConnectAsObservable() - .Select(x => this is IMessageComposable messageComposable ? messageComposable.Compose(x) : x) + .Select(x => this is IMessageComposable messageComposable ? messageComposable.ComposeAll(x) : x) .Do(x => x.StreamedMessages?.Add(x)) #if UNITY_EDITOR .Do(OnConnectSubject.OnNext) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index 8d95c0e..a093acf 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -83,7 +83,7 @@ public static bool HasMessage(this IEnumerable messages, IConnector con return messages.Any(x => x.Connector == connector); } - public static Message FindMessage(this IEnumerable messages, IConnector connector) + public static Message GetMessage(this IEnumerable messages, IConnector connector) { return connector == default ? default : messages.Last(x => x.Connector == connector); } diff --git a/Assets/Scripts/IInjectable.cs b/Assets/Scripts/IInjectable.cs new file mode 100644 index 0000000..a9d106b --- /dev/null +++ b/Assets/Scripts/IInjectable.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using System.Linq; + +namespace UniFlow +{ + public interface IInjectable + { + void Inject(TValue value); + } + + public static class InjectableExtensions + { + public static void InjectAll(this IEnumerable> injectables, TValue value) + { + injectables.ToList().ForEach(x => x.Inject(value)); + } + } +} diff --git a/Assets/Scripts/IInjectable.cs.meta b/Assets/Scripts/IInjectable.cs.meta new file mode 100644 index 0000000..60483ce --- /dev/null +++ b/Assets/Scripts/IInjectable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c7c0dde06634a2288ea5add7d04e430 +timeCreated: 1571237690 \ No newline at end of file diff --git a/Assets/Scripts/IMessageCollectable.cs b/Assets/Scripts/IMessageCollectable.cs index 37f0897..32bc9ff 100644 --- a/Assets/Scripts/IMessageCollectable.cs +++ b/Assets/Scripts/IMessageCollectable.cs @@ -4,10 +4,6 @@ namespace UniFlow { public interface IMessageCollectable { - // Editor 専用にする? - IEnumerable GetMessageCollectableAnnotations(); - - void Collect(); - void RegisterCollectDelegates(); + IEnumerable GetMessageCollectableAnnotations(); } } diff --git a/Assets/Scripts/IMessageComposable.cs b/Assets/Scripts/IMessageComposable.cs index 466f902..b2dc0ad 100644 --- a/Assets/Scripts/IMessageComposable.cs +++ b/Assets/Scripts/IMessageComposable.cs @@ -4,8 +4,19 @@ namespace UniFlow { public interface IMessageComposable { - // Editor 専用にする? - IEnumerable GetMessageComposableAnnotations(); - Message Compose(Message message); + IEnumerable GetMessageComposableAnnotations(); + } + + public static class MessageComposableExtensions + { + public static Message ComposeAll(this IMessageComposable messageComposable, Message message) + { + foreach (var messageComposableAnnotation in messageComposable.GetMessageComposableAnnotations()) + { + message = messageComposableAnnotation.Compose(message); + } + + return message; + } } } diff --git a/Assets/Scripts/IValueCollector.cs b/Assets/Scripts/IValueCollector.cs index f60edce..3c3bd04 100644 --- a/Assets/Scripts/IValueCollector.cs +++ b/Assets/Scripts/IValueCollector.cs @@ -1,12 +1,17 @@ -using System; - namespace UniFlow { public interface IValueCollector { - IConnector Connector { get; set; } + IConnector SourceConnector { get; set; } + IConnector TargetConnector { get; set; } string TypeString { get; set; } string ComposerKey { get; set; } - string CollectorLabel { get; set; } + string CollectorKey { get; set; } + } + + public interface IValueCollector : IValueCollector + { + TValue Collect(); + bool CanCollect(); } } diff --git a/Assets/Scripts/IValueInjectable.cs b/Assets/Scripts/IValueInjectable.cs deleted file mode 100644 index 0204ceb..0000000 --- a/Assets/Scripts/IValueInjectable.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UniRx; - -namespace UniFlow -{ - public interface IValueInjectable - { - TValue Value { get; set; } -// void Inject(TValue value); -// IObservable WaitForInjectAsObservable(); - } - - public static class ValueInjectableExtensions - { - public static void Inject(this IValueInjectable injectable, TValue value) - { - injectable.Value = value; - } - - public static void InjectAll(this IEnumerable> injectables, TValue value) - { - injectables.ToList().ForEach(x => x.Inject(value)); - } - } -} diff --git a/Assets/Scripts/IValueInjectable.cs.meta b/Assets/Scripts/IValueInjectable.cs.meta deleted file mode 100644 index 7726247..0000000 --- a/Assets/Scripts/IValueInjectable.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cd609ffac31a418481cf73841e41494e -timeCreated: 1570680354 \ No newline at end of file diff --git a/Assets/Scripts/IValueProvider.cs b/Assets/Scripts/IValueProvider.cs deleted file mode 100644 index 8daec27..0000000 --- a/Assets/Scripts/IValueProvider.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace UniFlow -{ - public interface IValueProvider - { - TValue Provide(); - } - - public interface IListValueProvider - { - IEnumerable Provide(); - } - - public interface IFilteredListValueProvider : IListValueProvider - { - Func Predicate { get; } - } -} diff --git a/Assets/Scripts/IValueProvider.cs.meta b/Assets/Scripts/IValueProvider.cs.meta deleted file mode 100644 index 6486f49..0000000 --- a/Assets/Scripts/IValueProvider.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e2ef0341dbfd4da39aa679e68729a954 -timeCreated: 1570800511 \ No newline at end of file diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index 7fb541b..d29bdd7 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using JetBrains.Annotations; +using UnityEngine; namespace UniFlow { @@ -76,32 +77,37 @@ public T GetParameter(string key) private bool HasValue(string key) { - return Parameters.ContainsKey(typeof(T)) && Parameters[typeof(T)].ContainsKey(key); + var type = typeof(ScriptableObject).IsAssignableFrom(typeof(T)) ? typeof(ScriptableObject) : typeof(T); + return Parameters.ContainsKey(type) && Parameters[type].ContainsKey(key); } private T GetValue(string key) { - if (!Parameters.ContainsKey(typeof(T))) + var type = typeof(ScriptableObject).IsAssignableFrom(typeof(T)) ? typeof(ScriptableObject) : typeof(T); + + if (!Parameters.ContainsKey(type)) { - Parameters.Add(typeof(T), new Dictionary()); + Parameters.Add(type, new Dictionary()); } - if (!Parameters[typeof(T)].ContainsKey(key)) + if (!Parameters[type].ContainsKey(key)) { return default; } - return (T) Parameters[typeof(T)][key]; + return (T) Parameters[type][key]; } private void SetValue(string key, T value) { - if (!Parameters.ContainsKey(typeof(T))) + var type = typeof(ScriptableObject).IsAssignableFrom(typeof(T)) ? typeof(ScriptableObject) : typeof(T); + + if (!Parameters.ContainsKey(type)) { - Parameters.Add(typeof(T), new Dictionary()); + Parameters.Add(type, new Dictionary()); } - Parameters[typeof(T)][key] = value; + Parameters[type][key] = value; } } } diff --git a/Assets/Scripts/MessageAnnotation.cs b/Assets/Scripts/MessageAnnotation.cs index 0e9020b..8b741c0 100644 --- a/Assets/Scripts/MessageAnnotation.cs +++ b/Assets/Scripts/MessageAnnotation.cs @@ -1,41 +1,90 @@ using System; +using UnityEngine; namespace UniFlow { - public class ComposableMessageAnnotation + public interface IComposableMessageAnnotation { - public ComposableMessageAnnotation(IConnector connector, Type type) : this(connector, type, type.Name) + Type Type { get; } + string Key { get; } + Message Compose(Message message); + } + + public class ComposableMessageAnnotation : IComposableMessageAnnotation + { + public ComposableMessageAnnotation(Func callback) : this(callback, typeof(TValue).Name) { } - public ComposableMessageAnnotation(IConnector connector, Type type, string key) + public ComposableMessageAnnotation(Func callback, string key) { - Type = type; - Connector = connector; + Type = typeof(TValue); + Callback = callback; Key = key; } public Type Type { get; } - public IConnector Connector { get; } public string Key { get; } - public string Label => string.IsNullOrEmpty(Key) ? Type.Name : Key; + private Func Callback { get; } + + Message IComposableMessageAnnotation.Compose(Message message) + { + if (Callback != default) + { + message = message.AddParameter(Callback(), Key); + } + + return message; + } } - public class CollectableMessageAnnotation + public interface ICollectableMessageAnnotation { - public CollectableMessageAnnotation(Type type, IValueCollector valueCollector) : this(type, valueCollector, type.Name) + Type Type { get; } + IValueCollector ValueCollector { get; } + string Key { get; } + void Collect(); + void Inject(GameObject gameObject); + } + + public class CollectableMessageAnnotation : ICollectableMessageAnnotation + { + public CollectableMessageAnnotation(IValueCollector valueCollector, Action callback) : this(valueCollector, callback, typeof(TValue).Name) { } - public CollectableMessageAnnotation(Type type, IValueCollector valueCollector, string label) + public CollectableMessageAnnotation(IValueCollector valueCollector, Action callback, string key) { - Type = type; + Type = typeof(TValue); ValueCollector = valueCollector; - Label = label; + Callback = callback; + Key = key; } public Type Type { get; } public IValueCollector ValueCollector { get; } - public string Label { get; } + public string Key { get; } + private Action Callback { get; } + + void ICollectableMessageAnnotation.Collect() + { + Callback?.Invoke(GetValue()); + } + + void ICollectableMessageAnnotation.Inject(GameObject gameObject) + { + gameObject.GetComponentsInChildren>().InjectAll(GetValue()); + } + + private TValue GetValue() + { + var result = default(TValue); + if (ValueCollector is IValueCollector valueCollector && valueCollector.CanCollect()) + { + result = valueCollector.Collect(); + } + + return result; + } } } diff --git a/Assets/Scripts/ValueCollector.cs b/Assets/Scripts/ValueCollector.cs index 674b4d4..57b8e9c 100644 --- a/Assets/Scripts/ValueCollector.cs +++ b/Assets/Scripts/ValueCollector.cs @@ -4,6 +4,7 @@ using UnityEngine.EventSystems; using UnityEngine.Playables; using UnityEngine.Timeline; +using UnityEngine.UI; using Object = UnityEngine.Object; namespace UniFlow @@ -102,6 +103,11 @@ public class ComponentCollector : ValueCollectorBase { } + [Serializable] + public class BehaviourCollector : ValueCollectorBase + { + } + [Serializable] public class MonoBehaviourCollector : ValueCollectorBase { @@ -142,6 +148,16 @@ public class PlayableDirectorCollector : ValueCollectorBase { } + [Serializable] + public class ImageCollector : ValueCollectorBase + { + } + + [Serializable] + public class RawImageCollector : ValueCollectorBase + { + } + #endregion #region structs diff --git a/Assets/Scripts/ValueCollectorBase.cs b/Assets/Scripts/ValueCollectorBase.cs index a500f19..c058eeb 100644 --- a/Assets/Scripts/ValueCollectorBase.cs +++ b/Assets/Scripts/ValueCollectorBase.cs @@ -1,21 +1,27 @@ using System; -using System.Collections.Generic; using UnityEngine; namespace UniFlow { [Serializable] - public abstract class ValueCollectorBase : IValueCollector + public abstract class ValueCollectorBase : IValueCollector { - [SerializeField] private ConnectorBase connector = default; + [SerializeField] private ConnectorBase sourceConnector = default; + [SerializeField] private ConnectorBase targetConnector = default; [SerializeField] private string typeString = default; [SerializeField] private string composerKey = default; - [SerializeField] private string collectorLabel = default; + [SerializeField] private string collectorKey = default; - public IConnector Connector + public IConnector SourceConnector { - get => connector; - set => connector = value as ConnectorBase; + get => sourceConnector; + set => sourceConnector = value as ConnectorBase; + } + + public IConnector TargetConnector + { + get => targetConnector; + set => targetConnector = value as ConnectorBase; } public string TypeString @@ -30,25 +36,24 @@ public string ComposerKey set => composerKey = value; } - public string CollectorLabel + public string CollectorKey { - get => collectorLabel; - set => collectorLabel = value; + get => collectorKey; + set => collectorKey = value; } - public Action Action { get; set; } + public bool CanCollect() + { + return + SourceConnector != null + && TargetConnector?.StreamedMessages != null + && TargetConnector.StreamedMessages.HasMessage(SourceConnector) + && TargetConnector.StreamedMessages.GetMessage(SourceConnector).HasParameter(ComposerKey); + } - public void Collect(IList messages) + public TValue Collect() { - if (messages == null || Connector == null || !messages.HasMessage(Connector) || !messages.FindMessage(Connector).HasParameter()) - { - return; - } - - var value = string.IsNullOrEmpty(ComposerKey) - ? messages.FindMessage(Connector).GetParameter() - : messages.FindMessage(Connector).GetParameter(ComposerKey); - Action(value); + return TargetConnector.StreamedMessages.GetMessage(SourceConnector).GetParameter(ComposerKey); } } } From 9bc7e2b64005449bfffe359cdff38f6b77b5ebea Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 01:05:26 +0900 Subject: [PATCH 326/453] :fire: Remove unnecessary interfaces --- .../Controller/InstantiateGameObject.cs | 8 +- .../Scripts/Connector/Event/AnimationEvent.cs | 17 +- .../SignalReceiver/StringSignalReceiver.cs | 29 +-- .../Connector/ValueComparer/BoolComparer.cs | 2 +- .../Connector/ValueComparer/ComparerBase.cs | 34 ++- .../ValueComparer/EnumComparerBase.cs | 4 +- .../Connector/ValueComparer/FloatComparer.cs | 2 +- .../Connector/ValueComparer/IntComparer.cs | 2 +- .../Connector/ValueComparer/ObjectComparer.cs | 2 +- .../ValueComparer/RuntimePlatformComparer.cs | 2 +- .../Connector/ValueComparer/StringComparer.cs | 2 +- .../Connector/ValueProvider/BoolProvider.cs | 2 +- .../Connector/ValueProvider/ByteProvider.cs | 2 +- .../ValueProvider/Color32Provider.cs | 54 ++--- .../Connector/ValueProvider/ColorProvider.cs | 54 ++--- .../Connector/ValueProvider/FloatProvider.cs | 2 +- .../ValueProvider/GameObjectProvider.cs | 2 +- .../Connector/ValueProvider/IntProvider.cs | 2 +- .../Connector/ValueProvider/ObjectProvider.cs | 2 +- .../Connector/ValueProvider/ProviderBase.cs | 7 +- .../ValueProvider/QuaternionProvider.cs | 63 +++-- .../ValueProvider/RuntimePlatformProvider.cs | 2 +- .../ValueProvider/ScriptableObjectProvider.cs | 2 +- .../Connector/ValueProvider/SelectorBase.cs | 13 +- .../Connector/ValueProvider/StringProvider.cs | 2 +- .../ValueProvider/Vector2IntProvider.cs | 38 ++- .../ValueProvider/Vector2Provider.cs | 38 ++- .../ValueProvider/Vector3IntProvider.cs | 46 ++-- .../ValueProvider/Vector3Provider.cs | 46 ++-- .../ValueProvider/Vector4Provider.cs | 54 ++--- Assets/Scripts/IValueCombiner.cs | 7 - Assets/Scripts/IValueCombiner.cs.meta | 3 - Assets/Scripts/IValueExtractor.cs | 7 - Assets/Scripts/IValueExtractor.cs.meta | 3 - Assets/Scripts/PublishValueEvent.cs | 225 ------------------ Assets/Scripts/PublishValueEvent.cs.meta | 3 - .../{ValueCollector.cs => ValueCollectors.cs} | 0 ...lector.cs.meta => ValueCollectors.cs.meta} | 0 38 files changed, 242 insertions(+), 541 deletions(-) delete mode 100644 Assets/Scripts/IValueCombiner.cs delete mode 100644 Assets/Scripts/IValueCombiner.cs.meta delete mode 100644 Assets/Scripts/IValueExtractor.cs delete mode 100644 Assets/Scripts/IValueExtractor.cs.meta delete mode 100644 Assets/Scripts/PublishValueEvent.cs delete mode 100644 Assets/Scripts/PublishValueEvent.cs.meta rename Assets/Scripts/{ValueCollector.cs => ValueCollectors.cs} (100%) rename Assets/Scripts/{ValueCollector.cs.meta => ValueCollectors.cs.meta} (100%) diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 97d366b..4d0e7e4 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -14,8 +14,6 @@ public class InstantiateGameObject : ConnectorBase, [SerializeField] private GameObject source = default; [SerializeField] private Transform parent = default; - [SerializeField] private PublishGameObjectEvent publisher = new PublishGameObjectEvent(); - [ValueReceiver] public GameObject Source { get => source == default ? gameObject : source; @@ -33,15 +31,11 @@ [ValueReceiver] public Transform Parent private GameObjectCollector SourceCollector => sourceCollector; private TransformCollector ParentCollector => parentCollector; - [ValuePublisher("Instantiated")] private PublishGameObjectEvent Publisher => publisher; - private GameObject Instantiated { get; set; } public override IObservable OnConnectAsObservable() { - var go = Instantiate(Source, Parent); - Publisher.Invoke(go); - Instantiated = go; + Instantiated = Instantiate(Source, Parent); return ObservableFactory.ReturnMessage(this); } diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index a68a3b8..a074957 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -1,15 +1,15 @@ using System; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using UniFlow.Attribute; using UniRx; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/AnimationEvent", (int) ConnectorType.AnimationEvent)] - public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable + public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessageComposable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -20,7 +20,6 @@ public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable private AnimationClip animationClip = default; [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - [SerializeField] private PublishAnimationEventEvent publisher = new PublishAnimationEventEvent(); [ValueReceiver] public GameObject BaseGameObject { @@ -65,10 +64,10 @@ [ValueReceiver] public AnimatorUpdateMode UpdateMode set => updateMode = value; } - [ValuePublisher] public UnityEvent Publisher => publisher; - private ISubject Subject { get; } = new Subject(); + private UnityEngine.AnimationEvent LatestAnimationEvent { get; set; } + public override IObservable OnConnectAsObservable() { PrepareAnimationEvent(); @@ -85,8 +84,8 @@ public override IObservable OnConnectAsObservable() [UsedImplicitly] public void Dispatch(UnityEngine.AnimationEvent animationEvent) { - Publisher.Invoke(animationEvent); Subject.OnNext(animationEvent); + LatestAnimationEvent = animationEvent; } private void PrepareAnimationEvent() @@ -100,5 +99,11 @@ private void PrepareAnimationEvent() Animator.updateMode = UpdateMode; } } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(() => LatestAnimationEvent), + }; } } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 70a4ac5..9f6c251 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -10,6 +10,7 @@ namespace UniFlow.Connector.SignalReceiver public class StringSignalReceiver : SignalReceiverBase, ISignalCreator, ISignalFilter, + IMessageCollectable, IMessageComposable { [SerializeField] private string signalName = default; @@ -19,19 +20,8 @@ [ValueReceiver] public string SignalName set => signalName = value; } - [SerializeField] private PublishBoolEvent publishBoolParameter = new PublishBoolEvent(); - [SerializeField] private PublishIntEvent publishIntParameter = new PublishIntEvent(); - [SerializeField] private PublishFloatEvent publishFloatParameter = new PublishFloatEvent(); - [SerializeField] private PublishStringEvent publishStringParameter = new PublishStringEvent(); - [SerializeField] private PublishObjectEvent publishObjectParameter = new PublishObjectEvent(); - [SerializeField] private PublishScriptableObjectEvent publishScriptableObjectParameter = new PublishScriptableObjectEvent(); - - [ValuePublisher("BoolParameter")] private PublishBoolEvent PublishBoolParameter => publishBoolParameter; - [ValuePublisher("IntParameter")] private PublishIntEvent PublishIntParameter => publishIntParameter; - [ValuePublisher("FloatParameter")] private PublishFloatEvent PublishFloatParameter => publishFloatParameter; - [ValuePublisher("StringParameter")] private PublishStringEvent PublishStringParameter => publishStringParameter; - [ValuePublisher("ObjectParameter")] private PublishObjectEvent PublishObjectParameter => publishObjectParameter; - [ValuePublisher("ScriptableObjectParameter")] private PublishScriptableObjectEvent PublishScriptableObjectParameter => publishScriptableObjectParameter; + [SerializeField] private StringCollector signalNameCollector = default; + private StringCollector SignalNameCollector => signalNameCollector; bool ISignalFilter.Filter(StringSignal signal) { @@ -45,16 +35,15 @@ StringSignal ISignalCreator.CreateSignal() protected override void OnReceive(StringSignal receivedSignal) { - PublishBoolParameter.Invoke(receivedSignal.Parameter.BoolValue); - PublishIntParameter.Invoke(receivedSignal.Parameter.IntValue); - PublishFloatParameter.Invoke(receivedSignal.Parameter.FloatValue); - PublishStringParameter.Invoke(receivedSignal.Parameter.StringValue); - PublishObjectParameter.Invoke(receivedSignal.Parameter.ObjectValue); - PublishScriptableObjectParameter.Invoke(receivedSignal.Parameter.ScriptableObjectValue); - Signal = receivedSignal; } + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(SignalNameCollector, x => SignalName = x, nameof(SignalName)), + }; + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { diff --git a/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs index 2a843d4..b1d386b 100644 --- a/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Bool", (int) ConnectorType.ValueComparerBool)] - public class BoolComparer : ComparerBase + public class BoolComparer : ComparerBase { protected override bool Compare(bool actual) { diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 83be48f..8eedb22 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniFlow.Utility; using UniFlow.Attribute; @@ -6,7 +7,8 @@ namespace UniFlow.Connector.ValueComparer { - public abstract class ComparerBase : ConnectorBase + public abstract class ComparerBase : ConnectorBase, IMessageCollectable, IMessageComposable + where TCollector : ValueCollectorBase { private const string MessageParameterKey = "Result"; @@ -19,21 +21,39 @@ [ValueReceiver] public TValue Expect } [ValueReceiver] public TValue Actual { get; set; } - [SerializeField] private PublishBoolEvent publishResult = new PublishBoolEvent(); - [ValuePublisher("Result")] public PublishBoolEvent PublishResult => publishResult; + [SerializeField] private TCollector expectCollector = default; + [SerializeField] private TCollector actualCollector = default; + + private TCollector ExpectCollector => expectCollector; + private TCollector ActualCollector => actualCollector; + + private bool Result { get; set; } public override IObservable OnConnectAsObservable() { - var result = Compare(Actual); - PublishResult.Invoke(result); - return result ? ObservableFactory.ReturnMessage(this, MessageParameterKey, true) : ObservableFactory.EmptyMessage(); + Result = Compare(Actual); + return Result ? ObservableFactory.ReturnMessage(this, MessageParameterKey, true) : ObservableFactory.EmptyMessage(); } protected abstract bool Compare(TValue actual); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ExpectCollector, x => Expect = x, nameof(Expect)), + new CollectableMessageAnnotation(ActualCollector, x => Actual = x, nameof(Actual)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(() => Result, "Result"), + }; } - public abstract class ComparerBase : ComparerBase + public abstract class ComparerBase : ComparerBase where TOperator : Enum + where TCollector : ValueCollectorBase { [SerializeField] private TOperator @operator = default; diff --git a/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs index 55ee06c..070f965 100644 --- a/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs @@ -2,7 +2,9 @@ namespace UniFlow.Connector.ValueComparer { - public abstract class EnumComparerBase : ComparerBase.OperatorType> where TEnum : Enum + public abstract class EnumComparerBase : ComparerBase.OperatorType, TCollector> + where TCollector : ValueCollectorBase + where TEnum : Enum { protected override bool Compare(TEnum actual) { diff --git a/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs index af63749..20438ad 100644 --- a/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Float", (int) ConnectorType.ValueComparerFloat)] - public class FloatComparer : ComparerBase + public class FloatComparer : ComparerBase { protected override bool Compare(float actual) { diff --git a/Assets/Scripts/Connector/ValueComparer/IntComparer.cs b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs index b882f96..8599a72 100644 --- a/Assets/Scripts/Connector/ValueComparer/IntComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Int", (int) ConnectorType.ValueComparerInt)] - public class IntComparer : ComparerBase + public class IntComparer : ComparerBase { protected override bool Compare(int actual) { diff --git a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs index 6f9fb30..db5b704 100644 --- a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/Object", (int) ConnectorType.ValueComparerObject)] - public class ObjectComparer : ComparerBase + public class ObjectComparer : ComparerBase { protected override bool Compare(UnityEngine.Object actual) { diff --git a/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs index 059a8bd..d634e0c 100644 --- a/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/RuntimePlatform", (int) ConnectorType.ValueComparerRuntimePlatform)] - public class RuntimePlatformComparer : EnumComparerBase + public class RuntimePlatformComparer : EnumComparerBase { } } diff --git a/Assets/Scripts/Connector/ValueComparer/StringComparer.cs b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs index fa8e29f..1a0579c 100644 --- a/Assets/Scripts/Connector/ValueComparer/StringComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.ValueComparer { [AddComponentMenu("UniFlow/ValueComparer/String", (int) ConnectorType.ValueComparerString)] - public class StringComparer : ComparerBase + public class StringComparer : ComparerBase { protected override bool Compare(string actual) { diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index 3339af5..587b055 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] - public class BoolProvider : ProviderBase + public class BoolProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index 0adbbdf..9023414 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] - public class ByteProvider : ProviderBase + public class ByteProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 1827532..45e0b92 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -1,42 +1,34 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] - public class Color32Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Color32Provider : ProviderBase, IMessageCollectable, IMessageComposable { - private byte? r; - private byte? g; - private byte? b; - private byte? a; - [ValueReceiver] private byte R { get => r ?? Value.r; set => r = value; } - [ValueReceiver] private byte G { get => g ?? Value.g; set => g = value; } - [ValueReceiver] private byte B { get => b ?? Value.b; set => b = value; } - [ValueReceiver] private byte A { get => a ?? Value.a; set => a = value; } + [SerializeField] private ByteCollector rCollector = default; + [SerializeField] private ByteCollector gCollector = default; + [SerializeField] private ByteCollector bCollector = default; + [SerializeField] private ByteCollector aCollector = default; - [SerializeField] private PublishByteEvent publisherR = new PublishByteEvent(); - [SerializeField] private PublishByteEvent publisherG = new PublishByteEvent(); - [SerializeField] private PublishByteEvent publisherB = new PublishByteEvent(); - [SerializeField] private PublishByteEvent publisherA = new PublishByteEvent(); + private ByteCollector RCollector => rCollector; + private ByteCollector GCollector => gCollector; + private ByteCollector BCollector => bCollector; + private ByteCollector ACollector => aCollector; - [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; - [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; - [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; - [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(RCollector, x => Value = new Color32(x, Value.g, Value.b, Value.a), "R"), + new CollectableMessageAnnotation(GCollector, x => Value = new Color32(Value.r, x, Value.b, Value.a), "G"), + new CollectableMessageAnnotation(BCollector, x => Value = new Color32(Value.r, Value.g, x, Value.a), "B"), + new CollectableMessageAnnotation(ACollector, x => Value = new Color32(Value.r, Value.g, Value.b, x), "A"), + }; - Color32 IValueCombiner.Combine() - { - return new Color32(R, G, B, A); - } - - void IValueExtractor.Extract(Color32 value) - { - PublisherR.Invoke(value.r); - PublisherG.Invoke(value.g); - PublisherB.Invoke(value.b); - PublisherA.Invoke(value.a); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index 16c9b02..d604373 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -1,42 +1,34 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] - public class ColorProvider : ProviderBase, IValueCombiner, IValueExtractor + public class ColorProvider : ProviderBase, IMessageCollectable, IMessageComposable { - private float? r; - private float? g; - private float? b; - private float? a; - [ValueReceiver] private float R { get => r ?? Value.r; set => r = value; } - [ValueReceiver] private float G { get => g ?? Value.g; set => g = value; } - [ValueReceiver] private float B { get => b ?? Value.b; set => b = value; } - [ValueReceiver] private float A { get => a ?? Value.a; set => a = value; } + [SerializeField] private FloatCollector rCollector = default; + [SerializeField] private FloatCollector gCollector = default; + [SerializeField] private FloatCollector bCollector = default; + [SerializeField] private FloatCollector aCollector = default; - [SerializeField] private PublishFloatEvent publisherR = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherG = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherB = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherA = new PublishFloatEvent(); + private FloatCollector RCollector => rCollector; + private FloatCollector GCollector => gCollector; + private FloatCollector BCollector => bCollector; + private FloatCollector ACollector => aCollector; - [ValuePublisher("R")] private UnityEvent PublisherR => publisherR; - [ValuePublisher("G")] private UnityEvent PublisherG => publisherG; - [ValuePublisher("B")] private UnityEvent PublisherB => publisherB; - [ValuePublisher("A")] private UnityEvent PublisherA => publisherA; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(RCollector, x => Value = new Color(x, Value.g, Value.b, Value.a), "R"), + new CollectableMessageAnnotation(GCollector, x => Value = new Color(Value.r, x, Value.b, Value.a), "G"), + new CollectableMessageAnnotation(BCollector, x => Value = new Color(Value.r, Value.g, x, Value.a), "B"), + new CollectableMessageAnnotation(ACollector, x => Value = new Color(Value.r, Value.g, Value.b, x), "A"), + }; - Color IValueCombiner.Combine() - { - return new Color(R, G, B, A); - } - - void IValueExtractor.Extract(Color value) - { - PublisherR.Invoke(value.r); - PublisherG.Invoke(value.g); - PublisherB.Invoke(value.b); - PublisherA.Invoke(value.a); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index 0437177..c65c2e4 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] - public class FloatProvider : ProviderBase + public class FloatProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index b4cfda4..4d18123 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] - public class GameObjectProvider : ProviderBase + public class GameObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 83ea4d7..88092a1 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] - public class IntProvider : ProviderBase + public class IntProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index 816d10a..c1857c4 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] - public class ObjectProvider : ProviderBase + public class ObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 61fdbe4..673b8ab 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -2,16 +2,11 @@ using UniFlow.Attribute; using UniRx; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { - public abstract class ProviderBase : ConnectorBase, IInjectable - where TPublishEvent : UnityEvent, new() + public abstract class ProviderBase : ConnectorBase, IInjectable { - [SerializeField] private TPublishEvent publisher = new TPublishEvent(); - [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; - [SerializeField] private TValue value = default; [ValueReceiver] public TValue Value { diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 49bc0cc..e3877b2 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using UniFlow.Attribute; using UnityEngine; using UnityEngine.Events; @@ -5,45 +6,35 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] - public class QuaternionProvider : ProviderBase, IValueCombiner, IValueExtractor + public class QuaternionProvider : ProviderBase, IMessageCollectable, IMessageComposable { - private float? x; - private float? y; - private float? z; - private float? w; - private Vector3? eulerAngle; - [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } - [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } - [ValueReceiver] private float Z { get => z ?? Value.z; set => z = value; } - [ValueReceiver] private float W { get => w ?? Value.w; set => w = value; } - // Should split class to QuaternionEulerProvider? - [ValueReceiver] private Vector3 EulerAngle { get => eulerAngle ?? Value.eulerAngles; set => eulerAngle = value; } + [SerializeField] private FloatCollector xCollector = default; + [SerializeField] private FloatCollector yCollector = default; + [SerializeField] private FloatCollector zCollector = default; + [SerializeField] private FloatCollector wCollector = default; + [SerializeField] private Vector3Collector eulerAngleCollector = default; - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); - [SerializeField] private PublishVector3Event publisherEulerAngle = new PublishVector3Event(); + private FloatCollector XCollector => xCollector; + private FloatCollector YCollector => yCollector; + private FloatCollector ZCollector => zCollector; + private FloatCollector WCollector => wCollector; + private Vector3Collector EulerAngleCollector => eulerAngleCollector; - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; - [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; - // Should split class to QuaternionEulerProvider? - [ValuePublisher("EulerAngle")] private UnityEvent PublisherEulerAngle => publisherEulerAngle; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(XCollector, v => Value = new Quaternion(v, Value.y, Value.z, Value.w), "X"), + new CollectableMessageAnnotation(YCollector, v => Value = new Quaternion(Value.x, v, Value.z, Value.w), "Y"), + new CollectableMessageAnnotation(ZCollector, v => Value = new Quaternion(Value.x, Value.y, v, Value.w), "Z"), + new CollectableMessageAnnotation(WCollector, v => Value = new Quaternion(Value.x, Value.y, Value.z, v), "W"), + new CollectableMessageAnnotation(EulerAngleCollector, v => Value = Quaternion.Euler(v), "EulerAngle"), + }; - Quaternion IValueCombiner.Combine() - { - return eulerAngle != null ? Quaternion.Euler(EulerAngle) : new Quaternion(X, Y, Z, W); - } - - void IValueExtractor.Extract(Quaternion value) - { - PublisherEulerAngle.Invoke(value.eulerAngles); - PublisherX.Invoke(value.x); - PublisherY.Invoke(value.y); - PublisherZ.Invoke(value.z); - PublisherW.Invoke(value.w); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Value), + new ComposableMessageAnnotation(() => Value.eulerAngles), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs index 7fea1f7..f6c6bf4 100644 --- a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatform", (int) ConnectorType.ValueProviderRuntimePlatform)] - public class RuntimePlatformProvider : ProviderBase + public class RuntimePlatformProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index 9b2ef3b..7e88b67 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] - public class ScriptableObjectProvider : ProviderBase + public class ScriptableObjectProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 1d10969..3e5d41c 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -2,17 +2,15 @@ using System.Collections.Generic; using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; using UnityEngine.EventSystems; // ReSharper disable ConvertIfStatementToReturnStatement namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase, + public abstract class SelectorBase : ProviderBase, IMessageCollectable, IMessageComposable - where TPublishEvent : UnityEvent, new() where TKeyCollector : ValueCollectorBase, new() { [SerializeField] private List keys = new List(); @@ -39,21 +37,20 @@ IEnumerable IMessageCollectable.GetMessageCollect }; } - public abstract class GameObjectSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() + public abstract class GameObjectSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } - public abstract class MonoBehaviourSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() + public abstract class MonoBehaviourSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } - public abstract class UIBehaviourSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() + public abstract class UIBehaviourSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } - public abstract class EnumSelectorBase : SelectorBase + public abstract class EnumSelectorBase : SelectorBase where TEnum : Enum - where TPublishEvent : UnityEvent, new() where TKeyCollector : ValueCollectorBase, new() { } diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 32dab50..7c22308 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] - public class StringProvider : ProviderBase + public class StringProvider : ProviderBase { } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index c7bcc6f..16fb92b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -1,32 +1,28 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] - public class Vector2IntProvider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector2IntProvider : ProviderBase, IMessageCollectable, IMessageComposable { - private int? x; - private int? y; - [ValueReceiver] private int X { get => x ?? Value.x; set => x = value; } - [ValueReceiver] private int Y { get => y ?? Value.y; set => y = value; } + [SerializeField] private IntCollector xCollector = default; + [SerializeField] private IntCollector yCollector = default; - [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); - [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); + private IntCollector XCollector => xCollector; + private IntCollector YCollector => yCollector; - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(XCollector, v => Value = new Vector2Int(v, Value.y), "X"), + new CollectableMessageAnnotation(YCollector, v => Value = new Vector2Int(Value.x, v), "Y"), + }; - Vector2Int IValueCombiner.Combine() - { - return new Vector2Int(X, Y); - } - - void IValueExtractor.Extract(Vector2Int value) - { - PublisherX.Invoke(value.x); - PublisherY.Invoke(value.y); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index 7d36f5c..b559725 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -1,32 +1,28 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] - public class Vector2Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector2Provider : ProviderBase, IMessageCollectable, IMessageComposable { - private float? x; - private float? y; - [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } - [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } + [SerializeField] private FloatCollector xCollector = default; + [SerializeField] private FloatCollector yCollector = default; - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); + private FloatCollector XCollector => xCollector; + private FloatCollector YCollector => yCollector; - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(XCollector, v => Value = new Vector2(v, Value.y), "X"), + new CollectableMessageAnnotation(YCollector, v => Value = new Vector2(Value.x, v), "Y"), + }; - Vector2 IValueCombiner.Combine() - { - return new Vector2(X, Y); - } - - void IValueExtractor.Extract(Vector2 value) - { - PublisherX.Invoke(value.x); - PublisherY.Invoke(value.y); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index c203c19..b9c2c6b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -1,37 +1,31 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] - public class Vector3IntProvider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector3IntProvider : ProviderBase, IMessageCollectable, IMessageComposable { - private int? x; - private int? y; - private int? z; - [ValueReceiver] private int X { get => x ?? Value.x; set => x = value; } - [ValueReceiver] private int Y { get => y ?? Value.y; set => y = value; } - [ValueReceiver] private int Z { get => z ?? Value.z; set => z = value; } + [SerializeField] private IntCollector xCollector = default; + [SerializeField] private IntCollector yCollector = default; + [SerializeField] private IntCollector zCollector = default; - [SerializeField] private PublishIntEvent publisherX = new PublishIntEvent(); - [SerializeField] private PublishIntEvent publisherY = new PublishIntEvent(); - [SerializeField] private PublishIntEvent publisherZ = new PublishIntEvent(); + private IntCollector XCollector => xCollector; + private IntCollector YCollector => yCollector; + private IntCollector ZCollector => zCollector; - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(XCollector, v => Value = new Vector3Int(v, Value.y, Value.z), "X"), + new CollectableMessageAnnotation(YCollector, v => Value = new Vector3Int(Value.x, v, Value.z), "Y"), + new CollectableMessageAnnotation(ZCollector, v => Value = new Vector3Int(Value.x, Value.y, v), "Z"), + }; - Vector3Int IValueCombiner.Combine() - { - return new Vector3Int(X, Y, Z); - } - - void IValueExtractor.Extract(Vector3Int value) - { - PublisherX.Invoke(value.x); - PublisherY.Invoke(value.y); - PublisherZ.Invoke(value.z); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index b579e62..a2d264a 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -1,37 +1,31 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] - public class Vector3Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector3Provider : ProviderBase, IMessageCollectable, IMessageComposable { - private float? x; - private float? y; - private float? z; - [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } - [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } - [ValueReceiver] private float Z { get => z ?? Value.z; set => z = value; } + [SerializeField] private FloatCollector xCollector = default; + [SerializeField] private FloatCollector yCollector = default; + [SerializeField] private FloatCollector zCollector = default; - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); + private FloatCollector XCollector => xCollector; + private FloatCollector YCollector => yCollector; + private FloatCollector ZCollector => zCollector; - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(XCollector, v => Value = new Vector3(v, Value.y, Value.z), "X"), + new CollectableMessageAnnotation(YCollector, v => Value = new Vector3(Value.x, v, Value.z), "Y"), + new CollectableMessageAnnotation(ZCollector, v => Value = new Vector3(Value.x, Value.y, v), "Z"), + }; - Vector3 IValueCombiner.Combine() - { - return new Vector3(X, Y, Z); - } - - void IValueExtractor.Extract(Vector3 value) - { - PublisherX.Invoke(value.x); - PublisherY.Invoke(value.y); - PublisherZ.Invoke(value.z); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index db33765..aa27317 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -1,42 +1,34 @@ -using UniFlow.Attribute; +using System.Collections.Generic; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] - public class Vector4Provider : ProviderBase, IValueCombiner, IValueExtractor + public class Vector4Provider : ProviderBase, IMessageCollectable, IMessageComposable { - private float? x; - private float? y; - private float? z; - private float? w; - [ValueReceiver] private float X { get => x ?? Value.x; set => x = value; } - [ValueReceiver] private float Y { get => y ?? Value.y; set => y = value; } - [ValueReceiver] private float Z { get => z ?? Value.z; set => z = value; } - [ValueReceiver] private float W { get => w ?? Value.w; set => w = value; } + [SerializeField] private FloatCollector xCollector = default; + [SerializeField] private FloatCollector yCollector = default; + [SerializeField] private FloatCollector zCollector = default; + [SerializeField] private FloatCollector wCollector = default; - [SerializeField] private PublishFloatEvent publisherX = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherY = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherZ = new PublishFloatEvent(); - [SerializeField] private PublishFloatEvent publisherW = new PublishFloatEvent(); + private FloatCollector XCollector => xCollector; + private FloatCollector YCollector => yCollector; + private FloatCollector ZCollector => zCollector; + private FloatCollector WCollector => wCollector; - [ValuePublisher("X")] private UnityEvent PublisherX => publisherX; - [ValuePublisher("Y")] private UnityEvent PublisherY => publisherY; - [ValuePublisher("Z")] private UnityEvent PublisherZ => publisherZ; - [ValuePublisher("W")] private UnityEvent PublisherW => publisherW; + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(XCollector, v => Value = new Vector4(v, Value.y, Value.z, Value.w), "X"), + new CollectableMessageAnnotation(YCollector, v => Value = new Vector4(Value.x, v, Value.z, Value.w), "Y"), + new CollectableMessageAnnotation(ZCollector, v => Value = new Vector4(Value.x, Value.y, v, Value.w), "Z"), + new CollectableMessageAnnotation(WCollector, v => Value = new Vector4(Value.x, Value.y, Value.z, v), "W"), + }; - Vector4 IValueCombiner.Combine() - { - return new Vector4(X, Y, Z, W); - } - - void IValueExtractor.Extract(Vector4 value) - { - PublisherX.Invoke(value.x); - PublisherY.Invoke(value.y); - PublisherZ.Invoke(value.z); - PublisherW.Invoke(value.w); - } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new IComposableMessageAnnotation[] + { + new ComposableMessageAnnotation(() => Value), + }; } } diff --git a/Assets/Scripts/IValueCombiner.cs b/Assets/Scripts/IValueCombiner.cs deleted file mode 100644 index ca21880..0000000 --- a/Assets/Scripts/IValueCombiner.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow -{ - public interface IValueCombiner - { - TValue Combine(); - } -} diff --git a/Assets/Scripts/IValueCombiner.cs.meta b/Assets/Scripts/IValueCombiner.cs.meta deleted file mode 100644 index 91307c8..0000000 --- a/Assets/Scripts/IValueCombiner.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: e22933c7cd404f4383b327a440d86bdc -timeCreated: 1570805373 \ No newline at end of file diff --git a/Assets/Scripts/IValueExtractor.cs b/Assets/Scripts/IValueExtractor.cs deleted file mode 100644 index 8ffc2e8..0000000 --- a/Assets/Scripts/IValueExtractor.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow -{ - public interface IValueExtractor - { - void Extract(TValue value); - } -} diff --git a/Assets/Scripts/IValueExtractor.cs.meta b/Assets/Scripts/IValueExtractor.cs.meta deleted file mode 100644 index 0860897..0000000 --- a/Assets/Scripts/IValueExtractor.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cf291b91dfbb46e6afc635747a60636d -timeCreated: 1570803663 \ No newline at end of file diff --git a/Assets/Scripts/PublishValueEvent.cs b/Assets/Scripts/PublishValueEvent.cs deleted file mode 100644 index 24db0d6..0000000 --- a/Assets/Scripts/PublishValueEvent.cs +++ /dev/null @@ -1,225 +0,0 @@ -using System; -using UniRx; -using UnityEngine; -using UnityEngine.Events; -using UnityEngine.EventSystems; -using UnityEngine.Playables; -using UnityEngine.Timeline; -using Object = UnityEngine.Object; - -namespace UniFlow -{ - #region primitives - - [Serializable] - public class PublishBoolEvent : UnityEvent - { - } - - [Serializable] - public class PublishByteEvent : UnityEvent - { - } - - [Serializable] - public class PublishIntEvent : UnityEvent - { - } - - [Serializable] - public class PublishFloatEvent : UnityEvent - { - } - - [Serializable] - public class PublishStringEvent : UnityEvent - { - } - - #endregion - - #region UnityEngine.Object - - [Serializable] - public class PublishObjectEvent : UnityEvent - { - } - - [Serializable] - public class PublishGameObjectEvent : UnityEvent - { - } - - [Serializable] - public class PublishScriptableObjectEvent : UnityEvent - { - } - - #endregion - - #region assets - - [Serializable] - public class PublishTextureEvent : UnityEvent - { - } - - [Serializable] - public class PublishTexture2DEvent : UnityEvent - { - } - - [Serializable] - public class PublishTexture3DEvent : UnityEvent - { - } - - [Serializable] - public class PublishSpriteEvent : UnityEvent - { - } - - [Serializable] - public class PublishAnimationClipEvent : UnityEvent - { - } - - [Serializable] - public class PublishAudioClipEvent : UnityEvent - { - } - - [Serializable] - public class PublishTimelineAssetEvent : UnityEvent - { - } - - #endregion - - #region components - - [Serializable] - public class PublishComponentEvent : UnityEvent - { - } - - [Serializable] - public class PublishMonoBehaviourEvent : UnityEvent - { - } - - [Serializable] - public class PublishUIBehaviourEvent : UnityEvent - { - } - - [Serializable] - public class PublishTransformEvent : UnityEvent - { - } - - [Serializable] - public class PublishRectTransformEvent : UnityEvent - { - } - - [Serializable] - public class PublishAnimatorEvent : UnityEvent - { - } - - [Serializable] - public class PublishSimpleAnimationEvent : UnityEvent - { - } - - [Serializable] - public class PublishAudioSourceEvent : UnityEvent - { - } - - [Serializable] - public class PublishPlayableDirectorEvent : UnityEvent - { - } - - #endregion - - #region structs - - [Serializable] - public class PublishVector2Event : UnityEvent - { - } - - [Serializable] - public class PublishVector3Event : UnityEvent - { - } - - [Serializable] - public class PublishVector4Event : UnityEvent - { - } - - [Serializable] - public class PublishQuaternionEvent : UnityEvent - { - } - - [Serializable] - public class PublishVector2IntEvent : UnityEvent - { - } - - [Serializable] - public class PublishVector3IntEvent : UnityEvent - { - } - - [Serializable] - public class PublishColorEvent : UnityEvent - { - } - - [Serializable] - public class PublishColor32Event : UnityEvent - { - } - - #endregion - - #region classes - - [Serializable] - public class PublishAnimationEventEvent : UnityEvent - { - } - - #endregion - - #region enums - // If you can register a method that casts from int to enum, this region is unnecessary. - - [Serializable] - public class PublishAnimatorCullingModeEvent : UnityEvent - { - } - - [Serializable] - public class PublishAnimatorUpdateModeEvent : UnityEvent - { - } - - [Serializable] - public class PublishObservableTweenEaseTypeEvent : UnityEvent - { - } - - [Serializable] - public class PublishRuntimePlatformEvent : UnityEvent - { - } - - #endregion -} diff --git a/Assets/Scripts/PublishValueEvent.cs.meta b/Assets/Scripts/PublishValueEvent.cs.meta deleted file mode 100644 index 28c9daf..0000000 --- a/Assets/Scripts/PublishValueEvent.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f00df9e057254dd38a2b9a28780cfdf5 -timeCreated: 1569330168 \ No newline at end of file diff --git a/Assets/Scripts/ValueCollector.cs b/Assets/Scripts/ValueCollectors.cs similarity index 100% rename from Assets/Scripts/ValueCollector.cs rename to Assets/Scripts/ValueCollectors.cs diff --git a/Assets/Scripts/ValueCollector.cs.meta b/Assets/Scripts/ValueCollectors.cs.meta similarity index 100% rename from Assets/Scripts/ValueCollector.cs.meta rename to Assets/Scripts/ValueCollectors.cs.meta From a0fa726b1021aa198a081c2cf326729599409688 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 02:15:27 +0900 Subject: [PATCH 327/453] :fire: Remove ValueReceiver/ValuePublisher --- Assets/Editor/Scripts/ConnectorInfo.cs | 81 +--------- Assets/Editor/Scripts/FlowEdge.cs | 3 - Assets/Editor/Scripts/FlowGraphView.cs | 144 ++++-------------- Assets/Editor/Scripts/FlowNode.cs | 66 +------- Assets/Editor/Scripts/FlowValuePublishPort.cs | 95 ------------ .../Scripts/FlowValuePublishPort.cs.meta | 3 - Assets/Editor/Scripts/FlowValueReceivePort.cs | 32 ---- .../Scripts/FlowValueReceivePort.cs.meta | 3 - .../ValueInjectionConnectorListener.cs | 46 ------ .../ValueInjectionConnectorListener.cs.meta | 3 - Assets/Scripts/Attribute.meta | 3 - .../Attribute/ValuePublisherAttribute.cs | 22 --- .../Attribute/ValuePublisherAttribute.cs.meta | 3 - .../Attribute/ValueReceiverAttribute.cs | 22 --- .../Attribute/ValueReceiverAttribute.cs.meta | 3 - .../Controller/ActivationController.cs | 17 +-- .../Connector/Controller/AnimatorTrigger.cs | 13 +- .../Connector/Controller/AudioController.cs | 20 +-- .../Controller/InstantiateGameObject.cs | 7 +- .../Controller/MoveParentTransform.cs | 7 +- .../Controller/PlayableController.cs | 24 +-- .../Controller/SimpleAnimationController.cs | 34 ++--- .../Controller/TimeScaleController.cs | 26 +++- .../Controller/TransformSiblingController.cs | 20 ++- .../Scripts/Connector/Event/AnimationEvent.cs | 52 ++++--- Assets/Scripts/Connector/Event/AudioEvent.cs | 42 +++-- Assets/Scripts/Connector/Event/CameraEvent.cs | 22 +-- .../Scripts/Connector/Event/LifecycleEvent.cs | 14 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 23 +-- .../Scripts/Connector/Event/ParticleEvent.cs | 23 +-- .../Event/PhysicsCollision2DEvent.cs | 23 +-- .../Connector/Event/PhysicsCollisionEvent.cs | 27 ++-- .../Connector/Event/PhysicsTrigger2DEvent.cs | 27 ++-- .../Connector/Event/PhysicsTriggerEvent.cs | 23 +-- .../Connector/Event/RectTransformEvent.cs | 23 +-- .../Connector/Event/SimpleAnimationEvent.cs | 47 ++++-- .../Scripts/Connector/Event/TimelineEvent.cs | 42 +++-- .../Scripts/Connector/Event/TransformEvent.cs | 23 +-- .../Event/UIBehaviourEventTrigger.cs | 50 ++++-- Assets/Scripts/Connector/Expression/And.cs | 15 +- Assets/Scripts/Connector/Expression/Not.cs | 15 +- Assets/Scripts/Connector/Expression/Or.cs | 15 +- Assets/Scripts/Connector/Expression/Xor.cs | 21 ++- Assets/Scripts/Connector/Misc/Toss.cs | 16 +- .../SignalPublisher/StringSignalPublisher.cs | 43 +++--- .../Scripts/Connector/SignalPublisherBase.cs | 6 +- .../SignalReceiver/StringSignalReceiver.cs | 5 +- .../Scripts/Connector/SignalReceiverBase.cs | 4 +- .../Connector/ValueComparer/ComparerBase.cs | 9 +- .../Connector/ValueInjector/ImageInjector.cs | 11 +- .../ValueInjector/RawImageInjector.cs | 11 +- .../Timeline/AnimationTrackInjector.cs | 15 +- .../Timeline/AudioTrackInjector.cs | 15 +- .../Timeline/ControlTrackInjector.cs | 17 +-- .../ValueInjector/TimelineInjectorBase.cs | 6 +- .../ValueProvider/ListProviderBase.cs | 14 +- .../Connector/ValueProvider/ProviderBase.cs | 3 +- .../ValueProvider/QuaternionProvider.cs | 2 - .../Connector/ValueProvider/SelectorBase.cs | 3 +- Assets/Scripts/ValueCollectors.cs | 5 + 60 files changed, 542 insertions(+), 867 deletions(-) delete mode 100644 Assets/Editor/Scripts/FlowValuePublishPort.cs delete mode 100644 Assets/Editor/Scripts/FlowValuePublishPort.cs.meta delete mode 100644 Assets/Editor/Scripts/FlowValueReceivePort.cs delete mode 100644 Assets/Editor/Scripts/FlowValueReceivePort.cs.meta delete mode 100644 Assets/Editor/Scripts/ValueInjectionConnectorListener.cs delete mode 100644 Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta delete mode 100644 Assets/Scripts/Attribute.meta delete mode 100644 Assets/Scripts/Attribute/ValuePublisherAttribute.cs delete mode 100644 Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta delete mode 100644 Assets/Scripts/Attribute/ValueReceiverAttribute.cs delete mode 100644 Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta diff --git a/Assets/Editor/Scripts/ConnectorInfo.cs b/Assets/Editor/Scripts/ConnectorInfo.cs index b8f4142..e8496ac 100644 --- a/Assets/Editor/Scripts/ConnectorInfo.cs +++ b/Assets/Editor/Scripts/ConnectorInfo.cs @@ -3,9 +3,7 @@ using System.Linq; using System.Reflection; using JetBrains.Annotations; -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Editor { @@ -18,8 +16,6 @@ private ConnectorInfo( Type type, string name, IEnumerable parameters, - IEnumerable valuePublishers, - IEnumerable valueReceivers, IEnumerable composableMessageAnnotations, IEnumerable collectableMessageAnnotations ) @@ -29,8 +25,6 @@ IEnumerable collectableMessageAnnotations Type = type; Name = name; parameterList = parameters.ToList(); - ValuePublishers = valuePublishers; - ValueReceivers = valueReceivers; ComposableMessageAnnotations = composableMessageAnnotations; CollectableMessageAnnotations = collectableMessageAnnotations; } @@ -41,10 +35,8 @@ IEnumerable collectableMessageAnnotations public string Name { get; } [SerializeField] private List parameterList = default; public IEnumerable ParameterList => parameterList; - public IEnumerable ValuePublishers { get; } - public IEnumerable ValueReceivers { get; } - public IEnumerable ComposableMessageAnnotations { get; set; } - public IEnumerable CollectableMessageAnnotations { get; set; } + public IEnumerable ComposableMessageAnnotations { get; private set; } + public IEnumerable CollectableMessageAnnotations { get; private set; } public void ApplyParameter(Parameter parameter) { @@ -119,13 +111,6 @@ public static ConnectorInfo Create(Type type, IConnector instance) type.GetFieldsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => (x.GetCustomAttribute() != null || x.IsPublic) && x.GetCustomAttribute() == null) .Select(x => Parameter.Create(x.FieldType, x.Name, instance != default ? x.GetValue(instance) : default)), - type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Where(x => typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) - .Where(x => x.GetCustomAttribute() != null) - .Select(ValuePublisherInfo.Create), - type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Where(x => x.GetCustomAttribute() != null) - .Select(ValueReceiverInfo.Create), typeof(IMessageComposable).IsAssignableFrom(type) && instance != null ? ((IMessageComposable) instance).GetMessageComposableAnnotations() : new IComposableMessageAnnotation[0], @@ -142,13 +127,11 @@ public static ConnectorInfo Create( Type type, string name, IEnumerable parameters, - IEnumerable valuePublishers, - IEnumerable valueReceivers, IEnumerable composableMessageAnnotations, IEnumerable collectableMessageAnnotations ) { - return new ConnectorInfo(gameObject, instance, type, name, parameters, valuePublishers, valueReceivers, composableMessageAnnotations, collectableMessageAnnotations); + return new ConnectorInfo(gameObject, instance, type, name, parameters, composableMessageAnnotations, collectableMessageAnnotations); } [Serializable] @@ -176,63 +159,5 @@ public static Parameter Create(Type type, string name, object value) return new Parameter(type, name, value); } } - - public class ValuePublisherInfo - { - private ValuePublisherInfo(PropertyInfo propertyInfo) - { - var attribute = propertyInfo.GetCustomAttribute(); - Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; - Type = GetGenericType(propertyInfo.PropertyType); - PropertyInfo = propertyInfo; - } - - public string Name { get; } - public Type Type { get; } - public PropertyInfo PropertyInfo { get; } - - public static ValuePublisherInfo Create(PropertyInfo propertyInfo) - { - return new ValuePublisherInfo(propertyInfo); - } - - private static Type GetGenericType(Type type) - { - while (true) - { - if (type == default) - { - return default; - } - - if (type.IsGenericType) - { - return type.GetGenericArguments().First(); - } - - type = type.BaseType; - } - } - } - - public class ValueReceiverInfo - { - private ValueReceiverInfo(PropertyInfo propertyInfo) - { - var attribute = propertyInfo.GetCustomAttribute(); - Name = string.IsNullOrEmpty(attribute.Name) ? propertyInfo.Name : attribute.Name; - Type = propertyInfo.PropertyType; - PropertyInfo = propertyInfo; - } - - public string Name { get; } - public Type Type { get; } - public PropertyInfo PropertyInfo { get; } - - public static ValueReceiverInfo Create(PropertyInfo propertyInfo) - { - return new ValueReceiverInfo(propertyInfo); - } - } } } diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs index 4d7bb08..d3d7883 100644 --- a/Assets/Editor/Scripts/FlowEdge.cs +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -19,9 +19,6 @@ void IRemovableElement.RemoveFromGraphView() case FlowPort _: outputNode.ApplyTargetConnectors(); break; - case FlowValuePublishPort _: - outputNode.ApplyValuePublishers(); - break; } switch (input) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 1320ccd..4c88439 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -2,11 +2,9 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using UniFlow.Attribute; using UnityEditor; using UnityEditor.Experimental.GraphView; using UnityEngine; -using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.UIElements; @@ -21,7 +19,6 @@ public class FlowGraphView : GraphView private IDictionary NormalizedPositionDictionary { get; } = new Dictionary(); private SearchWindowProvider SearchWindowProvider { get; set; } private EdgeConnectorListener EdgeConnectorListener { get; set; } - private ValueInjectionConnectorListener ValueInjectionConnectorListener { get; set; } private MessageConnectorListener MessageConnectorListener { get; set; } private const float NodeWidth = 300.0f; @@ -47,7 +44,6 @@ public void Initialize() SearchWindowProvider = ScriptableObject.CreateInstance(); SearchWindowProvider.Initialize(this); EdgeConnectorListener = new EdgeConnectorListener(this, SearchWindowProvider); - ValueInjectionConnectorListener = new ValueInjectionConnectorListener(this); MessageConnectorListener = new MessageConnectorListener(this); viewTransformChanged += graphView => @@ -102,12 +98,6 @@ public void Initialize() CreateMessageConnectorEdges(); -#region Will be removed - - CreateValueInjectionEdges(); - -#endregion - RegisterCallback( (GeometryChangedEvent e) => { @@ -340,48 +330,11 @@ private void CreateMessageConnectorEdges() } } -#region Will be removed - - private void CreateValueInjectionEdges() - { - foreach (var connector in Connectors) - { - var persistentEventsList = connector.GetType() - .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy) - .Where(x => x.GetCustomAttribute() != null && typeof(UnityEventBase).IsAssignableFrom(x.PropertyType)) - .Select(x => (propertyInfo: x, unityEvent: x.GetValue(connector) as UnityEventBase)) - .Where(x => x.unityEvent != null) - .Select(x => Enumerable.Range(0, x.unityEvent.GetPersistentEventCount()).Select(index => (x.propertyInfo, target: x.unityEvent.GetPersistentTarget(index), methodName: x.unityEvent.GetPersistentMethodName(index)))) - .ToArray(); - foreach (var persistentEvents in persistentEventsList) - { - foreach (var (propertyInfo, target, methodName) in persistentEvents) - { - if (!(target is IConnector targetConnector) || !RenderedNodes.ContainsKey(targetConnector) || !RenderedNodes.ContainsKey(connector)) - { - continue; - } - - var publisherNode = RenderedNodes[connector]; - var receiverNode = RenderedNodes[targetConnector]; - var publisherPort = publisherNode.ValuePublishPorts.FirstOrDefault(x => x.ValuePublisherInfo.PropertyInfo == propertyInfo); - var receiverPort = receiverNode.ValueReceivePorts.FirstOrDefault(x => x.ValueReceiverInfo.PropertyInfo.GetSetMethod(true).Name == methodName); - if (publisherPort != null && receiverPort != null) - { - AddEdge(publisherPort, receiverPort); - } - } - } - } - } - -#endregion - public FlowNode AddNode(Type connectableType, IConnector connectableInstance, Vector2 position) { var connectableInfo = ConnectorInfo.Create(connectableType, connectableInstance); FlowEditorWindow.Window.ConnectableInfoList.Add(connectableInfo); - var node = new FlowNode(connectableInfo, EdgeConnectorListener, ValueInjectionConnectorListener, MessageConnectorListener); + var node = new FlowNode(connectableInfo, EdgeConnectorListener, MessageConnectorListener); node.Initialize(); node.SetPosition(new Rect(position.x, position.y, 0, 0)); AddElement(node); @@ -403,72 +356,39 @@ public FlowEdge AddEdge(Port outputPort, Port inputPort) public override List GetCompatiblePorts(Port startPort, NodeAdapter nodeAdapter) { - if (startPort is FlowValuePublishPort startFlowValuePublishPort) - { - return ports - .ToList() - .Where( - x => - x is FlowValueReceivePort flowValueReceivePort - && ( - flowValueReceivePort.ValueReceiverInfo.Type.IsAssignableFrom(startFlowValuePublishPort.ValuePublisherInfo.Type) - || typeof(ScriptableObject).IsAssignableFrom(startFlowValuePublishPort.ValuePublisherInfo.Type) && typeof(ScriptableObject).IsAssignableFrom(flowValueReceivePort.ValueReceiverInfo.Type) - ) - && x.direction != startPort.direction - && x.node != startPort.node - ) - .ToList(); - } - - if (startPort is FlowValueReceivePort startFlowValueReceivePort) - { - return ports - .ToList() - .Where( - x => - x is FlowValuePublishPort flowValuePublishPort - && startFlowValueReceivePort.ValueReceiverInfo.Type.IsAssignableFrom(flowValuePublishPort.ValuePublisherInfo.Type) - && x.direction != startPort.direction - && x.node != startPort.node - ) - .ToList(); - } - - if (startPort is FlowMessageComposePort startFlowMessageComposePort) + switch (startPort) { - return ports - .ToList() - .Where( - x => - x is FlowMessageCollectPort flowMessageCollectPort - && ( - flowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) - || typeof(ScriptableObject).IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) && typeof(ScriptableObject).IsAssignableFrom(flowMessageCollectPort.CollectableMessageAnnotation.Type) - ) - && x.direction != startPort.direction - && x.node != startPort.node - ) - .ToList(); - } - - if (startPort is FlowMessageCollectPort startFlowMessageCollectPort) - { - return ports - .ToList() - .Where( - x => - x is FlowMessageComposePort flowMessageComposePort - && startFlowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(flowMessageComposePort.ComposableMessageAnnotation.Type) - && x.direction != startPort.direction - && x.node != startPort.node - ) - .ToList(); + case FlowMessageComposePort startFlowMessageComposePort: + return ports + .ToList() + .Where( + x => + x is FlowMessageCollectPort flowMessageCollectPort + && ( + flowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) + || typeof(ScriptableObject).IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) && typeof(ScriptableObject).IsAssignableFrom(flowMessageCollectPort.CollectableMessageAnnotation.Type) + ) + && x.direction != startPort.direction + && x.node != startPort.node + ) + .ToList(); + case FlowMessageCollectPort startFlowMessageCollectPort: + return ports + .ToList() + .Where( + x => + x is FlowMessageComposePort flowMessageComposePort + && startFlowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(flowMessageComposePort.ComposableMessageAnnotation.Type) + && x.direction != startPort.direction + && x.node != startPort.node + ) + .ToList(); + default: + return ports + .ToList() + .Where(x => x is FlowPort && x.direction != startPort.direction && x.node != startPort.node) + .ToList(); } - - return ports - .ToList() - .Where(x => x is FlowPort && x.direction != startPort.direction && x.node != startPort.node) - .ToList(); } } } diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 3f0be70..3eaf7b3 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -5,11 +5,9 @@ using System.Text.RegularExpressions; using UniRx; using UnityEditor; -using UnityEditor.Events; using UnityEditor.Experimental.GraphView; using UnityEditor.UIElements; using UnityEngine; -using UnityEngine.Events; using UnityEngine.UIElements; using Object = UnityEngine.Object; @@ -17,11 +15,10 @@ namespace UniFlow.Editor { public class FlowNode : Node, IRemovableElement { - public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener, ValueInjectionConnectorListener valueInjectionConnectorListener, IEdgeConnectorListener messageConnectorListener) + public FlowNode(ConnectorInfo connectorInfo, IEdgeConnectorListener edgeConnectorListener, IEdgeConnectorListener messageConnectorListener) { ConnectorInfo = connectorInfo; EdgeConnectorListener = edgeConnectorListener; - ValueInjectionConnectorListener = valueInjectionConnectorListener; MessageConnectorListener = messageConnectorListener; } @@ -70,15 +67,12 @@ public void Initialize() public Port InputPort { get; private set; } public Port OutputPort { get; private set; } - public IList ValueReceivePorts { get; } = new List(); - public IList ValuePublishPorts { get; } = new List(); public IList MessageComposePorts { get; } = new List(); public IList MessageCollectPorts { get; } = new List(); internal ConnectorInfo ConnectorInfo { get; } private IEdgeConnectorListener EdgeConnectorListener { get; } - private IEdgeConnectorListener ValueInjectionConnectorListener { get; } private IEdgeConnectorListener MessageConnectorListener { get; } private const string DefaultTargetGameObjectName = "UniFlowController"; @@ -161,30 +155,6 @@ public void ApplyTargetConnectors() EditorUtility.SetDirty(connector); } - public void ApplyValuePublishers() - { - foreach (var valuePublishPort in ValuePublishPorts) - { - if (!(valuePublishPort.ValuePublisherInfo.PropertyInfo.GetValue(ConnectorInfo.Connector) is UnityEventBase unityEvent)) - { - continue; - } - // Preserve count before remove item from list - var count = unityEvent.GetPersistentEventCount(); - for (var i = 0; i < count; i++) - { - // Rebuild index every time, so remove first element - UnityEventTools.RemovePersistentListener(unityEvent, 0); - } - valuePublishPort - .connections - .Select(x => x.input as FlowValueReceivePort) - .Where(x => x?.node != default) - .ToList() - .ForEach(valuePublishPort.AddPersistentListener); - } - } - private void AddParameters() { var contentsElement = this.Q("contents"); @@ -394,40 +364,6 @@ private void AddPorts() InputPort.portName = "In"; inputContainer.Add(InputPort); -#region Will be removed - - if (ConnectorInfo.ValuePublishers.Any()) - { - var divider = new VisualElement {name = "divider"}; - divider.AddToClassList("horizontal"); - outputContainer.Add(divider); - - foreach (var publisher in ConnectorInfo.ValuePublishers) - { - var port = FlowValuePublishPort.Create(Orientation.Horizontal, Direction.Output, Port.Capacity.Multi, publisher, ValueInjectionConnectorListener); - port.portName = publisher.Name; - outputContainer.Add(port); - ValuePublishPorts.Add(port as FlowValuePublishPort); - } - } - - if (ConnectorInfo.ValueReceivers.Any()) - { - var divider = new VisualElement {name = "divider"}; - divider.AddToClassList("horizontal"); - inputContainer.Add(divider); - - foreach (var receiver in ConnectorInfo.ValueReceivers) - { - var port = FlowValueReceivePort.Create(Orientation.Horizontal, Direction.Input, Port.Capacity.Multi, receiver, ValueInjectionConnectorListener); - port.portName = receiver.Name; - inputContainer.Add(port); - ValueReceivePorts.Add(port as FlowValueReceivePort); - } - } - -#endregion - if (ConnectorInfo.ComposableMessageAnnotations.Any()) { var divider = new VisualElement {name = "divider"}; diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs b/Assets/Editor/Scripts/FlowValuePublishPort.cs deleted file mode 100644 index a39bc12..0000000 --- a/Assets/Editor/Scripts/FlowValuePublishPort.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Linq; -using System.Reflection; -using UnityEditor.Experimental.GraphView; -using UnityEngine.Events; -using UnityEngine.UIElements; - -namespace UniFlow.Editor -{ - public class FlowValuePublishPort : Port - { - private FlowValuePublishPort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) - { - } - - public ConnectorInfo.ValuePublisherInfo ValuePublisherInfo { get; private set; } - - public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ConnectorInfo.ValuePublisherInfo valuePublisherInfo, IEdgeConnectorListener edgeConnectorListener = default) - { - var port = new FlowValuePublishPort(portOrientation, portDirection, portCapacity, typeof(FlowValuePublishPort)) - { - ValuePublisherInfo = valuePublisherInfo, - }; - - // ReSharper disable once InvertIf - if (edgeConnectorListener != default) - { - port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); - port.AddManipulator(port.m_EdgeConnector); - } - - return port; - } - - public void AddPersistentListener(FlowValueReceivePort valueReceivePort) - { - var publishConnectorInstance = (node as FlowNode)?.ConnectorInfo.Connector; - var receivConnectorInstance = (valueReceivePort.node as FlowNode)?.ConnectorInfo.Connector; - if (publishConnectorInstance == null || receivConnectorInstance == null) - { - return; - } - - var setMethodInfo = valueReceivePort.ValueReceiverInfo.PropertyInfo.GetSetMethod(true); - var unityEvent = ValuePublisherInfo.PropertyInfo.GetValue(publishConnectorInstance); - - // unityEvent.AddPersistentListener() - unityEvent - .GetType() - .BaseType? - .GetMethodsRecursive(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)? - .First(x => x.Name == "AddPersistentListener" && !x.GetParameters().Any()) - .Invoke(unityEvent, null); - // unityEvent.m_PersistentCalls - var persistentCalls = unityEvent - .GetType() - .GetFieldRecursive("m_PersistentCalls", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .GetValue(unityEvent); - // unityEvent.m_PersistentCalls.RegisterObjectPersistentListener(unityEvent.GetPersistentEventCount() - 1, targetInstance, null, methodInfo.Name); - persistentCalls - .GetType() - .GetMethodRecursive("RegisterObjectPersistentListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Invoke( - persistentCalls, - new object[] - { - (unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1, - receivConnectorInstance, - null, - setMethodInfo.Name - } - ); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1) - var persistentCall = persistentCalls - .GetType() - .GetMethodRecursive("GetListener", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .Invoke(persistentCalls, new object[] {(unityEvent as UnityEventBase)?.GetPersistentEventCount() - 1}); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments - var argumentCache = persistentCall - .GetType() - .GetFieldRecursive("m_Arguments", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .GetValue(persistentCall); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Arguments.m_ObjectArgumentAssemblyTypeName = setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName - argumentCache - .GetType() - .GetFieldRecursive("m_ObjectArgumentAssemblyTypeName", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .SetValue(argumentCache, setMethodInfo.GetParameters().First().ParameterType.AssemblyQualifiedName); - // unityEvent.m_PersistentCalls.GetListener(unityEvent.GetPersistentEventCount() - 1).m_Mode = PersistentListenerMode.EventDefined - persistentCall - .GetType() - .GetFieldRecursive("m_Mode", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) - .SetValue(persistentCall, PersistentListenerMode.EventDefined); - } - } -} diff --git a/Assets/Editor/Scripts/FlowValuePublishPort.cs.meta b/Assets/Editor/Scripts/FlowValuePublishPort.cs.meta deleted file mode 100644 index 7587bd4..0000000 --- a/Assets/Editor/Scripts/FlowValuePublishPort.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 88d71ad7a2564eb6b4550185b87d182d -timeCreated: 1569585502 \ No newline at end of file diff --git a/Assets/Editor/Scripts/FlowValueReceivePort.cs b/Assets/Editor/Scripts/FlowValueReceivePort.cs deleted file mode 100644 index ddeaa52..0000000 --- a/Assets/Editor/Scripts/FlowValueReceivePort.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using UnityEditor.Experimental.GraphView; -using UnityEngine.UIElements; - -namespace UniFlow.Editor -{ - public class FlowValueReceivePort : Port - { - private FlowValueReceivePort(Orientation portOrientation, Direction portDirection, Capacity portCapacity, Type type) : base(portOrientation, portDirection, portCapacity, type) - { - } - - public ConnectorInfo.ValueReceiverInfo ValueReceiverInfo { get; private set; } - - public static Port Create(Orientation portOrientation, Direction portDirection, Capacity portCapacity, ConnectorInfo.ValueReceiverInfo valueReceiverInfo, IEdgeConnectorListener edgeConnectorListener = default) - { - var port = new FlowValueReceivePort(portOrientation, portDirection, portCapacity, typeof(FlowValueReceivePort)) - { - ValueReceiverInfo = valueReceiverInfo, - }; - - // ReSharper disable once InvertIf - if (edgeConnectorListener != default) - { - port.m_EdgeConnector = new EdgeConnector(edgeConnectorListener); - port.AddManipulator(port.m_EdgeConnector); - } - - return port; - } - } -} diff --git a/Assets/Editor/Scripts/FlowValueReceivePort.cs.meta b/Assets/Editor/Scripts/FlowValueReceivePort.cs.meta deleted file mode 100644 index 2fc5922..0000000 --- a/Assets/Editor/Scripts/FlowValueReceivePort.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ec2229efa2cb4e4d8437f71ad267ee91 -timeCreated: 1569585516 \ No newline at end of file diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs deleted file mode 100644 index c3e1aaa..0000000 --- a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs +++ /dev/null @@ -1,46 +0,0 @@ -using UnityEditor.Experimental.GraphView; -using UnityEngine; - -namespace UniFlow.Editor -{ - public class ValueInjectionConnectorListener : IEdgeConnectorListener - { - public ValueInjectionConnectorListener(FlowGraphView flowGraphView) - { - FlowGraphView = flowGraphView; - } - - private FlowGraphView FlowGraphView { get; } - - void IEdgeConnectorListener.OnDropOutsidePort(Edge edge, Vector2 position) - { - // Do nothing - } - - void IEdgeConnectorListener.OnDrop(GraphView graphView, Edge edge) - { - FlowEdge registeredEdge = default; - switch (edge.output) - { - case FlowValuePublishPort _ when edge.input is FlowValueReceivePort: - registeredEdge = FlowGraphView.AddEdge(edge.output, edge.input); - break; - case FlowValueReceivePort _ when edge.input is FlowValuePublishPort: - registeredEdge = FlowGraphView.AddEdge(edge.input, edge.output); - break; - } - - if (registeredEdge == default) - { - return; - } - - if (!(registeredEdge.output is FlowValuePublishPort publishPort) || !(registeredEdge.input is FlowValueReceivePort receivePort)) - { - return; - } - - publishPort.AddPersistentListener(receivePort); - } - } -} diff --git a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta b/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta deleted file mode 100644 index 6f3b458..0000000 --- a/Assets/Editor/Scripts/ValueInjectionConnectorListener.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cc120d6e4f2e4c7988ec959f33a67f37 -timeCreated: 1569585944 \ No newline at end of file diff --git a/Assets/Scripts/Attribute.meta b/Assets/Scripts/Attribute.meta deleted file mode 100644 index b48d1df..0000000 --- a/Assets/Scripts/Attribute.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f5727fd965f6439e8336d1e5b108d27a -timeCreated: 1568185279 \ No newline at end of file diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs deleted file mode 100644 index e3a9c34..0000000 --- a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using JetBrains.Annotations; - -namespace UniFlow.Attribute -{ - [AttributeUsage(AttributeTargets.Property)] - [MeansImplicitUse] - [PublicAPI] - public class ValuePublisherAttribute : System.Attribute - { - public ValuePublisherAttribute() : this("") - { - } - - public ValuePublisherAttribute(string name) - { - Name = name; - } - - public string Name { get; } - } -} diff --git a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta b/Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta deleted file mode 100644 index 7df1805..0000000 --- a/Assets/Scripts/Attribute/ValuePublisherAttribute.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f05906e8214546feb5e722595acdac6a -timeCreated: 1569328347 \ No newline at end of file diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs deleted file mode 100644 index c0aa9f3..0000000 --- a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using JetBrains.Annotations; - -namespace UniFlow.Attribute -{ - [AttributeUsage(AttributeTargets.Property)] - [MeansImplicitUse] - [PublicAPI] - public class ValueReceiverAttribute : System.Attribute - { - public ValueReceiverAttribute() : this("") - { - } - - public ValueReceiverAttribute(string name) - { - Name = name; - } - - public string Name { get; } - } -} diff --git a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta b/Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta deleted file mode 100644 index bf5f9fd..0000000 --- a/Assets/Scripts/Attribute/ValueReceiverAttribute.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 2c282cbfa2c94c2a8bfe683cfa504cf5 -timeCreated: 1569313783 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 47dd7c9..0c0d5c9 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -3,7 +3,6 @@ using System.Linq; using JetBrains.Annotations; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Controller @@ -26,21 +25,19 @@ [UsedImplicitly] public IList Behaviours get => targetBehaviours; set => targetBehaviours = value.ToList(); } - [ValueReceiver] public bool Activated + public GameObject TargetGameObject { - get => activated; - set => activated = value; - } - [ValueReceiver] public GameObject TargetGameObject - { - get => null; set => GameObjects.Add(value); } - [ValueReceiver] public Behaviour TargetBehaviour + private Behaviour TargetBehaviour { - get => null; set => Behaviours.Add(value); } + private bool Activated + { + get => activated; + set => activated = value; + } [SerializeField] private BoolCollector activatedCollector = default; [SerializeField] private GameObjectCollector targetGameObjectCollector = default; diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index f2c9e25..73b2b20 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Controller @@ -18,22 +17,22 @@ public class AnimatorTrigger : ConnectorBase, private Animator animator = default; [SerializeField] private string triggerName = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public Animator Animator + private Animator Animator { get => animator ? animator : animator = this.GetOrAddComponent(); set => animator = value; } - [ValueReceiver] public string TriggerName + private string TriggerName { get => triggerName; set => triggerName = value; diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index e7d8f32..e71b623 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using JetBrains.Annotations; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Controller @@ -20,27 +18,23 @@ public class AudioController : ConnectorBase, [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public AudioSource AudioSource + private AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = this.GetOrAddComponent(); set => audioSource = value; } - [UsedImplicitly] public AudioControlMethod AudioControlMethod - { - get => audioControlMethod; - set => audioControlMethod = value; - } - [ValueReceiver] public AudioClip AudioClip + private AudioControlMethod AudioControlMethod => audioControlMethod; + private AudioClip AudioClip { get => audioClip; set => audioClip = value; diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 4d0e7e4..8415468 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using UniFlow.Attribute; using UniFlow.Utility; using UnityEngine; @@ -14,12 +13,12 @@ public class InstantiateGameObject : ConnectorBase, [SerializeField] private GameObject source = default; [SerializeField] private Transform parent = default; - [ValueReceiver] public GameObject Source + public GameObject Source { get => source == default ? gameObject : source; - set => source = value; + private set => source = value; } - [ValueReceiver] public Transform Parent + private Transform Parent { get => parent == default ? transform : parent; set => parent = value; diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 513601d..e6ab542 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Controller @@ -15,19 +14,19 @@ public class MoveParentTransform : ConnectorBase, [SerializeField] private Transform parentTransform = default; [SerializeField] private bool worldPositionStays = true; - [ValueReceiver] public Transform TargetTransform + private Transform TargetTransform { get => targetTransform != default ? targetTransform : targetTransform = transform; set => targetTransform = value; } - [ValueReceiver] public Transform ParentTransform + private Transform ParentTransform { get => parentTransform; set => parentTransform = value; } - [ValueReceiver] public bool WorldPositionStays + private bool WorldPositionStays { get => worldPositionStays; set => worldPositionStays = value; diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 86b9fe7..decb65f 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -1,8 +1,6 @@ using System; using System.Collections.Generic; -using JetBrains.Annotations; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -10,9 +8,7 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/PlayableController", (int) ConnectorType.PlayableController)] - public class PlayableController : ConnectorBase, - IBaseGameObjectSpecifyable, - IMessageCollectable + public class PlayableController : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -20,27 +16,23 @@ public class PlayableController : ConnectorBase, [SerializeField] private PlayableControlMethod playableControlMethod = PlayableControlMethod.Play; [SerializeField] private TimelineAsset timelineAsset = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public PlayableDirector PlayableDirector + private PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } - [UsedImplicitly] public PlayableControlMethod PlayableControlMethod - { - get => playableControlMethod; - set => playableControlMethod = value; - } - [ValueReceiver] public TimelineAsset TimelineAsset + private PlayableControlMethod PlayableControlMethod => playableControlMethod; + private TimelineAsset TimelineAsset { get => timelineAsset; set => timelineAsset = value; diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 39f9968..2e1ba87 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; -using JetBrains.Annotations; using UniFlow.Utility; -using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -25,22 +23,22 @@ public class SimpleAnimationController : ConnectorBase, [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public Animator Animator + private Animator Animator { get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } - [ValueReceiver] public SimpleAnimation SimpleAnimation + private SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -52,26 +50,14 @@ [ValueReceiver] public SimpleAnimation SimpleAnimation ; set => simpleAnimation = value; } - [UsedImplicitly] public SimpleAnimationControlMethod SimpleAnimationControlMethod - { - get => simpleAnimationControlMethod; - set => simpleAnimationControlMethod = value; - } - [ValueReceiver] public AnimationClip AnimationClip + private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; + private AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - [ValueReceiver] public AnimatorCullingMode CullingMode - { - get => cullingMode; - set => cullingMode = value; - } - [ValueReceiver] public AnimatorUpdateMode UpdateMode - { - get => updateMode; - set => updateMode = value; - } + private AnimatorCullingMode CullingMode => cullingMode; + private AnimatorUpdateMode UpdateMode => updateMode; [SerializeField] private GameObjectCollector baseGameObjectCollector = default; [SerializeField] private StringCollector transformPathCollector = default; diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 4b2a9de..88ad99f 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -1,33 +1,41 @@ using System; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UnityEngine; namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/TimeScaleController", (int) ConnectorType.TimeScaleController)] - public class TimeScaleController : ConnectorBase + public class TimeScaleController : ConnectorBase, IMessageCollectable { [SerializeField] private float timeScale = default; [SerializeField] private float duration = default; [SerializeField] private ObservableTween.EaseType easeType = default; - [ValueReceiver] private float TimeScale + private float TimeScale { get => timeScale; set => timeScale = value; } - [ValueReceiver] private float Duration + private float Duration { get => duration; set => duration = value; } - [ValueReceiver] private ObservableTween.EaseType EaseType + private ObservableTween.EaseType EaseType { get => easeType; set => easeType = value; } + [SerializeField] private FloatCollector timeScaleCollector = default; + [SerializeField] private FloatCollector durationCollector = default; + [SerializeField] private EaseTypeCollector easeTypeCollector = default; + + private FloatCollector TimeScaleCollector => timeScaleCollector; + private FloatCollector DurationCollector => durationCollector; + private EaseTypeCollector EaseTypeCollector => easeTypeCollector; + private ISubject OnCompleteTweenSubject { get; } = new Subject(); public override IObservable OnConnectAsObservable() @@ -58,5 +66,13 @@ private void ChangeTimeScale() .Subscribe(x => Time.timeScale = x) .AddTo(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(TimeScaleCollector, x => TimeScale = x, nameof(TimeScale)), + new CollectableMessageAnnotation(DurationCollector, x => Duration = x, nameof(Duration)), + new CollectableMessageAnnotation(EaseTypeCollector, x => EaseType = x, nameof(EaseType)), + }; } } diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs index e5d4c18..1742da2 100644 --- a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs @@ -1,18 +1,18 @@ using System; +using System.Collections.Generic; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/TransformSiblingController", (int) ConnectorType.TransformSiblingController)] - public class TransformSiblingController : ConnectorBase + public class TransformSiblingController : ConnectorBase, IMessageCollectable { [SerializeField] private Transform targetTransform = default; [SerializeField] private TransformSiblingControlMethod transformSiblingControlMethod = default; [SerializeField] private int index = default; - [ValueReceiver] public Transform TargetTransform + private Transform TargetTransform { get => targetTransform != default ? targetTransform @@ -20,12 +20,17 @@ [ValueReceiver] public Transform TargetTransform set => targetTransform = value; } private TransformSiblingControlMethod TransformSiblingControlMethod => transformSiblingControlMethod; - [ValueReceiver] public int Index + private int Index { get => index; set => index = value; } + [SerializeField] private TransformCollector targetTransformCollector = default; + [SerializeField] private IntCollector indexCollector = default; + private TransformCollector TargetTransformCollector => targetTransformCollector; + private IntCollector IndexCollector => indexCollector; + public override IObservable OnConnectAsObservable() { switch (TransformSiblingControlMethod) @@ -44,6 +49,13 @@ public override IObservable OnConnectAsObservable() } return ObservableFactory.ReturnMessage(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), + new CollectableMessageAnnotation(IndexCollector, x => Index = x, nameof(Index)), + }; } public enum TransformSiblingControlMethod diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index a074957..06494d8 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -2,14 +2,13 @@ using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; -using UniFlow.Attribute; using UniRx; using UnityEngine; namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/AnimationEvent", (int) ConnectorType.AnimationEvent)] - public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessageComposable + public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable, IMessageComposable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -21,22 +20,22 @@ public class AnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessag [SerializeField] private AnimatorCullingMode cullingMode = AnimatorCullingMode.AlwaysAnimate; [SerializeField] private AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public Animator Animator + private Animator Animator { get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } - [ValueReceiver] public SimpleAnimation SimpleAnimation + private SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -48,21 +47,26 @@ [ValueReceiver] public SimpleAnimation SimpleAnimation ; set => simpleAnimation = value; } - [ValueReceiver] public AnimationClip AnimationClip + private AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } - [ValueReceiver] public AnimatorCullingMode CullingMode - { - get => cullingMode; - set => cullingMode = value; - } - [ValueReceiver] public AnimatorUpdateMode UpdateMode - { - get => updateMode; - set => updateMode = value; - } + private AnimatorCullingMode CullingMode => cullingMode; + private AnimatorUpdateMode UpdateMode => updateMode; + + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private AnimatorCollector animatorCollector = default; + [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = default; + [SerializeField] private AnimationClipCollector animationClipCollector = default; + // TODO: Implement EnumCollector + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private AnimatorCollector AnimatorCollector => animatorCollector; + private SimpleAnimationCollector SimpleAnimationCollector => simpleAnimationCollector; + private AnimationClipCollector AnimationClipCollector => animationClipCollector; private ISubject Subject { get; } = new Subject(); @@ -100,6 +104,16 @@ private void PrepareAnimationEvent() } } + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), + new CollectableMessageAnnotation(SimpleAnimationCollector, x => SimpleAnimation = x), + new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x), + }; + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index e4999dc..8a04bd8 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -1,13 +1,12 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UnityEngine; namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/AudioEvent", (int) ConnectorType.AudioEvent)] - public class AudioEvent : ConnectorBase, IBaseGameObjectSpecifyable + public class AudioEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -17,32 +16,38 @@ public class AudioEvent : ConnectorBase, IBaseGameObjectSpecifyable [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public AudioSource AudioSource + private AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = this.GetOrAddComponent(); set => audioSource = value; } - [UsedImplicitly] public AudioEventType AudioEventType - { - get => audioEventType; - set => audioEventType = value; - } - [ValueReceiver] public AudioClip AudioClip + private AudioEventType AudioEventType => audioEventType; + private AudioClip AudioClip { get => audioClip; set => audioClip = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private AudioSourceCollector audioSourceCollector = default; + [SerializeField] private AudioClipCollector audioClipCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private AudioSourceCollector AudioSourceCollector => audioSourceCollector; + private AudioClipCollector AudioClipCollector => audioClipCollector; + private IReadOnlyReactiveProperty> TimePair { get; set; } public override IObservable OnConnectAsObservable() @@ -107,6 +112,15 @@ private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) return (AudioEventType) -1; } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(AudioSourceCollector, x => AudioSource = x), + new CollectableMessageAnnotation(AudioClipCollector, x => AudioClip = x), + }; } public enum AudioEventType diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index e9fd05a..1926023 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,20 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/CameraEvent", (int) ConnectorType.CameraEvent)] - public class CameraEvent : ConnectorBase + public class CameraEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private CameraEventType cameraEventType = CameraEventType.BecomeVisible; - [ValueReceiver] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public CameraEventType CameraEventType - { - get => cameraEventType; - set => cameraEventType = value; - } + private CameraEventType CameraEventType => cameraEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -41,6 +39,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum CameraEventType diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index bfb8570..90f9c5c 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -1,6 +1,4 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -13,16 +11,8 @@ public class LifecycleEvent : ConnectorBase [SerializeField] private Component component = default; [SerializeField] private LifecycleEventType lifecycleEventType = LifecycleEventType.Start; - [ValuePublisher] public Component Component - { - get => component ? component : component = this; - set => component = value; - } - [UsedImplicitly] public LifecycleEventType LifecycleEventType - { - get => lifecycleEventType; - set => lifecycleEventType = value; - } + private Component Component => component ? component : component = this; + private LifecycleEventType LifecycleEventType => lifecycleEventType; private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 5256176..488f84c 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/MouseEvent", (int) ConnectorType.MouseEvent)] - public class MouseEvent : ConnectorBase + public class MouseEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private MouseEventType mouseEventType = MouseEventType.MouseDown; - [ValuePublisher] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public MouseEventType MouseEventType - { - get => mouseEventType; - set => mouseEventType = value; - } + private MouseEventType MouseEventType => mouseEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -55,6 +54,12 @@ private IObservable OnEventAsObservable() throw new PlatformNotSupportedException("MouseEvent does not support mobile platform"); #endif } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum MouseEventType diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index e7ff8f4..cc4eb16 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/ParticleEvent", (int) ConnectorType.ParticleEvent)] - public class ParticleEvent : ConnectorBase + public class ParticleEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private ParticleEventType particleEventType = ParticleEventType.ParticleCollision; - [ValuePublisher] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public ParticleEventType ParticleEventType - { - get => particleEventType; - set => particleEventType = value; - } + private ParticleEventType ParticleEventType => particleEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -45,6 +44,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum ParticleEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 62f7d40..40a12b3 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/PhysicsCollision2DEvent", (int) ConnectorType.PhysicsCollision2DEvent)] - public class PhysicsCollision2DEvent : ConnectorBase + public class PhysicsCollision2DEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private PhysicsCollision2DEventType physicsCollision2DEventType = PhysicsCollision2DEventType.CollisionEnter2D; - [ValuePublisher] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public PhysicsCollision2DEventType PhysicsCollision2DEventType - { - get => physicsCollision2DEventType; - set => physicsCollision2DEventType = value; - } + private PhysicsCollision2DEventType PhysicsCollision2DEventType => physicsCollision2DEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -44,6 +43,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum PhysicsCollision2DEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index c06192d..0d933ce 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/PhysicsCollisionEvent", (int) ConnectorType.PhysicsCollisionEvent)] - public class PhysicsCollisionEvent : ConnectorBase + public class PhysicsCollisionEvent : ConnectorBase, IMessageCollectable { - [ValuePublisher] public Component Component - { - get => component ? component : component = this; - set => component = value; - } [SerializeField] private Component component = default; [SerializeField] private PhysicsCollisionEventType physicsCollisionEventType = PhysicsCollisionEventType.CollisionEnter; - [UsedImplicitly] public PhysicsCollisionEventType PhysicsCollisionEventType + private Component Component { - get => physicsCollisionEventType; - set => physicsCollisionEventType = value; + get => component ? component : component = this; + set => component = value; } + private PhysicsCollisionEventType PhysicsCollisionEventType => physicsCollisionEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -44,6 +43,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum PhysicsCollisionEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 9e3ad48..1f4ef40 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/PhysicsTrigger2DEvent", (int) ConnectorType.PhysicsTrigger2DEvent)] - public class PhysicsTrigger2DEvent : ConnectorBase + public class PhysicsTrigger2DEvent : ConnectorBase, IMessageCollectable { - [ValuePublisher] public Component Component - { - get => component ? component : component = this; - set => component = value; - } [SerializeField] private Component component = default; [SerializeField] private PhysicsTrigger2DEventType physicsTrigger2DEventType = PhysicsTrigger2DEventType.TriggerEnter2D; - [UsedImplicitly] public PhysicsTrigger2DEventType PhysicsTrigger2DEventType + private Component Component { - get => physicsTrigger2DEventType; - set => physicsTrigger2DEventType = value; + get => component ? component : component = this; + set => component = value; } + private PhysicsTrigger2DEventType PhysicsTrigger2DEventType => physicsTrigger2DEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -44,6 +43,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum PhysicsTrigger2DEventType diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 93a90b3..9777c4e 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/PhysicsTriggerEvent", (int) ConnectorType.PhysicsTriggerEvent)] - public class PhysicsTriggerEvent : ConnectorBase + public class PhysicsTriggerEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private PhysicsTriggerEventType physicsTriggerEventType = PhysicsTriggerEventType.TriggerEnter; - [ValuePublisher] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public PhysicsTriggerEventType PhysicsTriggerEventType - { - get => physicsTriggerEventType; - set => physicsTriggerEventType = value; - } + private PhysicsTriggerEventType PhysicsTriggerEventType => physicsTriggerEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -44,6 +43,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum PhysicsTriggerEventType diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index 9c4721e..77cb054 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/RectTransformEvent", (int) ConnectorType.RectTransformEvent)] - public class RectTransformEvent : ConnectorBase + public class RectTransformEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private RectTransformEventType rectTransformEventType = RectTransformEventType.CanvasGroupChanged; - [ValuePublisher] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public RectTransformEventType RectTransformEventType - { - get => rectTransformEventType; - set => rectTransformEventType = value; - } + private RectTransformEventType RectTransformEventType => rectTransformEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -43,6 +42,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum RectTransformEventType diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index d0f4cb2..7121cb8 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -1,14 +1,12 @@ using System; using System.Collections.Generic; -using JetBrains.Annotations; -using UniFlow.Attribute; using UniRx; using UnityEngine; namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/SimpleAnimationEvent", (int) ConnectorType.SimpleAnimationEvent)] - public class SimpleAnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable + public class SimpleAnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable { private const string MessageParameterKey = "SimpleAnimationEvent"; @@ -21,22 +19,22 @@ public class SimpleAnimationEvent : ConnectorBase, IBaseGameObjectSpecifyable [Tooltip("If you do not specify it will not be filtered")] private AnimationClip animationClip = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValuePublisher] public Animator Animator + private Animator Animator { get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } - [ValuePublisher] public SimpleAnimation SimpleAnimation + private SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -48,17 +46,26 @@ [ValuePublisher] public SimpleAnimation SimpleAnimation ; set => simpleAnimation = value; } - [UsedImplicitly] public SimpleAnimationEventType SimpleAnimationEventType - { - get => simpleAnimationEventType; - set => simpleAnimationEventType = value; - } - [ValuePublisher] public AnimationClip AnimationClip + private SimpleAnimationEventType SimpleAnimationEventType => simpleAnimationEventType; + private AnimationClip AnimationClip { get => animationClip; set => animationClip = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private AnimatorCollector animatorCollector = default; + [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = default; + [SerializeField] private AnimationClipCollector animationClipCollector = default; + // TODO: Implement EnumCollector + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private AnimatorCollector AnimatorCollector => animatorCollector; + private SimpleAnimationCollector SimpleAnimationCollector => simpleAnimationCollector; + private AnimationClipCollector AnimationClipCollector => animationClipCollector; + private ISubject<(SimpleAnimationEventType eventType, AnimationClip animationClip)> CurrentStateSubject { get; } = new Subject<(SimpleAnimationEventType, AnimationClip)>(); private IDictionary PlayingStatuses { get; } = new Dictionary(); @@ -102,6 +109,16 @@ private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTim CurrentStateSubject.OnNext((SimpleAnimationEventType.Stop, state.clip)); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), + new CollectableMessageAnnotation(SimpleAnimationCollector, x => SimpleAnimation = x), + new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x), + }; } public enum SimpleAnimationEventType diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 99c8bab..fda5888 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -1,7 +1,6 @@ using System; +using System.Collections.Generic; using System.Linq; -using JetBrains.Annotations; -using UniFlow.Attribute; using UniFlow.TimelineSignal; using UniRx; using UnityEngine; @@ -12,7 +11,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/TimelineEvent", (int) ConnectorType.TimelineEvent)] - public class TimelineEvent : ConnectorBase + public class TimelineEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -20,17 +19,17 @@ public class TimelineEvent : ConnectorBase [SerializeField] private TimelineEventType timelineEventType = TimelineEventType.Play; [SerializeField] private TimelineAsset timelineAsset = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValuePublisher] public PlayableDirector PlayableDirector + private PlayableDirector PlayableDirector { get => playableDirector != default @@ -41,17 +40,23 @@ [ValuePublisher] public PlayableDirector PlayableDirector : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); set => playableDirector = value; } - [UsedImplicitly] public TimelineEventType TimelineEventType - { - get => timelineEventType; - set => timelineEventType = value; - } - [ValuePublisher] public TimelineAsset TimelineAsset + private TimelineEventType TimelineEventType => timelineEventType; + private TimelineAsset TimelineAsset { get => timelineAsset; set => timelineAsset = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; + [SerializeField] private TimelineAssetCollector timelineAssetCollector = default; + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private PlayableDirectorCollector PlayableDirectorCollector => playableDirectorCollector; + private TimelineAssetCollector TimelineAssetCollector => timelineAssetCollector; + private static Begin beginSignal = default; private static End endSignal = default; private static Begin BeginSignal @@ -158,6 +163,15 @@ private void DispatchEnd() { SignalEmittedSubject.OnNext(TimelineEventType.Stop); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x), + new CollectableMessageAnnotation(TimelineAssetCollector, x => TimelineAsset = x), + }; } public enum TimelineEventType diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 727b647..20c8fb6 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,21 +7,21 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/TransformEvent", (int) ConnectorType.TransformEvent)] - public class TransformEvent : ConnectorBase + public class TransformEvent : ConnectorBase, IMessageCollectable { [SerializeField] private Component component = default; [SerializeField] private TransformEventType transformEventType = TransformEventType.TransformChildrenChanged; - [ValuePublisher] public Component Component + private Component Component { get => component ? component : component = this; set => component = value; } - [UsedImplicitly] public TransformEventType TransformEventType - { - get => transformEventType; - set => transformEventType = value; - } + private TransformEventType TransformEventType => transformEventType; + + [SerializeField] private ComponentCollector componentCollector = default; + + private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() { @@ -43,6 +42,12 @@ private IObservable OnEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + }; } public enum TransformEventType diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 57883fb..2169e21 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -1,6 +1,5 @@ using System; -using JetBrains.Annotations; -using UniFlow.Attribute; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -10,7 +9,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] - public class UIBehaviourEventTrigger : ConnectorBase, IBaseGameObjectSpecifyable + public class UIBehaviourEventTrigger : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -19,42 +18,51 @@ public class UIBehaviourEventTrigger : ConnectorBase, IBaseGameObjectSpecifyable [SerializeField] private bool activateBeforeConnect = default; [SerializeField] private bool deactivateAfterConnect = default; - [ValueReceiver] public GameObject BaseGameObject + public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - set => baseGameObject = value; + private set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public UIBehaviour UIBehaviour + private UIBehaviour UIBehaviour { get => uiBehaviour ? uiBehaviour : uiBehaviour = ((IBaseGameObjectSpecifyable) this).GetComponent(); set => uiBehaviour = value; } - [UsedImplicitly] public EventTriggerType EventTriggerType - { - get => eventTriggerType; - set => eventTriggerType = value; - } - [ValueReceiver] public bool ActivateBeforeConnect + private EventTriggerType EventTriggerType => eventTriggerType; + private bool ActivateBeforeConnect { get => activateBeforeConnect; set => activateBeforeConnect = value; } - [ValueReceiver] public bool DeactivateAfterConnect + private bool DeactivateAfterConnect { get => deactivateAfterConnect; set => deactivateAfterConnect = value; } + [SerializeField] private GameObjectCollector baseGameObjectCollector = default; + [SerializeField] private StringCollector transformPathCollector = default; + [SerializeField] private UIBehaviourCollector uiBehaviourCollector = default; + [SerializeField] private BoolCollector activateBeforeConnectCollector = default; + [SerializeField] private BoolCollector deactivateAfterConnectCollector = default; + // TODO: Implement EnumCollector + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private UIBehaviourCollector UIBehaviourCollector => uiBehaviourCollector; + private BoolCollector ActivateBeforeConnectCollector => activateBeforeConnectCollector; + private BoolCollector DeactivateAfterConnectCollector => deactivateAfterConnectCollector; + private IDisposable Disposable { get; } = new CompositeDisposable(); public override IObservable OnConnectAsObservable() { - return UniRx.Observable + return Observable .ReturnUnit() .Do( _ => @@ -125,5 +133,15 @@ private void OnDestroy() { Disposable.Dispose(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + new CollectableMessageAnnotation(UIBehaviourCollector, x => UIBehaviour = x), + new CollectableMessageAnnotation(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x), + new CollectableMessageAnnotation(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x), + }; } } diff --git a/Assets/Scripts/Connector/Expression/And.cs b/Assets/Scripts/Connector/Expression/And.cs index c4ccb87..8f2fb9f 100644 --- a/Assets/Scripts/Connector/Expression/And.cs +++ b/Assets/Scripts/Connector/Expression/And.cs @@ -2,26 +2,33 @@ using System.Collections.Generic; using System.Linq; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Expression { [AddComponentMenu("UniFlow/Expression/And", (int) ConnectorType.And)] - public class And : ConnectorBase + public class And : ConnectorBase, IMessageCollectable { private IList Conditions { get; } = new List(); - [ValueReceiver] - public bool Value + private bool Value { get => Conditions.All(x => x); set => Conditions.Add(value); } + [SerializeField] private BoolCollector valueCollector = default; + private BoolCollector ValueCollector => valueCollector; + public override IObservable OnConnectAsObservable() { return Value ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ValueCollector, x => Value = x, nameof(Value)), + }; } } diff --git a/Assets/Scripts/Connector/Expression/Not.cs b/Assets/Scripts/Connector/Expression/Not.cs index ded47c0..6ea867c 100644 --- a/Assets/Scripts/Connector/Expression/Not.cs +++ b/Assets/Scripts/Connector/Expression/Not.cs @@ -2,26 +2,33 @@ using System.Collections.Generic; using System.Linq; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Expression { [AddComponentMenu("UniFlow/Expression/Not", (int) ConnectorType.Not)] - public class Not : ConnectorBase + public class Not : ConnectorBase, IMessageCollectable { private IList Conditions { get; } = new List(); - [ValueReceiver] - public bool Value + private bool Value { get => Conditions.All(x => !x); set => Conditions.Add(value); } + [SerializeField] private BoolCollector valueCollector = default; + private BoolCollector ValueCollector => valueCollector; + public override IObservable OnConnectAsObservable() { return Value ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ValueCollector, x => Value = x, nameof(Value)), + }; } } diff --git a/Assets/Scripts/Connector/Expression/Or.cs b/Assets/Scripts/Connector/Expression/Or.cs index dbe08c8..e3f26b0 100644 --- a/Assets/Scripts/Connector/Expression/Or.cs +++ b/Assets/Scripts/Connector/Expression/Or.cs @@ -2,26 +2,33 @@ using System.Collections.Generic; using System.Linq; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Expression { [AddComponentMenu("UniFlow/Expression/Or", (int) ConnectorType.Or)] - public class Or : ConnectorBase + public class Or : ConnectorBase, IMessageCollectable { private IList Conditions { get; } = new List(); - [ValueReceiver] - public bool Value + private bool Value { get => Conditions.Any(x => x); set => Conditions.Add(value); } + [SerializeField] private BoolCollector valueCollector = default; + private BoolCollector ValueCollector => valueCollector; + public override IObservable OnConnectAsObservable() { return Value ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(ValueCollector, x => Value = x, nameof(Value)), + }; } } diff --git a/Assets/Scripts/Connector/Expression/Xor.cs b/Assets/Scripts/Connector/Expression/Xor.cs index 6ec0a68..de29ff9 100644 --- a/Assets/Scripts/Connector/Expression/Xor.cs +++ b/Assets/Scripts/Connector/Expression/Xor.cs @@ -1,19 +1,32 @@ using System; +using System.Collections.Generic; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.Expression { [AddComponentMenu("UniFlow/Expression/Xor", (int) ConnectorType.Xor)] - public class Xor : ConnectorBase + public class Xor : ConnectorBase, IMessageCollectable { - [ValueReceiver] public bool Left { get; set; } - [ValueReceiver] public bool Right { get; set; } + private bool Left { get; set; } + private bool Right { get; set; } + + [SerializeField] private BoolCollector leftCollector = default; + [SerializeField] private BoolCollector rightCollector = default; + + private BoolCollector LeftCollector => leftCollector; + private BoolCollector RightCollector => rightCollector; public override IObservable OnConnectAsObservable() { return Left ^ Right ? ObservableFactory.ReturnMessage(this) : ObservableFactory.EmptyMessage(); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(LeftCollector, x => Left = x, nameof(Left)), + new CollectableMessageAnnotation(RightCollector, x => Right = x, nameof(Right)), + }; } } diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index 09da1b0..f9a8445 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -1,24 +1,24 @@ using System; using System.Collections.Generic; using UniFlow.Utility; -using UniFlow.Attribute; -using UniRx; using UnityEngine; namespace UniFlow.Connector.Misc { [AddComponentMenu("UniFlow/Misc/Toss", (int) ConnectorType.Toss)] - public class Toss : ConnectorBase + public class Toss : ConnectorBase, IMessageCollectable { [SerializeField] private List targets = default; private IList Targets => targets; - [ValueReceiver] public GameObject TargetGameObject + private GameObject TargetGameObject { - get => null; set => Targets.Add(value); } + [SerializeField] private GameObjectCollector targetGameObjectCollector = default; + private GameObjectCollector TargetGameObjectCollector => targetGameObjectCollector; + public override IObservable OnConnectAsObservable() { foreach (var target in Targets) @@ -30,5 +30,11 @@ public override IObservable OnConnectAsObservable() } return ObservableFactory.ReturnMessage(this); } + + public IEnumerable GetMessageCollectableAnnotations() => + new[] + { + new CollectableMessageAnnotation(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), + }; } } diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index eb2d513..de8c1bc 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UniFlow.Signal; using UnityEngine; @@ -18,42 +17,56 @@ public class StringSignalPublisher : SignalPublisherBase, [SerializeField] private Object objectParameter = default; [SerializeField] private ScriptableObject scriptableObjectParameter = default; - [ValueReceiver] public string SignalName + private string SignalName { get => signalName; set => signalName = value; } - [ValueReceiver] public bool BoolParameter + private bool BoolParameter { get => boolParameter; set => boolParameter = value; } - [ValueReceiver] public int IntParameter + private int IntParameter { get => intParameter; set => intParameter = value; } - [ValueReceiver] public float FloatParameter + private float FloatParameter { get => floatParameter; set => floatParameter = value; } - [ValueReceiver] public string StringParameter + private string StringParameter { get => stringParameter; set => stringParameter = value; } - [ValueReceiver] public Object ObjectParameter + private Object ObjectParameter { get => objectParameter; set => objectParameter = value; } - [ValueReceiver] public ScriptableObject ScriptableObjectParameter + private ScriptableObject ScriptableObjectParameter { get => scriptableObjectParameter; set => scriptableObjectParameter = value; } + [SerializeField] private BoolCollector boolCollector = default; + [SerializeField] private IntCollector intCollector = default; + [SerializeField] private FloatCollector floatCollector = default; + [SerializeField] private StringCollector stringCollector = default; + [SerializeField] private ObjectCollector objectCollector = default; + [SerializeField] private ScriptableObjectCollector scriptableObjectCollector = default; + + private BoolCollector BoolCollector => boolCollector; + private IntCollector IntCollector => intCollector; + private FloatCollector FloatCollector => floatCollector; + private StringCollector StringCollector => stringCollector; + private ObjectCollector ObjectCollector => objectCollector; + private ScriptableObjectCollector ScriptableObjectCollector => scriptableObjectCollector; + StringSignal ISignalCreator.CreateSignal() { return string.IsNullOrEmpty(SignalName) @@ -71,20 +84,6 @@ StringSignal ISignalCreator.CreateSignal() ); } - [SerializeField] private BoolCollector boolCollector = default; - [SerializeField] private IntCollector intCollector = default; - [SerializeField] private FloatCollector floatCollector = default; - [SerializeField] private StringCollector stringCollector = default; - [SerializeField] private ObjectCollector objectCollector = default; - [SerializeField] private ScriptableObjectCollector scriptableObjectCollector = default; - - private BoolCollector BoolCollector => boolCollector; - private IntCollector IntCollector => intCollector; - private FloatCollector FloatCollector => floatCollector; - private StringCollector StringCollector => stringCollector; - private ObjectCollector ObjectCollector => objectCollector; - private ScriptableObjectCollector ScriptableObjectCollector => scriptableObjectCollector; - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs b/Assets/Scripts/Connector/SignalPublisherBase.cs index 44a84ca..828fb14 100644 --- a/Assets/Scripts/Connector/SignalPublisherBase.cs +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs @@ -1,5 +1,4 @@ using System; -using UniFlow.Attribute; using UniFlow.Connector.SignalPublisher; using UniFlow.Utility; using UnityEngine; @@ -11,10 +10,11 @@ public abstract class SignalPublisherBase : ConnectorBase, ISignalPubli private const string MessageParameterKey = "Signal"; [SerializeField] private TSignal signal = default; - [ValueReceiver] public TSignal Signal + + protected TSignal Signal { get => signal; - set => signal = value; + private set => signal = value; } public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 9f6c251..288d780 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UniFlow.Connector.SignalPublisher; using UniFlow.Signal; using UnityEngine; @@ -14,13 +13,15 @@ public class StringSignalReceiver : SignalReceiverBase, IMessageComposable { [SerializeField] private string signalName = default; - [ValueReceiver] public string SignalName + + private string SignalName { get => signalName; set => signalName = value; } [SerializeField] private StringCollector signalNameCollector = default; + private StringCollector SignalNameCollector => signalNameCollector; bool ISignalFilter.Filter(StringSignal signal) diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index e6ae6bb..26a2e68 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -1,5 +1,4 @@ using System; -using UniFlow.Attribute; using UniFlow.Connector.SignalPublisher; using UniFlow.Connector.SignalReceiver; using UniFlow.Utility; @@ -13,7 +12,8 @@ public abstract class SignalReceiverBase : ConnectorBase, ISignalReceiv private const string MessageParameterKey = "Signal"; [SerializeField] private TSignal signal = default; - [ValueReceiver] public TSignal Signal + + protected TSignal Signal { get => signal; set => signal = value; diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 8eedb22..9a81b32 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using JetBrains.Annotations; using UniFlow.Utility; -using UniFlow.Attribute; using UnityEngine; namespace UniFlow.Connector.ValueComparer @@ -14,12 +13,12 @@ public abstract class ComparerBase : ConnectorBase, IMessage [SerializeField] private TValue expect = default; - [ValueReceiver] public TValue Expect + protected TValue Expect { get => expect; - set => expect = value; + private set => expect = value; } - [ValueReceiver] public TValue Actual { get; set; } + protected TValue Actual { get; set; } [SerializeField] private TCollector expectCollector = default; [SerializeField] private TCollector actualCollector = default; @@ -47,7 +46,7 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Result, "Result"), + new ComposableMessageAnnotation(() => Result, nameof(Result)), }; } diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index a0eecad..c134eaa 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UniFlow.Connector.ValueInjector; using UnityEngine; using UnityEngine.UI; @@ -16,22 +15,22 @@ public class ImageInjector : InjectorBase, [SerializeField] private Image image = default; [SerializeField] private Sprite sprite = default; - [ValueReceiver] public override GameObject BaseGameObject + public override GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public Image Image + private Image Image { get => image != default ? image : image = this.GetOrAddComponent(); set => image = value; } - [ValueReceiver] public Sprite Sprite + private Sprite Sprite { get => sprite; set => sprite = value; diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index e58165b..4767e4e 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UniFlow.Connector.ValueInjector; using UnityEngine; using UnityEngine.UI; @@ -16,22 +15,22 @@ public class RawImageInjector : InjectorBase, [SerializeField] private RawImage rawImage = default; [SerializeField] private Texture texture = default; - [ValueReceiver] public override GameObject BaseGameObject + public override GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public RawImage RawImage + private RawImage RawImage { get => rawImage != default ? rawImage : rawImage = this.GetOrAddComponent(); set => rawImage = value; } - [ValueReceiver] public Texture Texture + private Texture Texture { get => texture; set => texture = value; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index 2eec360..1e56659 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -18,32 +17,32 @@ public class AnimationTrackInjector : TimelineInjectorBase baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public override PlayableDirector PlayableDirector + protected override PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } - [ValueReceiver] public override string TrackName + protected override string TrackName { get => trackName; set => trackName = value; } - [ValueReceiver] public override string ClipName + protected override string ClipName { get => clipName; set => clipName = value; } - [ValueReceiver] public AnimationClip AnimationClip + private AnimationClip AnimationClip { get => animationClip; set => animationClip = value; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 23c431a..3f71df7 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -18,32 +17,32 @@ public class AudioTrackInjector : TimelineInjectorBase, [SerializeField] private string clipName = default; [SerializeField] private AudioClip audioClip = default; - [ValueReceiver] public override GameObject BaseGameObject + public override GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public override PlayableDirector PlayableDirector + protected override PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } - [ValueReceiver] public override string TrackName + protected override string TrackName { get => trackName; set => trackName = value; } - [ValueReceiver] public override string ClipName + protected override string ClipName { get => clipName; set => clipName = value; } - [ValueReceiver] public AudioClip AudioClip + private AudioClip AudioClip { get => audioClip; set => audioClip = value; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 3224915..0b56f6c 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UnityEngine; using UnityEngine.Playables; using UnityEngine.Timeline; @@ -19,37 +18,37 @@ public class ControlTrackInjector : TimelineInjectorBase, [SerializeField] private GameObject sourceGameObject = default; [SerializeField] private GameObject prefabGameObject = default; - [ValueReceiver] public override GameObject BaseGameObject + public override GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; set => baseGameObject = value; } - [ValueReceiver] public string TransformPath + public string TransformPath { get => transformPath; - set => transformPath = value; + private set => transformPath = value; } - [ValueReceiver] public override PlayableDirector PlayableDirector + protected override PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); set => playableDirector = value; } - [ValueReceiver] public override string TrackName + protected override string TrackName { get => trackName; set => trackName = value; } - [ValueReceiver] public override string ClipName + protected override string ClipName { get => clipName; set => clipName = value; } - [ValueReceiver] public GameObject SourceGameObject + public GameObject SourceGameObject { get => sourceGameObject; set => sourceGameObject = value; } - [ValueReceiver] public GameObject PrefabGameObject + private GameObject PrefabGameObject { get => prefabGameObject; set => prefabGameObject = value; diff --git a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs index 22defaa..8d58cdf 100644 --- a/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs +++ b/Assets/Scripts/Connector/ValueInjector/TimelineInjectorBase.cs @@ -7,9 +7,9 @@ namespace UniFlow.Connector.ValueInjector { public abstract class TimelineInjectorBase : InjectorBase where TPlayableAsset : PlayableAsset { - public abstract PlayableDirector PlayableDirector { get; set; } - public abstract string TrackName { get; set; } - public abstract string ClipName { get; set; } + protected abstract PlayableDirector PlayableDirector { get; set; } + protected abstract string TrackName { get; set; } + protected abstract string ClipName { get; set; } protected override void Inject() { diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index 01e5a3b..31ac5d9 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -1,25 +1,18 @@ using System; using System.Collections.Generic; using System.Linq; -using UniFlow.Attribute; using UniRx; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { - public abstract class ListProviderBase : ConnectorBase, + public abstract class ListProviderBase : ConnectorBase, IMessageCollectable, IMessageComposable - where TPublishEvent : UnityEvent, new() where TValueCollector : ValueCollectorBase>, new() { - [SerializeField] private TPublishEvent publisher = new TPublishEvent(); - [ValuePublisher("Value")] public TPublishEvent Publisher => publisher; - [SerializeField] private List values = default; - [ValueReceiver] public IEnumerable Values { get => values; @@ -31,9 +24,8 @@ public IEnumerable Values public override IObservable OnConnectAsObservable() { - var list = Values.ToList(); - list.ForEach(Publisher.Invoke); - return list + return Values + .ToList() .ToObservable() .AsMessageObservable(this, typeof(TValue).Name); } diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 673b8ab..7ca24b3 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -1,5 +1,4 @@ using System; -using UniFlow.Attribute; using UniRx; using UnityEngine; @@ -8,7 +7,7 @@ namespace UniFlow.Connector.ValueProvider public abstract class ProviderBase : ConnectorBase, IInjectable { [SerializeField] private TValue value = default; - [ValueReceiver] public TValue Value + public TValue Value { get => value; set => this.value = value; diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index e3877b2..e1d43dc 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -1,7 +1,5 @@ using System.Collections.Generic; -using UniFlow.Attribute; using UnityEngine; -using UnityEngine.Events; namespace UniFlow.Connector.ValueProvider { diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 3e5d41c..920b9e6 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using UniFlow.Attribute; using UnityEngine; using UnityEngine.EventSystems; @@ -19,7 +18,7 @@ public abstract class SelectorBase : ProviderBase Keys => keys; private IList Values => values; - [ValueReceiver] public TKey Key { get; set; } + public TKey Key { get; set; } [SerializeField] private TKeyCollector keyCollector = default; private TKeyCollector KeyCollector => keyCollector; diff --git a/Assets/Scripts/ValueCollectors.cs b/Assets/Scripts/ValueCollectors.cs index 57b8e9c..ecad25f 100644 --- a/Assets/Scripts/ValueCollectors.cs +++ b/Assets/Scripts/ValueCollectors.cs @@ -237,5 +237,10 @@ public class RuntimePlatformCollector : ValueCollectorBase { } + [Serializable] + public class EaseTypeCollector : ValueCollectorBase + { + } + #endregion } From d48e06240f6d56f90853eb38c6a365c7c312a370 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 02:31:37 +0900 Subject: [PATCH 328/453] :wrench: Inherit ConnectorBase for Selector instead of ProviderBase --- Assets/Scripts/Connector/ValueProvider/SelectorBase.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 920b9e6..aa0ef43 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using UniRx; using UnityEngine; using UnityEngine.EventSystems; @@ -7,7 +8,7 @@ namespace UniFlow.Connector.ValueProvider { - public abstract class SelectorBase : ProviderBase, + public abstract class SelectorBase : ConnectorBase, IMessageCollectable, IMessageComposable where TKeyCollector : ValueCollectorBase, new() @@ -23,6 +24,11 @@ public abstract class SelectorBase : ProviderBase keyCollector; + public override IObservable OnConnectAsObservable() + { + return Observable.Return(this.CreateMessage()); + } + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { From e683548dafdcec99bef6b8394e5e87d3cacfe989 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 03:31:45 +0900 Subject: [PATCH 329/453] :beetle: Fix illegal value collection --- Assets/Scripts/MessageAnnotation.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/MessageAnnotation.cs b/Assets/Scripts/MessageAnnotation.cs index 8b741c0..e9e266a 100644 --- a/Assets/Scripts/MessageAnnotation.cs +++ b/Assets/Scripts/MessageAnnotation.cs @@ -68,7 +68,10 @@ public CollectableMessageAnnotation(IValueCollector valueCollector, Action Date: Thu, 17 Oct 2019 03:32:11 +0900 Subject: [PATCH 330/453] :wrench: Reset value completely on remove edge --- Assets/Editor/Scripts/FlowEdge.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Editor/Scripts/FlowEdge.cs b/Assets/Editor/Scripts/FlowEdge.cs index d3d7883..e02310a 100644 --- a/Assets/Editor/Scripts/FlowEdge.cs +++ b/Assets/Editor/Scripts/FlowEdge.cs @@ -25,6 +25,9 @@ void IRemovableElement.RemoveFromGraphView() { case FlowMessageCollectPort messageCollectPort: messageCollectPort.CollectableMessageAnnotation.ValueCollector.SourceConnector = default; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.TargetConnector = default; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.TypeString = default; + messageCollectPort.CollectableMessageAnnotation.ValueCollector.CollectorKey = default; messageCollectPort.CollectableMessageAnnotation.ValueCollector.ComposerKey = default; break; } From a7c3728ae677dd03f7a1ae97eb0c4d0d79898d71 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 03:32:34 +0900 Subject: [PATCH 331/453] :wrench: Tweak GraphView --- Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs | 4 ++-- Assets/Scripts/Connector/ValueComparer/ComparerBase.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 2169e21..24358d3 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -140,8 +140,8 @@ IEnumerable IMessageCollectable.GetMessageCollect new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), new CollectableMessageAnnotation(UIBehaviourCollector, x => UIBehaviour = x), - new CollectableMessageAnnotation(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x), - new CollectableMessageAnnotation(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x), + new CollectableMessageAnnotation(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x, nameof(ActivateBeforeConnect)), + new CollectableMessageAnnotation(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x, nameof(DeactivateAfterConnect)), }; } } diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 9a81b32..3a99fa4 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -18,7 +18,7 @@ protected TValue Expect get => expect; private set => expect = value; } - protected TValue Actual { get; set; } + private TValue Actual { get; set; } [SerializeField] private TCollector expectCollector = default; [SerializeField] private TCollector actualCollector = default; @@ -46,7 +46,7 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Result, nameof(Result)), + new ComposableMessageAnnotation(() => Result, MessageParameterKey), }; } From 79985ac8fdaee70c5175ba53bfd5db2a3d531618 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 08:51:54 +0900 Subject: [PATCH 332/453] :sparkles: Implement EnumListProvider --- .../ValueProvider/EnumListProviderBase.cs | 32 +++++++++++++++++++ .../EnumListProviderBase.cs.meta | 3 ++ 2 files changed, 35 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs create mode 100644 Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs new file mode 100644 index 0000000..26405bf --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniRx; + +namespace UniFlow.Connector.ValueProvider +{ + public abstract class EnumListProviderBase : ConnectorBase, IMessageComposable where TEnum : Enum + { + public override IObservable OnConnectAsObservable() + { + return Enum.GetValues(typeof(TEnum)) + .Cast() + .Where(Filter) + .ToList() + .ToObservable() + .AsMessageObservable(this, typeof(TEnum).Name); + } + + protected virtual bool Filter(TEnum value) + { + return true; + } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + // Will compose parameter in OnConnectAsObservable() + new ComposableMessageAnnotation(null), + }; + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs.meta b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs.meta new file mode 100644 index 0000000..4a4c8a9 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cbf509b347434772875d74fc2b029a93 +timeCreated: 1571261896 \ No newline at end of file From 374f09c31d169844b399bd780a3474258674e59a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 08:52:15 +0900 Subject: [PATCH 333/453] :sparkles: Use DiContainer.InstantiatePrefab() instaed of Instantiate() to resolve bindings --- Assets/Scripts/Connector/Controller/InstantiateGameObject.cs | 5 ++++- .../Controller/InstantiateGameObjectWithInjectionBase.cs | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 8415468..9fb26a4 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UniFlow.Utility; using UnityEngine; +using Zenject; namespace UniFlow.Connector.Controller { @@ -32,9 +33,11 @@ private Transform Parent private GameObject Instantiated { get; set; } + [Inject] private DiContainer DiContainer { get; } + public override IObservable OnConnectAsObservable() { - Instantiated = Instantiate(Source, Parent); + Instantiated = DiContainer.InstantiatePrefab(Source, Parent); return ObservableFactory.ReturnMessage(this); } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs index 10cd2b0..83deb56 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs @@ -3,6 +3,7 @@ using System.Linq; using UniFlow.Utility; using UnityEngine; +using Zenject; namespace UniFlow.Connector.Controller { @@ -33,9 +34,11 @@ private Transform Parent private GameObject Instantiated { get; set; } + [Inject] private DiContainer DiContainer { get; } + public override IObservable OnConnectAsObservable() { - Instantiated = Instantiate(Source, Parent); + Instantiated = DiContainer.InstantiatePrefab(Source, Parent); GetMessageCollectableAnnotations().ToList().ForEach(x => x.Inject(Instantiated)); return ObservableFactory.ReturnMessage(this); } From 6f071c41b816f1c2c1f0effca92656b69c043a71 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 08:52:54 +0900 Subject: [PATCH 334/453] :sparkles: Support overwrite for SignalName --- .../Scripts/Connector/SignalPublisher/StringSignalPublisher.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index de8c1bc..86e91f6 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -53,6 +53,7 @@ private ScriptableObject ScriptableObjectParameter set => scriptableObjectParameter = value; } + [SerializeField] private StringCollector signalNameCollector = default; [SerializeField] private BoolCollector boolCollector = default; [SerializeField] private IntCollector intCollector = default; [SerializeField] private FloatCollector floatCollector = default; @@ -60,6 +61,7 @@ private ScriptableObject ScriptableObjectParameter [SerializeField] private ObjectCollector objectCollector = default; [SerializeField] private ScriptableObjectCollector scriptableObjectCollector = default; + private StringCollector SignalNameCollector => signalNameCollector; private BoolCollector BoolCollector => boolCollector; private IntCollector IntCollector => intCollector; private FloatCollector FloatCollector => floatCollector; @@ -87,6 +89,7 @@ StringSignal ISignalCreator.CreateSignal() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { + new CollectableMessageAnnotation(SignalNameCollector, x => SignalName = x, nameof(SignalName)), new CollectableMessageAnnotation(BoolCollector, x => BoolParameter = x, nameof(BoolParameter)), new CollectableMessageAnnotation(IntCollector, x => IntParameter = x, nameof(IntParameter)), new CollectableMessageAnnotation(FloatCollector, x => FloatParameter = x, nameof(FloatParameter)), From 0313b8337082dc16a37ed6137bde5a9b9c437232 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 08:53:08 +0900 Subject: [PATCH 335/453] :beetle: Fix GraphView --- Assets/Editor/Scripts/FlowGraphView.cs | 5 +++++ Assets/Editor/Scripts/FlowVisualElement.cs | 4 ++++ Assets/Editor/Scripts/SearchWindowProvider.cs | 7 ++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 4c88439..e28a707 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -166,6 +166,11 @@ public void Relocation(bool forceReset = false) Undo.CollapseUndoOperations(groupId); } + public void CollectConnectorsForSearchTree() + { + SearchWindowProvider.CalculateSearchTree(); + } + internal Vector2 NormalizeMousePosition(Vector2 mousePosition) { return contentViewContainer diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 3cf3bd6..01de18f 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -70,6 +70,10 @@ public void Initialize() Load(); Observable.TimerFrame(1).Subscribe(_ => FlowGraphView.Relocation(true)); } + if (GUILayout.Button("Refresh Connector List", EditorStyles.toolbarButton)) + { + FlowGraphView.CollectConnectorsForSearchTree(); + } if (UniFlowSettings.instance.SelectedGameObject != default) { diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 024421a..1573ebf 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -42,11 +42,16 @@ public void Initialize(FlowGraphView flowGraphView) DummyIcon.SetPixel(0, 0, new Color(0, 0, 0, 0)); DummyIcon.Apply(); + CalculateSearchTree(); + } + + public void CalculateSearchTree() + { + SearchTreeGroupEntries.Clear(); SearchTreeEntries = new List { new SearchTreeGroupEntry(new GUIContent("Add Node")) }; - AppDomain .CurrentDomain .GetAssemblies() From 6e97f1f3f47133dea6d355ce66d40aaf5cc2045d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 08:54:48 +0900 Subject: [PATCH 336/453] :clipboard: Bump up version to v0.1.0-preview.29 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 445e1ad..34132d7 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.28", + "version": "0.1.0-preview.29", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 938711b055a7e3b4aa5f9fd862e1c31939366725 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 19:02:18 +0900 Subject: [PATCH 337/453] :wrench: Tweak Connectors order --- Assets/Editor/Scripts/SearchWindowProvider.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 1573ebf..f84896a 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -63,7 +63,8 @@ public void CalculateSearchTree() .Select(x => (x.menu, x.type, x.entries, directory: x.entries.Take(x.entries.Length - 1).Aggregate((a, b) => $"{a}/{b}"))) .Select(x => (x.menu, x.type, x.entries, x.directory, directoryOrder: DirectoryOrder.Contains(x.entries.FirstOrDefault()) ? DirectoryOrder.Select((directory, index) => (directory, index)).First(y => y.directory == x.entries.FirstOrDefault()).index : int.MaxValue)) .OrderBy(x => x.directoryOrder) - .ThenBy(x => x.menu.componentOrder) + .GroupBy(x => x.directory) + .SelectMany(x => x.OrderBy(y => y.entries.LastOrDefault())) .ToList() .ForEach( item => From c02a87e72bc78a71e6fce9ba924aad10637b4d66 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 19:58:04 +0900 Subject: [PATCH 338/453] :sparkles: Use Factory method to create annotation for messaging --- .../Controller/ActivationController.cs | 6 ++-- .../Connector/Controller/AnimatorTrigger.cs | 8 ++--- .../Connector/Controller/AudioController.cs | 8 ++--- .../Controller/InstantiateGameObject.cs | 6 ++-- .../InstantiateGameObjectWithInjectionBase.cs | 6 ++-- .../Controller/MoveParentTransform.cs | 6 ++-- .../Controller/PlayableController.cs | 8 ++--- .../Controller/SimpleAnimationController.cs | 10 +++--- .../Controller/TimeScaleController.cs | 6 ++-- .../Controller/TransformSiblingController.cs | 4 +-- .../Scripts/Connector/Event/AnimationEvent.cs | 12 +++---- Assets/Scripts/Connector/Event/AudioEvent.cs | 8 ++--- Assets/Scripts/Connector/Event/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 2 +- .../Scripts/Connector/Event/ParticleEvent.cs | 2 +- .../Event/PhysicsCollision2DEvent.cs | 2 +- .../Connector/Event/PhysicsCollisionEvent.cs | 3 +- .../Connector/Event/PhysicsTrigger2DEvent.cs | 2 +- .../Connector/Event/PhysicsTriggerEvent.cs | 2 +- .../Connector/Event/RectTransformEvent.cs | 2 +- .../Connector/Event/SimpleAnimationEvent.cs | 10 +++--- .../Scripts/Connector/Event/TimelineEvent.cs | 8 ++--- .../Scripts/Connector/Event/TransformEvent.cs | 2 +- .../Event/UIBehaviourEventTrigger.cs | 10 +++--- Assets/Scripts/Connector/Expression/And.cs | 2 +- Assets/Scripts/Connector/Expression/Not.cs | 2 +- Assets/Scripts/Connector/Expression/Or.cs | 2 +- Assets/Scripts/Connector/Expression/Xor.cs | 4 +-- Assets/Scripts/Connector/Misc/Toss.cs | 2 +- .../SignalPublisher/StringSignalPublisher.cs | 14 ++++---- .../SignalReceiver/StringSignalReceiver.cs | 14 ++++---- .../Connector/ValueComparer/ComparerBase.cs | 10 +++--- .../ValueComparer/EnumComparerBase.cs | 2 +- .../Connector/ValueInjector/ImageInjector.cs | 8 ++--- .../ValueInjector/RawImageInjector.cs | 8 ++--- .../Timeline/AnimationTrackInjector.cs | 12 +++---- .../Timeline/AudioTrackInjector.cs | 12 +++---- .../Timeline/ControlTrackInjector.cs | 14 ++++---- .../ValueProvider/Color32Provider.cs | 10 +++--- .../Connector/ValueProvider/ColorProvider.cs | 10 +++--- .../ValueProvider/EnumListProviderBase.cs | 2 +- .../ValueProvider/ListProviderBase.cs | 4 +-- .../ValueProvider/QuaternionProvider.cs | 14 ++++---- .../Connector/ValueProvider/SelectorBase.cs | 4 +-- .../ValueProvider/Vector2IntProvider.cs | 6 ++-- .../ValueProvider/Vector2Provider.cs | 6 ++-- .../ValueProvider/Vector3IntProvider.cs | 8 ++--- .../ValueProvider/Vector3Provider.cs | 8 ++--- .../ValueProvider/Vector4Provider.cs | 10 +++--- Assets/Scripts/MessageAnnotation.cs | 34 +++++++++++++------ 50 files changed, 186 insertions(+), 171 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 0c0d5c9..964c9d0 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -60,9 +60,9 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(ActivatedCollector, x => Activated = x, nameof(Activated)), - new CollectableMessageAnnotation(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), - new CollectableMessageAnnotation(TargetBehaviourCollector, x => TargetBehaviour = x, nameof(TargetBehaviour)), + CollectableMessageAnnotation.Create(ActivatedCollector, x => Activated = x, nameof(Activated)), + CollectableMessageAnnotation.Create(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), + CollectableMessageAnnotation.Create(TargetBehaviourCollector, x => TargetBehaviour = x, nameof(TargetBehaviour)), }; } } diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 73b2b20..88b2fba 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -59,10 +59,10 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), - new CollectableMessageAnnotation(TriggerNameCollector, x => TriggerName = x, nameof(TriggerName)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotation.Create(TriggerNameCollector, x => TriggerName = x, nameof(TriggerName)), }; } } diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index e71b623..06949c9 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -85,10 +85,10 @@ private void InvokeAudioSourceMethod() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(AudioSourceCollector, x => AudioSource = x), - new CollectableMessageAnnotation(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), }; } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 9fb26a4..fd74d54 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -44,14 +44,14 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(SourceCollector, x => Source = x, nameof(Source)), - new CollectableMessageAnnotation(ParentCollector, x => Parent = x, nameof(Parent)), + CollectableMessageAnnotation.Create(SourceCollector, x => Source = x, nameof(Source)), + CollectableMessageAnnotation.Create(ParentCollector, x => Parent = x, nameof(Parent)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Instantiated, nameof(Instantiated)), + ComposableMessageAnnotation.Create(() => Instantiated, nameof(Instantiated)), }; } } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs index 83deb56..216ac60 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs @@ -46,8 +46,8 @@ public override IObservable OnConnectAsObservable() protected virtual IEnumerable GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(SourceCollector, x => Source = x, nameof(Source)), - new CollectableMessageAnnotation(ParentCollector, x => Parent = x, nameof(Parent)), + CollectableMessageAnnotation.Create(SourceCollector, x => Source = x, nameof(Source)), + CollectableMessageAnnotation.Create(ParentCollector, x => Parent = x, nameof(Parent)), }; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => @@ -56,7 +56,7 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Instantiated), + ComposableMessageAnnotation.Create(() => Instantiated), }; } } diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index e6ab542..62573b9 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -49,9 +49,9 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), - new CollectableMessageAnnotation(ParentTransformCollector, x => ParentTransform = x, nameof(ParentTransform)), - new CollectableMessageAnnotation(WorldPositionStaysCollector, x => WorldPositionStays = x, nameof(WorldPositionStays)), + CollectableMessageAnnotation.Create(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), + CollectableMessageAnnotation.Create(ParentTransformCollector, x => ParentTransform = x, nameof(ParentTransform)), + CollectableMessageAnnotation.Create(WorldPositionStaysCollector, x => WorldPositionStays = x, nameof(WorldPositionStays)), }; } } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index decb65f..4dd600d 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -88,10 +88,10 @@ private void InvokePlayableDirectorMethod() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x), - new CollectableMessageAnnotation(TimelineAssetCollector, x => TimelineAsset = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x), + CollectableMessageAnnotation.Create(TimelineAssetCollector, x => TimelineAsset = x), }; } diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 2e1ba87..1ab2bae 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -133,11 +133,11 @@ private void OnDestroy() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), - new CollectableMessageAnnotation(SimpleAnimationCollector, x => SimpleAnimation = x), - new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotation.Create(SimpleAnimationCollector, x => SimpleAnimation = x), + CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x), }; } diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 88ad99f..438bae6 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -70,9 +70,9 @@ private void ChangeTimeScale() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(TimeScaleCollector, x => TimeScale = x, nameof(TimeScale)), - new CollectableMessageAnnotation(DurationCollector, x => Duration = x, nameof(Duration)), - new CollectableMessageAnnotation(EaseTypeCollector, x => EaseType = x, nameof(EaseType)), + CollectableMessageAnnotation.Create(TimeScaleCollector, x => TimeScale = x, nameof(TimeScale)), + CollectableMessageAnnotation.Create(DurationCollector, x => Duration = x, nameof(Duration)), + CollectableMessageAnnotation.Create(EaseTypeCollector, x => EaseType = x, nameof(EaseType)), }; } } diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs index 1742da2..33a9c76 100644 --- a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs @@ -53,8 +53,8 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), - new CollectableMessageAnnotation(IndexCollector, x => Index = x, nameof(Index)), + CollectableMessageAnnotation.Create(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), + CollectableMessageAnnotation.Create(IndexCollector, x => Index = x, nameof(Index)), }; } diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 06494d8..783e70b 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -107,17 +107,17 @@ private void PrepareAnimationEvent() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), - new CollectableMessageAnnotation(SimpleAnimationCollector, x => SimpleAnimation = x), - new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotation.Create(SimpleAnimationCollector, x => SimpleAnimation = x), + CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => LatestAnimationEvent), + ComposableMessageAnnotation.Create(() => LatestAnimationEvent), }; } } diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 8a04bd8..20033de 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -116,10 +116,10 @@ private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(AudioSourceCollector, x => AudioSource = x), - new CollectableMessageAnnotation(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), }; } diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 1926023..c6739a2 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -43,7 +43,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 488f84c..c7d7a21 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -58,7 +58,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index cc4eb16..a8bc42d 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -48,7 +48,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 40a12b3..9da6c29 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -47,7 +47,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index 0d933ce..94a9c3e 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Reflection; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -47,7 +48,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 1f4ef40..5a03a81 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -47,7 +47,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index 9777c4e..f65af67 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -47,7 +47,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index 77cb054..c67a6d9 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -46,7 +46,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 7121cb8..275b582 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -113,11 +113,11 @@ private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTim IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(AnimatorCollector, x => Animator = x), - new CollectableMessageAnnotation(SimpleAnimationCollector, x => SimpleAnimation = x), - new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotation.Create(SimpleAnimationCollector, x => SimpleAnimation = x), + CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x), }; } diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index fda5888..a18b567 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -167,10 +167,10 @@ private void DispatchEnd() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x), - new CollectableMessageAnnotation(TimelineAssetCollector, x => TimelineAsset = x), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x), + CollectableMessageAnnotation.Create(TimelineAssetCollector, x => TimelineAsset = x), }; } diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 20c8fb6..c4ac1de 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -46,7 +46,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ComponentCollector, x => Component = x), + CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 24358d3..faccc5e 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -137,11 +137,11 @@ private void OnDestroy() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(UIBehaviourCollector, x => UIBehaviour = x), - new CollectableMessageAnnotation(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x, nameof(ActivateBeforeConnect)), - new CollectableMessageAnnotation(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x, nameof(DeactivateAfterConnect)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(UIBehaviourCollector, x => UIBehaviour = x), + CollectableMessageAnnotation.Create(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x, nameof(ActivateBeforeConnect)), + CollectableMessageAnnotation.Create(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x, nameof(DeactivateAfterConnect)), }; } } diff --git a/Assets/Scripts/Connector/Expression/And.cs b/Assets/Scripts/Connector/Expression/And.cs index 8f2fb9f..d38a9d7 100644 --- a/Assets/Scripts/Connector/Expression/And.cs +++ b/Assets/Scripts/Connector/Expression/And.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ValueCollector, x => Value = x, nameof(Value)), + CollectableMessageAnnotation.Create(ValueCollector, x => Value = x, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Expression/Not.cs b/Assets/Scripts/Connector/Expression/Not.cs index 6ea867c..a11ccfe 100644 --- a/Assets/Scripts/Connector/Expression/Not.cs +++ b/Assets/Scripts/Connector/Expression/Not.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ValueCollector, x => Value = x, nameof(Value)), + CollectableMessageAnnotation.Create(ValueCollector, x => Value = x, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Expression/Or.cs b/Assets/Scripts/Connector/Expression/Or.cs index e3f26b0..15ceb7e 100644 --- a/Assets/Scripts/Connector/Expression/Or.cs +++ b/Assets/Scripts/Connector/Expression/Or.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ValueCollector, x => Value = x, nameof(Value)), + CollectableMessageAnnotation.Create(ValueCollector, x => Value = x, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Expression/Xor.cs b/Assets/Scripts/Connector/Expression/Xor.cs index de29ff9..8196387 100644 --- a/Assets/Scripts/Connector/Expression/Xor.cs +++ b/Assets/Scripts/Connector/Expression/Xor.cs @@ -25,8 +25,8 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(LeftCollector, x => Left = x, nameof(Left)), - new CollectableMessageAnnotation(RightCollector, x => Right = x, nameof(Right)), + CollectableMessageAnnotation.Create(LeftCollector, x => Left = x, nameof(Left)), + CollectableMessageAnnotation.Create(RightCollector, x => Right = x, nameof(Right)), }; } } diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index f9a8445..bdf0acc 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -34,7 +34,7 @@ public override IObservable OnConnectAsObservable() public IEnumerable GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), + CollectableMessageAnnotation.Create(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), }; } } diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index 86e91f6..742b87c 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -89,13 +89,13 @@ StringSignal ISignalCreator.CreateSignal() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(SignalNameCollector, x => SignalName = x, nameof(SignalName)), - new CollectableMessageAnnotation(BoolCollector, x => BoolParameter = x, nameof(BoolParameter)), - new CollectableMessageAnnotation(IntCollector, x => IntParameter = x, nameof(IntParameter)), - new CollectableMessageAnnotation(FloatCollector, x => FloatParameter = x, nameof(FloatParameter)), - new CollectableMessageAnnotation(StringCollector, x => StringParameter = x, nameof(StringParameter)), - new CollectableMessageAnnotation(ObjectCollector, x => ObjectParameter = x, nameof(ObjectParameter)), - new CollectableMessageAnnotation(ScriptableObjectCollector, x => ScriptableObjectParameter = x, nameof(ScriptableObjectParameter)), + CollectableMessageAnnotation.Create(SignalNameCollector, x => SignalName = x, nameof(SignalName)), + CollectableMessageAnnotation.Create(BoolCollector, x => BoolParameter = x, nameof(BoolParameter)), + CollectableMessageAnnotation.Create(IntCollector, x => IntParameter = x, nameof(IntParameter)), + CollectableMessageAnnotation.Create(FloatCollector, x => FloatParameter = x, nameof(FloatParameter)), + CollectableMessageAnnotation.Create(StringCollector, x => StringParameter = x, nameof(StringParameter)), + CollectableMessageAnnotation.Create(ObjectCollector, x => ObjectParameter = x, nameof(ObjectParameter)), + CollectableMessageAnnotation.Create(ScriptableObjectCollector, x => ScriptableObjectParameter = x, nameof(ScriptableObjectParameter)), }; } } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 288d780..182e171 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -42,18 +42,18 @@ protected override void OnReceive(StringSignal receivedSignal) IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(SignalNameCollector, x => SignalName = x, nameof(SignalName)), + CollectableMessageAnnotation.Create(SignalNameCollector, x => SignalName = x, nameof(SignalName)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Signal.Parameter.BoolValue, "BoolParameter"), - new ComposableMessageAnnotation(() => Signal.Parameter.IntValue, "IntParameter"), - new ComposableMessageAnnotation(() => Signal.Parameter.FloatValue, "FloatParameter"), - new ComposableMessageAnnotation(() => Signal.Parameter.StringValue, "StringParameter"), - new ComposableMessageAnnotation(() => Signal.Parameter.ObjectValue, "ObjectParameter"), - new ComposableMessageAnnotation(() => Signal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), + ComposableMessageAnnotation.Create(() => Signal.Parameter.BoolValue, "BoolParameter"), + ComposableMessageAnnotation.Create(() => Signal.Parameter.IntValue, "IntParameter"), + ComposableMessageAnnotation.Create(() => Signal.Parameter.FloatValue, "FloatParameter"), + ComposableMessageAnnotation.Create(() => Signal.Parameter.StringValue, "StringParameter"), + ComposableMessageAnnotation.Create(() => Signal.Parameter.ObjectValue, "ObjectParameter"), + ComposableMessageAnnotation.Create(() => Signal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), }; } } diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 3a99fa4..424e8cf 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -7,7 +7,7 @@ namespace UniFlow.Connector.ValueComparer { public abstract class ComparerBase : ConnectorBase, IMessageCollectable, IMessageComposable - where TCollector : ValueCollectorBase + where TCollector : ValueCollectorBase, new() { private const string MessageParameterKey = "Result"; @@ -39,20 +39,20 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(ExpectCollector, x => Expect = x, nameof(Expect)), - new CollectableMessageAnnotation(ActualCollector, x => Actual = x, nameof(Actual)), + CollectableMessageAnnotation.Create(ExpectCollector, x => Expect = x, nameof(Expect)), + CollectableMessageAnnotation.Create(ActualCollector, x => Actual = x, nameof(Actual)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Result, MessageParameterKey), + ComposableMessageAnnotation.Create(() => Result, MessageParameterKey), }; } public abstract class ComparerBase : ComparerBase where TOperator : Enum - where TCollector : ValueCollectorBase + where TCollector : ValueCollectorBase, new() { [SerializeField] private TOperator @operator = default; diff --git a/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs index 070f965..77df5e7 100644 --- a/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/EnumComparerBase.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { public abstract class EnumComparerBase : ComparerBase.OperatorType, TCollector> - where TCollector : ValueCollectorBase + where TCollector : ValueCollectorBase, new() where TEnum : Enum { protected override bool Compare(TEnum actual) diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index c134eaa..424efb8 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -54,10 +54,10 @@ protected override void Inject() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(ImageCollector, x => Image = x, nameof(Image)), - new CollectableMessageAnnotation(SpriteCollector, x => Sprite = x, nameof(Sprite)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(ImageCollector, x => Image = x, nameof(Image)), + CollectableMessageAnnotation.Create(SpriteCollector, x => Sprite = x, nameof(Sprite)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index 4767e4e..147742b 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -54,10 +54,10 @@ protected override void Inject() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(RawImageCollector, x => RawImage = x, nameof(RawImage)), - new CollectableMessageAnnotation(TextureCollector, x => Texture = x, nameof(Texture)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(RawImageCollector, x => RawImage = x, nameof(RawImage)), + CollectableMessageAnnotation.Create(TextureCollector, x => Texture = x, nameof(Texture)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index 1e56659..7a66a4b 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -70,12 +70,12 @@ protected override void Inject(AnimationPlayableAsset playableAsset) IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), - new CollectableMessageAnnotation(TrackNameCollector, x => TrackName = x, nameof(TrackName)), - new CollectableMessageAnnotation(ClipNameCollector, x => ClipName = x, nameof(ClipName)), - new CollectableMessageAnnotation(AnimationClipCollector, x => AnimationClip = x, nameof(AnimationClip)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + CollectableMessageAnnotation.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + CollectableMessageAnnotation.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x, nameof(AnimationClip)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 3f71df7..2ce0932 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -70,12 +70,12 @@ protected override void Inject(AudioPlayableAsset playableAsset) IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), - new CollectableMessageAnnotation(TrackNameCollector, x => TrackName = x, nameof(TrackName)), - new CollectableMessageAnnotation(ClipNameCollector, x => ClipName = x, nameof(ClipName)), - new CollectableMessageAnnotation(AudioClipCollector, x => AudioClip = x, nameof(AudioClip)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + CollectableMessageAnnotation.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + CollectableMessageAnnotation.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x, nameof(AudioClip)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 0b56f6c..6dddc88 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -85,13 +85,13 @@ protected override void Inject(ControlPlayableAsset playableAsset) IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - new CollectableMessageAnnotation(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - new CollectableMessageAnnotation(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), - new CollectableMessageAnnotation(TrackNameCollector, x => TrackName = x, nameof(TrackName)), - new CollectableMessageAnnotation(ClipNameCollector, x => ClipName = x, nameof(ClipName)), - new CollectableMessageAnnotation(SourceGameObjectCollector, x => SourceGameObject = x, nameof(SourceGameObject)), - new CollectableMessageAnnotation(PrefabGameObjectCollector, x => PrefabGameObject = x, nameof(PrefabGameObject)), + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + CollectableMessageAnnotation.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + CollectableMessageAnnotation.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + CollectableMessageAnnotation.Create(SourceGameObjectCollector, x => SourceGameObject = x, nameof(SourceGameObject)), + CollectableMessageAnnotation.Create(PrefabGameObjectCollector, x => PrefabGameObject = x, nameof(PrefabGameObject)), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 45e0b92..0b37700 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -19,16 +19,16 @@ public class Color32Provider : ProviderBase, IMessageCollectable, IMess IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(RCollector, x => Value = new Color32(x, Value.g, Value.b, Value.a), "R"), - new CollectableMessageAnnotation(GCollector, x => Value = new Color32(Value.r, x, Value.b, Value.a), "G"), - new CollectableMessageAnnotation(BCollector, x => Value = new Color32(Value.r, Value.g, x, Value.a), "B"), - new CollectableMessageAnnotation(ACollector, x => Value = new Color32(Value.r, Value.g, Value.b, x), "A"), + CollectableMessageAnnotation.Create(RCollector, x => Value = new Color32(x, Value.g, Value.b, Value.a), "R"), + CollectableMessageAnnotation.Create(GCollector, x => Value = new Color32(Value.r, x, Value.b, Value.a), "G"), + CollectableMessageAnnotation.Create(BCollector, x => Value = new Color32(Value.r, Value.g, x, Value.a), "B"), + CollectableMessageAnnotation.Create(ACollector, x => Value = new Color32(Value.r, Value.g, Value.b, x), "A"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index d604373..a56cf36 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -19,16 +19,16 @@ public class ColorProvider : ProviderBase, IMessageCollectable, IMessageC IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(RCollector, x => Value = new Color(x, Value.g, Value.b, Value.a), "R"), - new CollectableMessageAnnotation(GCollector, x => Value = new Color(Value.r, x, Value.b, Value.a), "G"), - new CollectableMessageAnnotation(BCollector, x => Value = new Color(Value.r, Value.g, x, Value.a), "B"), - new CollectableMessageAnnotation(ACollector, x => Value = new Color(Value.r, Value.g, Value.b, x), "A"), + CollectableMessageAnnotation.Create(RCollector, x => Value = new Color(x, Value.g, Value.b, Value.a), "R"), + CollectableMessageAnnotation.Create(GCollector, x => Value = new Color(Value.r, x, Value.b, Value.a), "G"), + CollectableMessageAnnotation.Create(BCollector, x => Value = new Color(Value.r, Value.g, x, Value.a), "B"), + CollectableMessageAnnotation.Create(ACollector, x => Value = new Color(Value.r, Value.g, Value.b, x), "A"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs index 26405bf..e91e6db 100644 --- a/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs @@ -26,7 +26,7 @@ IEnumerable IMessageComposable.GetMessageComposabl new[] { // Will compose parameter in OnConnectAsObservable() - new ComposableMessageAnnotation(null), + ComposableMessageAnnotation.Create(null), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index 31ac5d9..b7c548b 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -33,14 +33,14 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation>(ValuesCollector, x => Values = x, $"{typeof(TValue).Name}List"), + CollectableMessageAnnotation>.Create(ValuesCollector, x => Values = x, $"{typeof(TValue).Name}List"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { // Will compose parameter in OnConnectAsObservable() - new ComposableMessageAnnotation(null), + ComposableMessageAnnotation.Create(null), }; } diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index e1d43dc..3eb0f18 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -21,18 +21,18 @@ public class QuaternionProvider : ProviderBase, IMessageCollectable, IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(XCollector, v => Value = new Quaternion(v, Value.y, Value.z, Value.w), "X"), - new CollectableMessageAnnotation(YCollector, v => Value = new Quaternion(Value.x, v, Value.z, Value.w), "Y"), - new CollectableMessageAnnotation(ZCollector, v => Value = new Quaternion(Value.x, Value.y, v, Value.w), "Z"), - new CollectableMessageAnnotation(WCollector, v => Value = new Quaternion(Value.x, Value.y, Value.z, v), "W"), - new CollectableMessageAnnotation(EulerAngleCollector, v => Value = Quaternion.Euler(v), "EulerAngle"), + CollectableMessageAnnotation.Create(XCollector, v => Value = new Quaternion(v, Value.y, Value.z, Value.w), "X"), + CollectableMessageAnnotation.Create(YCollector, v => Value = new Quaternion(Value.x, v, Value.z, Value.w), "Y"), + CollectableMessageAnnotation.Create(ZCollector, v => Value = new Quaternion(Value.x, Value.y, v, Value.w), "Z"), + CollectableMessageAnnotation.Create(WCollector, v => Value = new Quaternion(Value.x, Value.y, Value.z, v), "W"), + CollectableMessageAnnotation.Create(EulerAngleCollector, v => Value = Quaternion.Euler(v), "EulerAngle"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Value), - new ComposableMessageAnnotation(() => Value.eulerAngles), + ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotation.Create(() => Value.eulerAngles), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index aa0ef43..8cb1bb6 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -32,13 +32,13 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - new ComposableMessageAnnotation(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), + ComposableMessageAnnotation.Create(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), }; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - new CollectableMessageAnnotation(KeyCollector, x => Key = x), + CollectableMessageAnnotation.Create(KeyCollector, x => Key = x), }; } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index 16fb92b..fe8bd3b 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -15,14 +15,14 @@ public class Vector2IntProvider : ProviderBase, IMessageCollectable, IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(XCollector, v => Value = new Vector2Int(v, Value.y), "X"), - new CollectableMessageAnnotation(YCollector, v => Value = new Vector2Int(Value.x, v), "Y"), + CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector2Int(v, Value.y), "X"), + CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector2Int(Value.x, v), "Y"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index b559725..804cd08 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -15,14 +15,14 @@ public class Vector2Provider : ProviderBase, IMessageCollectable, IMess IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(XCollector, v => Value = new Vector2(v, Value.y), "X"), - new CollectableMessageAnnotation(YCollector, v => Value = new Vector2(Value.x, v), "Y"), + CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector2(v, Value.y), "X"), + CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector2(Value.x, v), "Y"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index b9c2c6b..74c6176 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -17,15 +17,15 @@ public class Vector3IntProvider : ProviderBase, IMessageCollectable, IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(XCollector, v => Value = new Vector3Int(v, Value.y, Value.z), "X"), - new CollectableMessageAnnotation(YCollector, v => Value = new Vector3Int(Value.x, v, Value.z), "Y"), - new CollectableMessageAnnotation(ZCollector, v => Value = new Vector3Int(Value.x, Value.y, v), "Z"), + CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector3Int(v, Value.y, Value.z), "X"), + CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector3Int(Value.x, v, Value.z), "Y"), + CollectableMessageAnnotation.Create(ZCollector, v => Value = new Vector3Int(Value.x, Value.y, v), "Z"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index a2d264a..ccc88dd 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -17,15 +17,15 @@ public class Vector3Provider : ProviderBase, IMessageCollectable, IMess IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(XCollector, v => Value = new Vector3(v, Value.y, Value.z), "X"), - new CollectableMessageAnnotation(YCollector, v => Value = new Vector3(Value.x, v, Value.z), "Y"), - new CollectableMessageAnnotation(ZCollector, v => Value = new Vector3(Value.x, Value.y, v), "Z"), + CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector3(v, Value.y, Value.z), "X"), + CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector3(Value.x, v, Value.z), "Y"), + CollectableMessageAnnotation.Create(ZCollector, v => Value = new Vector3(Value.x, Value.y, v), "Z"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index aa27317..e26579f 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -19,16 +19,16 @@ public class Vector4Provider : ProviderBase, IMessageCollectable, IMess IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new ICollectableMessageAnnotation[] { - new CollectableMessageAnnotation(XCollector, v => Value = new Vector4(v, Value.y, Value.z, Value.w), "X"), - new CollectableMessageAnnotation(YCollector, v => Value = new Vector4(Value.x, v, Value.z, Value.w), "Y"), - new CollectableMessageAnnotation(ZCollector, v => Value = new Vector4(Value.x, Value.y, v, Value.w), "Z"), - new CollectableMessageAnnotation(WCollector, v => Value = new Vector4(Value.x, Value.y, Value.z, v), "W"), + CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector4(v, Value.y, Value.z, Value.w), "X"), + CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector4(Value.x, v, Value.z, Value.w), "Y"), + CollectableMessageAnnotation.Create(ZCollector, v => Value = new Vector4(Value.x, Value.y, v, Value.w), "Z"), + CollectableMessageAnnotation.Create(WCollector, v => Value = new Vector4(Value.x, Value.y, Value.z, v), "W"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new IComposableMessageAnnotation[] { - new ComposableMessageAnnotation(() => Value), + ComposableMessageAnnotation.Create(() => Value), }; } } diff --git a/Assets/Scripts/MessageAnnotation.cs b/Assets/Scripts/MessageAnnotation.cs index e9e266a..6400b70 100644 --- a/Assets/Scripts/MessageAnnotation.cs +++ b/Assets/Scripts/MessageAnnotation.cs @@ -12,11 +12,7 @@ public interface IComposableMessageAnnotation public class ComposableMessageAnnotation : IComposableMessageAnnotation { - public ComposableMessageAnnotation(Func callback) : this(callback, typeof(TValue).Name) - { - } - - public ComposableMessageAnnotation(Func callback, string key) + private ComposableMessageAnnotation(Func callback, string key) { Type = typeof(TValue); Callback = callback; @@ -36,6 +32,16 @@ Message IComposableMessageAnnotation.Compose(Message message) return message; } + + public static ComposableMessageAnnotation Create(Func callback) + { + return Create(callback, typeof(TValue).Name); + } + + public static ComposableMessageAnnotation Create(Func callback, string key) + { + return new ComposableMessageAnnotation(callback, key); + } } public interface ICollectableMessageAnnotation @@ -49,11 +55,7 @@ public interface ICollectableMessageAnnotation public class CollectableMessageAnnotation : ICollectableMessageAnnotation { - public CollectableMessageAnnotation(IValueCollector valueCollector, Action callback) : this(valueCollector, callback, typeof(TValue).Name) - { - } - - public CollectableMessageAnnotation(IValueCollector valueCollector, Action callback, string key) + private CollectableMessageAnnotation(IValueCollector valueCollector, Action callback, string key) { Type = typeof(TValue); ValueCollector = valueCollector; @@ -89,5 +91,17 @@ private TValue GetValue() return result; } + + public static CollectableMessageAnnotation Create(TValueCollector valueCollector, Action callback) + where TValueCollector : ValueCollectorBase, new() + { + return Create(valueCollector, callback, typeof(TValue).Name); + } + + public static CollectableMessageAnnotation Create(TValueCollector valueCollector, Action callback, string key) + where TValueCollector : ValueCollectorBase, new() + { + return new CollectableMessageAnnotation(valueCollector ?? new TValueCollector(), callback, key); + } } } From 679cc78c07de8af33f63f9559f37260ee6708f50 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 20:16:16 +0900 Subject: [PATCH 339/453] :beetle: Initialize collector fields to connect collectly in GraphView --- .../Connector/Controller/ActivationController.cs | 6 +++--- .../Connector/Controller/AnimatorTrigger.cs | 8 ++++---- .../Connector/Controller/AudioController.cs | 8 ++++---- .../Connector/Controller/InstantiateGameObject.cs | 4 ++-- .../InstantiateGameObjectWithInjectionBase.cs | 4 ++-- .../Connector/Controller/MoveParentTransform.cs | 6 +++--- .../Connector/Controller/PlayableController.cs | 8 ++++---- .../Controller/SimpleAnimationController.cs | 10 +++++----- .../Connector/Controller/TimeScaleController.cs | 6 +++--- .../Controller/TransformSiblingController.cs | 4 ++-- Assets/Scripts/Connector/Event/AnimationEvent.cs | 10 +++++----- Assets/Scripts/Connector/Event/AudioEvent.cs | 8 ++++---- Assets/Scripts/Connector/Event/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 2 +- Assets/Scripts/Connector/Event/ParticleEvent.cs | 2 +- .../Connector/Event/PhysicsCollision2DEvent.cs | 2 +- .../Connector/Event/PhysicsCollisionEvent.cs | 2 +- .../Connector/Event/PhysicsTrigger2DEvent.cs | 2 +- .../Scripts/Connector/Event/PhysicsTriggerEvent.cs | 2 +- .../Scripts/Connector/Event/RectTransformEvent.cs | 2 +- .../Connector/Event/SimpleAnimationEvent.cs | 10 +++++----- Assets/Scripts/Connector/Event/TimelineEvent.cs | 8 ++++---- Assets/Scripts/Connector/Event/TransformEvent.cs | 2 +- .../Connector/Event/UIBehaviourEventTrigger.cs | 10 +++++----- Assets/Scripts/Connector/Expression/And.cs | 2 +- Assets/Scripts/Connector/Expression/Not.cs | 2 +- Assets/Scripts/Connector/Expression/Or.cs | 2 +- Assets/Scripts/Connector/Expression/Xor.cs | 4 ++-- Assets/Scripts/Connector/Misc/Toss.cs | 2 +- .../SignalPublisher/StringSignalPublisher.cs | 14 +++++++------- .../SignalReceiver/StringSignalReceiver.cs | 2 +- .../Connector/ValueComparer/ComparerBase.cs | 4 ++-- .../Connector/ValueInjector/ImageInjector.cs | 8 ++++---- .../Connector/ValueInjector/RawImageInjector.cs | 8 ++++---- .../Timeline/AnimationTrackInjector.cs | 12 ++++++------ .../ValueInjector/Timeline/AudioTrackInjector.cs | 12 ++++++------ .../ValueInjector/Timeline/ControlTrackInjector.cs | 14 +++++++------- .../Connector/ValueProvider/Color32Provider.cs | 8 ++++---- .../Connector/ValueProvider/ColorProvider.cs | 8 ++++---- .../Connector/ValueProvider/ListProviderBase.cs | 2 +- .../Connector/ValueProvider/QuaternionProvider.cs | 10 +++++----- .../Connector/ValueProvider/SelectorBase.cs | 2 +- .../Connector/ValueProvider/Vector2IntProvider.cs | 4 ++-- .../Connector/ValueProvider/Vector2Provider.cs | 4 ++-- .../Connector/ValueProvider/Vector3IntProvider.cs | 6 +++--- .../Connector/ValueProvider/Vector3Provider.cs | 6 +++--- .../Connector/ValueProvider/Vector4Provider.cs | 8 ++++---- 47 files changed, 136 insertions(+), 136 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 964c9d0..3f727de 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -39,9 +39,9 @@ private bool Activated set => activated = value; } - [SerializeField] private BoolCollector activatedCollector = default; - [SerializeField] private GameObjectCollector targetGameObjectCollector = default; - [SerializeField] private BehaviourCollector targetBehaviourCollector = default; + [SerializeField] private BoolCollector activatedCollector = new BoolCollector(); + [SerializeField] private GameObjectCollector targetGameObjectCollector = new GameObjectCollector(); + [SerializeField] private BehaviourCollector targetBehaviourCollector = new BehaviourCollector(); private BoolCollector ActivatedCollector => activatedCollector; private GameObjectCollector TargetGameObjectCollector => targetGameObjectCollector; diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 88b2fba..e8f585e 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -38,10 +38,10 @@ private string TriggerName set => triggerName = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private AnimatorCollector animatorCollector = default; - [SerializeField] private StringCollector triggerNameCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private AnimatorCollector animatorCollector = new AnimatorCollector(); + [SerializeField] private StringCollector triggerNameCollector = new StringCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 06949c9..a402fa5 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -40,10 +40,10 @@ private AudioClip AudioClip set => audioClip = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private AudioSourceCollector audioSourceCollector = default; - [SerializeField] private AudioClipCollector audioClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); + [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index fd74d54..01fc1df 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -25,8 +25,8 @@ private Transform Parent set => parent = value; } - [SerializeField] private GameObjectCollector sourceCollector = default; - [SerializeField] private TransformCollector parentCollector = default; + [SerializeField] private GameObjectCollector sourceCollector = new GameObjectCollector(); + [SerializeField] private TransformCollector parentCollector = new TransformCollector(); private GameObjectCollector SourceCollector => sourceCollector; private TransformCollector ParentCollector => parentCollector; diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs index 216ac60..eb18071 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs @@ -26,8 +26,8 @@ private Transform Parent set => parent = value; } - [SerializeField] private GameObjectCollector sourceCollector = default; - [SerializeField] private TransformCollector parentCollector = default; + [SerializeField] private GameObjectCollector sourceCollector = new GameObjectCollector(); + [SerializeField] private TransformCollector parentCollector = new TransformCollector(); private GameObjectCollector SourceCollector => sourceCollector; private TransformCollector ParentCollector => parentCollector; diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index 62573b9..fe22ad0 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -32,9 +32,9 @@ private bool WorldPositionStays set => worldPositionStays = value; } - [SerializeField] private TransformCollector targetTransformCollector = default; - [SerializeField] private TransformCollector parentTransformCollector = default; - [SerializeField] private BoolCollector worldPositionStaysCollector = default; + [SerializeField] private TransformCollector targetTransformCollector = new TransformCollector(); + [SerializeField] private TransformCollector parentTransformCollector = new TransformCollector(); + [SerializeField] private BoolCollector worldPositionStaysCollector = new BoolCollector(); private TransformCollector TargetTransformCollector => targetTransformCollector; private TransformCollector ParentTransformCollector => parentTransformCollector; diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 4dd600d..6664983 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -38,10 +38,10 @@ private TimelineAsset TimelineAsset set => timelineAsset = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; - [SerializeField] private TimelineAssetCollector timelineAssetCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = new PlayableDirectorCollector(); + [SerializeField] private TimelineAssetCollector timelineAssetCollector = new TimelineAssetCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 1ab2bae..bd9339c 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -59,11 +59,11 @@ private AnimationClip AnimationClip private AnimatorCullingMode CullingMode => cullingMode; private AnimatorUpdateMode UpdateMode => updateMode; - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private AnimatorCollector animatorCollector = default; - [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = default; - [SerializeField] private AnimationClipCollector animationClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private AnimatorCollector animatorCollector = new AnimatorCollector(); + [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = new SimpleAnimationCollector(); + [SerializeField] private AnimationClipCollector animationClipCollector = new AnimationClipCollector(); // TODO: Implement EnumCollector private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 438bae6..539c615 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -28,9 +28,9 @@ private ObservableTween.EaseType EaseType set => easeType = value; } - [SerializeField] private FloatCollector timeScaleCollector = default; - [SerializeField] private FloatCollector durationCollector = default; - [SerializeField] private EaseTypeCollector easeTypeCollector = default; + [SerializeField] private FloatCollector timeScaleCollector = new FloatCollector(); + [SerializeField] private FloatCollector durationCollector = new FloatCollector(); + [SerializeField] private EaseTypeCollector easeTypeCollector = new EaseTypeCollector(); private FloatCollector TimeScaleCollector => timeScaleCollector; private FloatCollector DurationCollector => durationCollector; diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs index 33a9c76..aafd138 100644 --- a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs @@ -26,8 +26,8 @@ private int Index set => index = value; } - [SerializeField] private TransformCollector targetTransformCollector = default; - [SerializeField] private IntCollector indexCollector = default; + [SerializeField] private TransformCollector targetTransformCollector = new TransformCollector(); + [SerializeField] private IntCollector indexCollector = new IntCollector(); private TransformCollector TargetTransformCollector => targetTransformCollector; private IntCollector IndexCollector => indexCollector; diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 783e70b..c0f48b1 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -55,11 +55,11 @@ private AnimationClip AnimationClip private AnimatorCullingMode CullingMode => cullingMode; private AnimatorUpdateMode UpdateMode => updateMode; - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private AnimatorCollector animatorCollector = default; - [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = default; - [SerializeField] private AnimationClipCollector animationClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private AnimatorCollector animatorCollector = new AnimatorCollector(); + [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = new SimpleAnimationCollector(); + [SerializeField] private AnimationClipCollector animationClipCollector = new AnimationClipCollector(); // TODO: Implement EnumCollector private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 20033de..c037044 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -38,10 +38,10 @@ private AudioClip AudioClip set => audioClip = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private AudioSourceCollector audioSourceCollector = default; - [SerializeField] private AudioClipCollector audioClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); + [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index c6739a2..7f456fe 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -19,7 +19,7 @@ private Component Component } private CameraEventType CameraEventType => cameraEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index c7d7a21..9571c2d 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -19,7 +19,7 @@ private Component Component } private MouseEventType MouseEventType => mouseEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index a8bc42d..2a60c8f 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -19,7 +19,7 @@ private Component Component } private ParticleEventType ParticleEventType => particleEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 9da6c29..7d475f6 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -19,7 +19,7 @@ private Component Component } private PhysicsCollision2DEventType PhysicsCollision2DEventType => physicsCollision2DEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index 94a9c3e..5ec0646 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -20,7 +20,7 @@ private Component Component } private PhysicsCollisionEventType PhysicsCollisionEventType => physicsCollisionEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index 5a03a81..d86f3a4 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -19,7 +19,7 @@ private Component Component } private PhysicsTrigger2DEventType PhysicsTrigger2DEventType => physicsTrigger2DEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index f65af67..a7f410b 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -19,7 +19,7 @@ private Component Component } private PhysicsTriggerEventType PhysicsTriggerEventType => physicsTriggerEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index c67a6d9..e63f214 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -19,7 +19,7 @@ private Component Component } private RectTransformEventType RectTransformEventType => rectTransformEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 275b582..d872f19 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -53,11 +53,11 @@ private AnimationClip AnimationClip set => animationClip = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private AnimatorCollector animatorCollector = default; - [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = default; - [SerializeField] private AnimationClipCollector animationClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private AnimatorCollector animatorCollector = new AnimatorCollector(); + [SerializeField] private SimpleAnimationCollector simpleAnimationCollector = new SimpleAnimationCollector(); + [SerializeField] private AnimationClipCollector animationClipCollector = new AnimationClipCollector(); // TODO: Implement EnumCollector private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index a18b567..51fbbec 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -47,10 +47,10 @@ private TimelineAsset TimelineAsset set => timelineAsset = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; - [SerializeField] private TimelineAssetCollector timelineAssetCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = new PlayableDirectorCollector(); + [SerializeField] private TimelineAssetCollector timelineAssetCollector = new TimelineAssetCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index c4ac1de..59d24a8 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -19,7 +19,7 @@ private Component Component } private TransformEventType TransformEventType => transformEventType; - [SerializeField] private ComponentCollector componentCollector = default; + [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index faccc5e..5bc0824 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -45,11 +45,11 @@ private bool DeactivateAfterConnect set => deactivateAfterConnect = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private UIBehaviourCollector uiBehaviourCollector = default; - [SerializeField] private BoolCollector activateBeforeConnectCollector = default; - [SerializeField] private BoolCollector deactivateAfterConnectCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private UIBehaviourCollector uiBehaviourCollector = new UIBehaviourCollector(); + [SerializeField] private BoolCollector activateBeforeConnectCollector = new BoolCollector(); + [SerializeField] private BoolCollector deactivateAfterConnectCollector = new BoolCollector(); // TODO: Implement EnumCollector private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; diff --git a/Assets/Scripts/Connector/Expression/And.cs b/Assets/Scripts/Connector/Expression/And.cs index d38a9d7..794ea9c 100644 --- a/Assets/Scripts/Connector/Expression/And.cs +++ b/Assets/Scripts/Connector/Expression/And.cs @@ -17,7 +17,7 @@ private bool Value set => Conditions.Add(value); } - [SerializeField] private BoolCollector valueCollector = default; + [SerializeField] private BoolCollector valueCollector = new BoolCollector(); private BoolCollector ValueCollector => valueCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/Expression/Not.cs b/Assets/Scripts/Connector/Expression/Not.cs index a11ccfe..6fe107a 100644 --- a/Assets/Scripts/Connector/Expression/Not.cs +++ b/Assets/Scripts/Connector/Expression/Not.cs @@ -17,7 +17,7 @@ private bool Value set => Conditions.Add(value); } - [SerializeField] private BoolCollector valueCollector = default; + [SerializeField] private BoolCollector valueCollector = new BoolCollector(); private BoolCollector ValueCollector => valueCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/Expression/Or.cs b/Assets/Scripts/Connector/Expression/Or.cs index 15ceb7e..2ae1b99 100644 --- a/Assets/Scripts/Connector/Expression/Or.cs +++ b/Assets/Scripts/Connector/Expression/Or.cs @@ -17,7 +17,7 @@ private bool Value set => Conditions.Add(value); } - [SerializeField] private BoolCollector valueCollector = default; + [SerializeField] private BoolCollector valueCollector = new BoolCollector(); private BoolCollector ValueCollector => valueCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/Expression/Xor.cs b/Assets/Scripts/Connector/Expression/Xor.cs index 8196387..c1d6a57 100644 --- a/Assets/Scripts/Connector/Expression/Xor.cs +++ b/Assets/Scripts/Connector/Expression/Xor.cs @@ -11,8 +11,8 @@ public class Xor : ConnectorBase, IMessageCollectable private bool Left { get; set; } private bool Right { get; set; } - [SerializeField] private BoolCollector leftCollector = default; - [SerializeField] private BoolCollector rightCollector = default; + [SerializeField] private BoolCollector leftCollector = new BoolCollector(); + [SerializeField] private BoolCollector rightCollector = new BoolCollector(); private BoolCollector LeftCollector => leftCollector; private BoolCollector RightCollector => rightCollector; diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index bdf0acc..06b37c8 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -16,7 +16,7 @@ private GameObject TargetGameObject set => Targets.Add(value); } - [SerializeField] private GameObjectCollector targetGameObjectCollector = default; + [SerializeField] private GameObjectCollector targetGameObjectCollector = new GameObjectCollector(); private GameObjectCollector TargetGameObjectCollector => targetGameObjectCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index 742b87c..eaaf491 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -53,13 +53,13 @@ private ScriptableObject ScriptableObjectParameter set => scriptableObjectParameter = value; } - [SerializeField] private StringCollector signalNameCollector = default; - [SerializeField] private BoolCollector boolCollector = default; - [SerializeField] private IntCollector intCollector = default; - [SerializeField] private FloatCollector floatCollector = default; - [SerializeField] private StringCollector stringCollector = default; - [SerializeField] private ObjectCollector objectCollector = default; - [SerializeField] private ScriptableObjectCollector scriptableObjectCollector = default; + [SerializeField] private StringCollector signalNameCollector = new StringCollector(); + [SerializeField] private BoolCollector boolCollector = new BoolCollector(); + [SerializeField] private IntCollector intCollector = new IntCollector(); + [SerializeField] private FloatCollector floatCollector = new FloatCollector(); + [SerializeField] private StringCollector stringCollector = new StringCollector(); + [SerializeField] private ObjectCollector objectCollector = new ObjectCollector(); + [SerializeField] private ScriptableObjectCollector scriptableObjectCollector = new ScriptableObjectCollector(); private StringCollector SignalNameCollector => signalNameCollector; private BoolCollector BoolCollector => boolCollector; diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 182e171..6986f42 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -20,7 +20,7 @@ private string SignalName set => signalName = value; } - [SerializeField] private StringCollector signalNameCollector = default; + [SerializeField] private StringCollector signalNameCollector = new StringCollector(); private StringCollector SignalNameCollector => signalNameCollector; diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 424e8cf..20e1069 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -20,8 +20,8 @@ protected TValue Expect } private TValue Actual { get; set; } - [SerializeField] private TCollector expectCollector = default; - [SerializeField] private TCollector actualCollector = default; + [SerializeField] private TCollector expectCollector = new TCollector(); + [SerializeField] private TCollector actualCollector = new TCollector(); private TCollector ExpectCollector => expectCollector; private TCollector ActualCollector => actualCollector; diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index 424efb8..549e0df 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -36,10 +36,10 @@ private Sprite Sprite set => sprite = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private ImageCollector imageCollector = default; - [SerializeField] private SpriteCollector spriteCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private ImageCollector imageCollector = new ImageCollector(); + [SerializeField] private SpriteCollector spriteCollector = new SpriteCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index 147742b..7df16fd 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -36,10 +36,10 @@ private Texture Texture set => texture = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private RawImageCollector rawImageCollector = default; - [SerializeField] private TextureCollector textureCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private RawImageCollector rawImageCollector = new RawImageCollector(); + [SerializeField] private TextureCollector textureCollector = new TextureCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector ?? (baseGameObjectCollector = new GameObjectCollector {TargetConnector = this}); private StringCollector TransformPathCollector => transformPathCollector ?? (transformPathCollector = new StringCollector {TargetConnector = this}); diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index 7a66a4b..d917101 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -48,12 +48,12 @@ private AnimationClip AnimationClip set => animationClip = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; - [SerializeField] private StringCollector trackNameCollector = default; - [SerializeField] private StringCollector clipNameCollector = default; - [SerializeField] private AnimationClipCollector animationClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = new PlayableDirectorCollector(); + [SerializeField] private StringCollector trackNameCollector = new StringCollector(); + [SerializeField] private StringCollector clipNameCollector = new StringCollector(); + [SerializeField] private AnimationClipCollector animationClipCollector = new AnimationClipCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 2ce0932..02ed4ce 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -48,12 +48,12 @@ private AudioClip AudioClip set => audioClip = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; - [SerializeField] private StringCollector trackNameCollector = default; - [SerializeField] private StringCollector clipNameCollector = default; - [SerializeField] private AudioClipCollector audioClipCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = new PlayableDirectorCollector(); + [SerializeField] private StringCollector trackNameCollector = new StringCollector(); + [SerializeField] private StringCollector clipNameCollector = new StringCollector(); + [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 6dddc88..6231505 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -54,13 +54,13 @@ private GameObject PrefabGameObject set => prefabGameObject = value; } - [SerializeField] private GameObjectCollector baseGameObjectCollector = default; - [SerializeField] private StringCollector transformPathCollector = default; - [SerializeField] private PlayableDirectorCollector playableDirectorCollector = default; - [SerializeField] private StringCollector trackNameCollector = default; - [SerializeField] private StringCollector clipNameCollector = default; - [SerializeField] private GameObjectCollector sourceGameObjectCollector = default; - [SerializeField] private GameObjectCollector prefabGameObjectCollector = default; + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private PlayableDirectorCollector playableDirectorCollector = new PlayableDirectorCollector(); + [SerializeField] private StringCollector trackNameCollector = new StringCollector(); + [SerializeField] private StringCollector clipNameCollector = new StringCollector(); + [SerializeField] private GameObjectCollector sourceGameObjectCollector = new GameObjectCollector(); + [SerializeField] private GameObjectCollector prefabGameObjectCollector = new GameObjectCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 0b37700..bc16697 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -6,10 +6,10 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] public class Color32Provider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private ByteCollector rCollector = default; - [SerializeField] private ByteCollector gCollector = default; - [SerializeField] private ByteCollector bCollector = default; - [SerializeField] private ByteCollector aCollector = default; + [SerializeField] private ByteCollector rCollector = new ByteCollector(); + [SerializeField] private ByteCollector gCollector = new ByteCollector(); + [SerializeField] private ByteCollector bCollector = new ByteCollector(); + [SerializeField] private ByteCollector aCollector = new ByteCollector(); private ByteCollector RCollector => rCollector; private ByteCollector GCollector => gCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index a56cf36..ed439d8 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -6,10 +6,10 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] public class ColorProvider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private FloatCollector rCollector = default; - [SerializeField] private FloatCollector gCollector = default; - [SerializeField] private FloatCollector bCollector = default; - [SerializeField] private FloatCollector aCollector = default; + [SerializeField] private FloatCollector rCollector = new FloatCollector(); + [SerializeField] private FloatCollector gCollector = new FloatCollector(); + [SerializeField] private FloatCollector bCollector = new FloatCollector(); + [SerializeField] private FloatCollector aCollector = new FloatCollector(); private FloatCollector RCollector => rCollector; private FloatCollector GCollector => gCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index b7c548b..37ceaec 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -19,7 +19,7 @@ public IEnumerable Values set => values = value.ToList(); } - [SerializeField] private TValueCollector valuesCollector = default; + [SerializeField] private TValueCollector valuesCollector = new TValueCollector(); private TValueCollector ValuesCollector => valuesCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 3eb0f18..fb614d6 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -6,11 +6,11 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] public class QuaternionProvider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private FloatCollector xCollector = default; - [SerializeField] private FloatCollector yCollector = default; - [SerializeField] private FloatCollector zCollector = default; - [SerializeField] private FloatCollector wCollector = default; - [SerializeField] private Vector3Collector eulerAngleCollector = default; + [SerializeField] private FloatCollector xCollector = new FloatCollector(); + [SerializeField] private FloatCollector yCollector = new FloatCollector(); + [SerializeField] private FloatCollector zCollector = new FloatCollector(); + [SerializeField] private FloatCollector wCollector = new FloatCollector(); + [SerializeField] private Vector3Collector eulerAngleCollector = new Vector3Collector(); private FloatCollector XCollector => xCollector; private FloatCollector YCollector => yCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 8cb1bb6..2bad007 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -21,7 +21,7 @@ public abstract class SelectorBase : ConnectorBase, public TKey Key { get; set; } - [SerializeField] private TKeyCollector keyCollector = default; + [SerializeField] private TKeyCollector keyCollector = new TKeyCollector(); private TKeyCollector KeyCollector => keyCollector; public override IObservable OnConnectAsObservable() diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index fe8bd3b..b6ec94e 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -6,8 +6,8 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] public class Vector2IntProvider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private IntCollector xCollector = default; - [SerializeField] private IntCollector yCollector = default; + [SerializeField] private IntCollector xCollector = new IntCollector(); + [SerializeField] private IntCollector yCollector = new IntCollector(); private IntCollector XCollector => xCollector; private IntCollector YCollector => yCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index 804cd08..9aed8d5 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -6,8 +6,8 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] public class Vector2Provider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private FloatCollector xCollector = default; - [SerializeField] private FloatCollector yCollector = default; + [SerializeField] private FloatCollector xCollector = new FloatCollector(); + [SerializeField] private FloatCollector yCollector = new FloatCollector(); private FloatCollector XCollector => xCollector; private FloatCollector YCollector => yCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index 74c6176..94ba110 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -6,9 +6,9 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] public class Vector3IntProvider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private IntCollector xCollector = default; - [SerializeField] private IntCollector yCollector = default; - [SerializeField] private IntCollector zCollector = default; + [SerializeField] private IntCollector xCollector = new IntCollector(); + [SerializeField] private IntCollector yCollector = new IntCollector(); + [SerializeField] private IntCollector zCollector = new IntCollector(); private IntCollector XCollector => xCollector; private IntCollector YCollector => yCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index ccc88dd..9beecd3 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -6,9 +6,9 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] public class Vector3Provider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private FloatCollector xCollector = default; - [SerializeField] private FloatCollector yCollector = default; - [SerializeField] private FloatCollector zCollector = default; + [SerializeField] private FloatCollector xCollector = new FloatCollector(); + [SerializeField] private FloatCollector yCollector = new FloatCollector(); + [SerializeField] private FloatCollector zCollector = new FloatCollector(); private FloatCollector XCollector => xCollector; private FloatCollector YCollector => yCollector; diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index e26579f..cb78dc6 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -6,10 +6,10 @@ namespace UniFlow.Connector.ValueProvider [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] public class Vector4Provider : ProviderBase, IMessageCollectable, IMessageComposable { - [SerializeField] private FloatCollector xCollector = default; - [SerializeField] private FloatCollector yCollector = default; - [SerializeField] private FloatCollector zCollector = default; - [SerializeField] private FloatCollector wCollector = default; + [SerializeField] private FloatCollector xCollector = new FloatCollector(); + [SerializeField] private FloatCollector yCollector = new FloatCollector(); + [SerializeField] private FloatCollector zCollector = new FloatCollector(); + [SerializeField] private FloatCollector wCollector = new FloatCollector(); private FloatCollector XCollector => xCollector; private FloatCollector YCollector => yCollector; From 689526fa652a762ce105a2c93afe18844d14e9f2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 17 Oct 2019 20:19:31 +0900 Subject: [PATCH 340/453] :clipboard: Bump up v0.1.0-preview.29.1 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 34132d7..2116c8a 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.29", + "version": "0.1.0-preview.29.1", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 5501e3c1153b135d4f656ce7acbd5828c9b42fc3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 08:48:36 +0900 Subject: [PATCH 341/453] :sparkles: Support to send/receive enum <-> int --- Assets/Editor/Scripts/FlowGraphView.cs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index e28a707..c217a3d 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -325,8 +325,20 @@ private void CreateMessageConnectorEdges() var messageComposeNode = RenderedNodes[valueCollector.SourceConnector]; var messageCollectNode = RenderedNodes[connector]; - var messageComposePort = messageComposeNode.MessageComposePorts.FirstOrDefault(x => x.ComposableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && x.ComposableMessageAnnotation.Key == valueCollector.ComposerKey); - var messageCollectPort = messageCollectNode.MessageCollectPorts.FirstOrDefault(x => x.CollectableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString && x.CollectableMessageAnnotation.Key == valueCollector.CollectorKey); + var messageComposePort = messageComposeNode + .MessageComposePorts + .FirstOrDefault( + x => + x.ComposableMessageAnnotation.Key == valueCollector.ComposerKey +// && x.ComposableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString + ); + var messageCollectPort = messageCollectNode + .MessageCollectPorts + .FirstOrDefault( + x => + x.CollectableMessageAnnotation.Key == valueCollector.CollectorKey +// && x.CollectableMessageAnnotation.Type.AssemblyQualifiedName == valueCollector.TypeString + ); if (messageComposePort != null && messageCollectPort != null) { AddEdge(messageComposePort, messageCollectPort); @@ -372,6 +384,8 @@ x is FlowMessageCollectPort flowMessageCollectPort && ( flowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) || typeof(ScriptableObject).IsAssignableFrom(startFlowMessageComposePort.ComposableMessageAnnotation.Type) && typeof(ScriptableObject).IsAssignableFrom(flowMessageCollectPort.CollectableMessageAnnotation.Type) + || flowMessageCollectPort.CollectableMessageAnnotation.Type == typeof(int) && startFlowMessageComposePort.ComposableMessageAnnotation.Type.IsEnum + || startFlowMessageComposePort.ComposableMessageAnnotation.Type == typeof(int) && flowMessageCollectPort.CollectableMessageAnnotation.Type.IsEnum ) && x.direction != startPort.direction && x.node != startPort.node @@ -383,6 +397,12 @@ x is FlowMessageCollectPort flowMessageCollectPort .Where( x => x is FlowMessageComposePort flowMessageComposePort + && ( + startFlowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(flowMessageComposePort.ComposableMessageAnnotation.Type) + || typeof(ScriptableObject).IsAssignableFrom(flowMessageComposePort.ComposableMessageAnnotation.Type) && typeof(ScriptableObject).IsAssignableFrom(startFlowMessageCollectPort.CollectableMessageAnnotation.Type) + || startFlowMessageCollectPort.CollectableMessageAnnotation.Type == typeof(int) && flowMessageComposePort.ComposableMessageAnnotation.Type.IsEnum + || flowMessageComposePort.ComposableMessageAnnotation.Type == typeof(int) && startFlowMessageCollectPort.CollectableMessageAnnotation.Type.IsEnum + ) && startFlowMessageCollectPort.CollectableMessageAnnotation.Type.IsAssignableFrom(flowMessageComposePort.ComposableMessageAnnotation.Type) && x.direction != startPort.direction && x.node != startPort.node From 3549d582fc954a77a694613bbc544da4239d551a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 08:50:24 +0900 Subject: [PATCH 342/453] :sparkles: Support ignore play when audio playing --- .../Connector/Controller/AudioController.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index a402fa5..33143c2 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -17,6 +17,7 @@ public class AudioController : ConnectorBase, [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; + [SerializeField] private bool ignorePlayWhenPlaying = default; public GameObject BaseGameObject { @@ -39,16 +40,23 @@ private AudioClip AudioClip get => audioClip; set => audioClip = value; } + private bool IgnorePlayWhenPlaying + { + get => ignorePlayWhenPlaying; + set => ignorePlayWhenPlaying = value; + } [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); [SerializeField] private StringCollector transformPathCollector = new StringCollector(); [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); + [SerializeField] private BoolCollector ignorePlayWhenPlayingCollector = new BoolCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; private AudioSourceCollector AudioSourceCollector => audioSourceCollector; private AudioClipCollector AudioClipCollector => audioClipCollector; + private BoolCollector IgnorePlayWhenPlayingCollector => ignorePlayWhenPlayingCollector; public override IObservable OnConnectAsObservable() { @@ -60,13 +68,17 @@ private void InvokeAudioSourceMethod() { if (AudioClip != default) { + AudioSource.playOnAwake = false; AudioSource.clip = AudioClip; } switch (AudioControlMethod) { case AudioControlMethod.Play: - AudioSource.Play(); + if (!IgnorePlayWhenPlaying || !AudioSource.isPlaying) + { + AudioSource.Play(); + } break; case AudioControlMethod.Stop: AudioSource.Stop(); @@ -89,6 +101,7 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotation.Create(IgnorePlayWhenPlayingCollector, x => IgnorePlayWhenPlaying = x, nameof(IgnorePlayWhenPlaying)), }; } From cbb2c1b22fb9149dce17aa39ba78bbf8f673d4f6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 08:51:19 +0900 Subject: [PATCH 343/453] :sparkles: Accept value collection for timer/interval --- Assets/Scripts/Connector/Logic/Interval.cs | 16 +++++++++++++- .../Scripts/Connector/Logic/IntervalFrame.cs | 16 +++++++++++++- Assets/Scripts/Connector/Logic/Timer.cs | 16 +++++++++++++- Assets/Scripts/Connector/Logic/TimerFrame.cs | 21 ++++++++++++++++++- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Connector/Logic/Interval.cs b/Assets/Scripts/Connector/Logic/Interval.cs index 4f2fe67..6b67447 100644 --- a/Assets/Scripts/Connector/Logic/Interval.cs +++ b/Assets/Scripts/Connector/Logic/Interval.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -6,7 +7,7 @@ namespace UniFlow.Connector.Logic { [AddComponentMenu("UniFlow/Logic/Interval", (int) ConnectorType.Interval)] - public class Interval : ConnectorBase + public class Interval : ConnectorBase, IMessageCollectable { private const string MessageParameterKey = "Count"; @@ -24,11 +25,24 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } + [SerializeField] private FloatCollector secondsCollector = new FloatCollector(); + [SerializeField] private BoolCollector ignoreTimeScaleCollector = new BoolCollector(); + + private FloatCollector SecondsCollector => secondsCollector; + private BoolCollector IgnoreTimeScaleCollector => ignoreTimeScaleCollector; + public override IObservable OnConnectAsObservable() { return Observable .Interval(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) .AsMessageObservable(this, MessageParameterKey); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + CollectableMessageAnnotation.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), + CollectableMessageAnnotation.Create(IgnoreTimeScaleCollector, x => IgnoreTimeScale = x, nameof(IgnoreTimeScale)), + }; } } diff --git a/Assets/Scripts/Connector/Logic/IntervalFrame.cs b/Assets/Scripts/Connector/Logic/IntervalFrame.cs index aab6010..732f8af 100644 --- a/Assets/Scripts/Connector/Logic/IntervalFrame.cs +++ b/Assets/Scripts/Connector/Logic/IntervalFrame.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -6,7 +7,7 @@ namespace UniFlow.Connector.Logic { [AddComponentMenu("UniFlow/Logic/IntervalFrame", (int) ConnectorType.IntervalFrame)] - public class IntervalFrame : ConnectorBase + public class IntervalFrame : ConnectorBase, IMessageCollectable { private const string MessageParameterKey = "Count"; @@ -24,11 +25,24 @@ [UsedImplicitly] private FrameCountType FrameCountType set => frameCountType = value; } + [SerializeField] private IntCollector framesCollector = new IntCollector(); + [SerializeField] private FrameCountTypeCollector frameCountTypeCollector = new FrameCountTypeCollector(); + + private IntCollector FramesCollector => framesCollector; + private FrameCountTypeCollector FrameCountTypeCollector => frameCountTypeCollector; + public override IObservable OnConnectAsObservable() { return Observable .IntervalFrame(Frames, FrameCountType) .AsMessageObservable(this, MessageParameterKey); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + CollectableMessageAnnotation.Create(FramesCollector, x => Frames = x, nameof(Frames)), + CollectableMessageAnnotation.Create(FrameCountTypeCollector, x => FrameCountType = x, nameof(FrameCountType)), + }; } } diff --git a/Assets/Scripts/Connector/Logic/Timer.cs b/Assets/Scripts/Connector/Logic/Timer.cs index c7b39e0..f6630ac 100644 --- a/Assets/Scripts/Connector/Logic/Timer.cs +++ b/Assets/Scripts/Connector/Logic/Timer.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -6,7 +7,7 @@ namespace UniFlow.Connector.Logic { [AddComponentMenu("UniFlow/Logic/Timer", (int) ConnectorType.Timer)] - public class Timer : ConnectorBase + public class Timer : ConnectorBase, IMessageCollectable { private const string MessageParameterKey = "Count"; @@ -24,11 +25,24 @@ [UsedImplicitly] private bool IgnoreTimeScale set => ignoreTimeScale = value; } + [SerializeField] private FloatCollector secondsCollector = new FloatCollector(); + [SerializeField] private BoolCollector ignoreTimeScaleCollector = new BoolCollector(); + + private FloatCollector SecondsCollector => secondsCollector; + private BoolCollector IgnoreTimeScaleCollector => ignoreTimeScaleCollector; + public override IObservable OnConnectAsObservable() { return Observable .Timer(TimeSpan.FromSeconds(Seconds), IgnoreTimeScale ? Scheduler.MainThreadIgnoreTimeScale : Scheduler.MainThread) .AsMessageObservable(this, MessageParameterKey); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + CollectableMessageAnnotation.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), + CollectableMessageAnnotation.Create(IgnoreTimeScaleCollector, x => IgnoreTimeScale = x, nameof(IgnoreTimeScale)), + }; } } diff --git a/Assets/Scripts/Connector/Logic/TimerFrame.cs b/Assets/Scripts/Connector/Logic/TimerFrame.cs index 720e197..32a0d04 100644 --- a/Assets/Scripts/Connector/Logic/TimerFrame.cs +++ b/Assets/Scripts/Connector/Logic/TimerFrame.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using JetBrains.Annotations; using UniRx; using UnityEngine; @@ -6,7 +7,7 @@ namespace UniFlow.Connector.Logic { [AddComponentMenu("UniFlow/Logic/TimerFrame", (int) ConnectorType.TimerFrame)] - public class TimerFrame : ConnectorBase + public class TimerFrame : ConnectorBase, IMessageCollectable { private const string MessageParameterKey = "Count"; @@ -24,11 +25,29 @@ [UsedImplicitly] private FrameCountType FrameCountType set => frameCountType = value; } + [SerializeField] private IntCollector framesCollector = new IntCollector(); + [SerializeField] private FrameCountTypeCollector frameCountTypeCollector = new FrameCountTypeCollector(); + + private IntCollector FramesCollector => framesCollector; + private FrameCountTypeCollector FrameCountTypeCollector => frameCountTypeCollector; + public override IObservable OnConnectAsObservable() { return Observable .TimerFrame(Frames, FrameCountType) .AsMessageObservable(this, MessageParameterKey); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + CollectableMessageAnnotation.Create(FramesCollector, x => Frames = x, nameof(Frames)), + CollectableMessageAnnotation.Create(FrameCountTypeCollector, x => FrameCountType = x, nameof(FrameCountType)), + }; + } + + [Serializable] + public class FrameCountTypeCollector : ValueCollectorBase + { } } From 5c060b3e4843bafeeefe47962f8453fb1a7aa746 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 08:53:14 +0900 Subject: [PATCH 344/453] :sparkles: Invoke SetNativeSize for Image comopnent --- .../Connector/ValueInjector/ImageInjector.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index 549e0df..b1931e8 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -14,6 +14,7 @@ public class ImageInjector : InjectorBase, [SerializeField] private string transformPath = default; [SerializeField] private Image image = default; [SerializeField] private Sprite sprite = default; + [SerializeField] private bool invokeSetNativeSize = default; public override GameObject BaseGameObject { @@ -35,20 +36,31 @@ private Sprite Sprite get => sprite; set => sprite = value; } + private bool InvokeSetNativeSize + { + get => invokeSetNativeSize; + set => invokeSetNativeSize = value; + } [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); [SerializeField] private StringCollector transformPathCollector = new StringCollector(); [SerializeField] private ImageCollector imageCollector = new ImageCollector(); [SerializeField] private SpriteCollector spriteCollector = new SpriteCollector(); + [SerializeField] private BoolCollector invokeSetNativeSizeCollector = new BoolCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; private ImageCollector ImageCollector => imageCollector; private SpriteCollector SpriteCollector => spriteCollector; + private BoolCollector InvokeSetNativeSizeCollector => invokeSetNativeSizeCollector; protected override void Inject() { Image.sprite = Sprite; + if (InvokeSetNativeSize) + { + Image.SetNativeSize(); + } } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => @@ -58,6 +70,7 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), CollectableMessageAnnotation.Create(ImageCollector, x => Image = x, nameof(Image)), CollectableMessageAnnotation.Create(SpriteCollector, x => Sprite = x, nameof(Sprite)), + CollectableMessageAnnotation.Create(InvokeSetNativeSizeCollector, x => InvokeSetNativeSize = x, nameof(InvokeSetNativeSize)), }; } } From 545314a7ccf3ee6371fef5dc58221b9e138de689 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 08:54:36 +0900 Subject: [PATCH 345/453] :recycle: Refactor code and add utility class --- Assets/Scripts/Extensions.cs | 27 +++++++++++++----- Assets/Scripts/Message.cs | 21 ++++++++++++-- Assets/Scripts/Signal/StringSignal.cs | 38 +++++++++++++++++++++---- Assets/Scripts/Utility/SignalHandler.cs | 21 ++++++++++++++ 4 files changed, 91 insertions(+), 16 deletions(-) diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index a093acf..8467b27 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -3,6 +3,7 @@ using System.Linq; using UniRx; using UnityEngine; +using Zenject; namespace UniFlow { @@ -14,25 +15,28 @@ public interface IBaseGameObjectSpecifyable public static class Extensions { - private static TComponent GetOrAddComponent(this GameObject gameObject) where TComponent : Component + public static TComponent GetOrAddComponent(this GameObject gameObject) where TComponent : Component { return gameObject.GetComponent() != default ? gameObject.GetComponent() : gameObject.AddComponent(); } - public static TComponent GetComponent(this IBaseGameObjectSpecifyable baseGameObjectSpecifyable) where TComponent : Component + public static Transform DeterminateTransform(this IBaseGameObjectSpecifyable baseGameObjectSpecifyable) { return string.IsNullOrEmpty(baseGameObjectSpecifyable.TransformPath) - ? baseGameObjectSpecifyable.BaseGameObject.GetComponent() - : baseGameObjectSpecifyable.BaseGameObject.transform.Find(baseGameObjectSpecifyable.TransformPath).gameObject.GetComponent(); + ? baseGameObjectSpecifyable.BaseGameObject.transform + : baseGameObjectSpecifyable.BaseGameObject.transform.Find(baseGameObjectSpecifyable.TransformPath); + } + + public static TComponent GetComponent(this IBaseGameObjectSpecifyable baseGameObjectSpecifyable) where TComponent : Component + { + return baseGameObjectSpecifyable.DeterminateTransform().gameObject.GetComponent(); } public static TComponent GetOrAddComponent(this IBaseGameObjectSpecifyable baseGameObjectSpecifyable) where TComponent : Component { - return string.IsNullOrEmpty(baseGameObjectSpecifyable.TransformPath) - ? baseGameObjectSpecifyable.BaseGameObject.GetOrAddComponent() - : baseGameObjectSpecifyable.BaseGameObject.transform.Find(baseGameObjectSpecifyable.TransformPath).gameObject.GetOrAddComponent(); + return baseGameObjectSpecifyable.DeterminateTransform().gameObject.GetOrAddComponent(); } public static IObservable AsMessageObservable(this IObservable observable, IConnector connector) @@ -88,4 +92,13 @@ public static Message GetMessage(this IEnumerable messages, IConnector return connector == default ? default : messages.Last(x => x.Connector == connector); } } + + public static class ZenjectExtensions + { + public static DeclareSignalAsyncTickPriorityCopyBinder DeclareBoundarySignal(this DiContainer container) + { + container.BindInterfacesTo>().AsCached(); + return container.DeclareSignal().OptionalSubscriber(); + } + } } diff --git a/Assets/Scripts/Message.cs b/Assets/Scripts/Message.cs index d29bdd7..35e3697 100644 --- a/Assets/Scripts/Message.cs +++ b/Assets/Scripts/Message.cs @@ -77,13 +77,13 @@ public T GetParameter(string key) private bool HasValue(string key) { - var type = typeof(ScriptableObject).IsAssignableFrom(typeof(T)) ? typeof(ScriptableObject) : typeof(T); + var type = DeterminateType(); return Parameters.ContainsKey(type) && Parameters[type].ContainsKey(key); } private T GetValue(string key) { - var type = typeof(ScriptableObject).IsAssignableFrom(typeof(T)) ? typeof(ScriptableObject) : typeof(T); + var type = DeterminateType(); if (!Parameters.ContainsKey(type)) { @@ -100,7 +100,7 @@ private T GetValue(string key) private void SetValue(string key, T value) { - var type = typeof(ScriptableObject).IsAssignableFrom(typeof(T)) ? typeof(ScriptableObject) : typeof(T); + var type = DeterminateType(); if (!Parameters.ContainsKey(type)) { @@ -109,5 +109,20 @@ private void SetValue(string key, T value) Parameters[type][key] = value; } + + private static Type DeterminateType() + { + if (typeof(ScriptableObject).IsAssignableFrom(typeof(T))) + { + return typeof(ScriptableObject); + } + + if (typeof(T).IsEnum) + { + return typeof(int); + } + + return typeof(T); + } } } diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs index 6267170..fce0793 100644 --- a/Assets/Scripts/Signal/StringSignal.cs +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -51,6 +51,7 @@ public override int GetHashCode() } [Serializable] + [PublicAPI] public struct SignalParameter { public SignalParameter(bool boolValue, int intValue, float floatValue, string stringValue, Object objectValue, ScriptableObject scriptableObjectValue) @@ -69,12 +70,37 @@ public SignalParameter(bool boolValue, int intValue, float floatValue, string st [SerializeField] private string stringValue; [SerializeField] private Object objectValue; [SerializeField] private ScriptableObject scriptableObjectValue; - public bool BoolValue => boolValue; - public int IntValue => intValue; - public float FloatValue => floatValue; - public string StringValue => stringValue; - public Object ObjectValue => objectValue; - public ScriptableObject ScriptableObjectValue => scriptableObjectValue; + + public bool BoolValue + { + get => boolValue; + set => boolValue = value; + } + public int IntValue + { + get => intValue; + set => intValue = value; + } + public float FloatValue + { + get => floatValue; + set => floatValue = value; + } + public string StringValue + { + get => stringValue; + set => stringValue = value; + } + public Object ObjectValue + { + get => objectValue; + set => objectValue = value; + } + public ScriptableObject ScriptableObjectValue + { + get => scriptableObjectValue; + set => scriptableObjectValue = value; + } } } } diff --git a/Assets/Scripts/Utility/SignalHandler.cs b/Assets/Scripts/Utility/SignalHandler.cs index ad51ef8..6c8033e 100644 --- a/Assets/Scripts/Utility/SignalHandler.cs +++ b/Assets/Scripts/Utility/SignalHandler.cs @@ -1,9 +1,30 @@ using System; +using JetBrains.Annotations; using UniFlow.Signal; using UniRx; namespace UniFlow.Utility { + [PublicAPI] + public static class SignalHandler + { + public static void PublishString(string signalName) + { + SignalHandler.Publish(new StringSignal(signalName)); + } + + public static void PublishString(string signalName, StringSignal.SignalParameter signalParameter) + { + SignalHandler.Publish(new StringSignal(signalName, signalParameter)); + } + + public static IObservable OnReceiveStringAsObservable(string signalName) + { + return SignalHandler.OnReceiveAsObservable().Where(x => x.Name == signalName); + } + } + + [PublicAPI] public static class SignalHandler where TSignal : ISignal { public static void Publish(TSignal signal) From 7112d45c8539051efdddc596208c305fa4f2612b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 08:59:43 +0900 Subject: [PATCH 346/453] :sparkles: Add feature to send/receive signal for boundary between UniFlow and Domain --- Assets/Scripts/BoundarySignalCoordinator.cs | 20 +++++++++ .../Scripts/BoundarySignalCoordinator.cs.meta | 3 ++ .../Misc/BoundarySignalReceiverBase.cs | 43 ++++++++++++++++++ .../Misc/BoundarySignalReceiverBase.cs.meta | 3 ++ .../Misc/BoundarySignalSenderBase.cs | 45 +++++++++++++++++++ .../Misc/BoundarySignalSenderBase.cs.meta | 11 +++++ Assets/Scripts/IBoundarySignalCoordinator.cs | 27 +++++++++++ .../IBoundarySignalCoordinator.cs.meta | 3 ++ 8 files changed, 155 insertions(+) create mode 100644 Assets/Scripts/BoundarySignalCoordinator.cs create mode 100644 Assets/Scripts/BoundarySignalCoordinator.cs.meta create mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs create mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta create mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs create mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta create mode 100644 Assets/Scripts/IBoundarySignalCoordinator.cs create mode 100644 Assets/Scripts/IBoundarySignalCoordinator.cs.meta diff --git a/Assets/Scripts/BoundarySignalCoordinator.cs b/Assets/Scripts/BoundarySignalCoordinator.cs new file mode 100644 index 0000000..acfc7d4 --- /dev/null +++ b/Assets/Scripts/BoundarySignalCoordinator.cs @@ -0,0 +1,20 @@ +using System; +using Zenject; + +namespace UniFlow +{ + public class BoundarySignalCoordinator : IBoundarySignalCoordinator + { + [Inject] private SignalBus SignalBus { get; } + + void IBoundarySignalSender.Send(TValue value) + { + SignalBus.Fire(value); + } + + IObservable IBoundarySignalReceiver.OnReceiveAsObservable() + { + return SignalBus.GetStream(); + } + } +} diff --git a/Assets/Scripts/BoundarySignalCoordinator.cs.meta b/Assets/Scripts/BoundarySignalCoordinator.cs.meta new file mode 100644 index 0000000..01e7d48 --- /dev/null +++ b/Assets/Scripts/BoundarySignalCoordinator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 180fea9ccac34496847a28a5adf31667 +timeCreated: 1571334387 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs new file mode 100644 index 0000000..ac95e65 --- /dev/null +++ b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Zenject; + +namespace UniFlow.Connector.Misc +{ + public abstract class BoundarySignalReceiverBase : ConnectorBase + { + protected abstract TBoundarySignal BoundarySignal { get; } + + [Inject] private IBoundarySignalReceiver BoundaryCoordinator { get; } + + public override IObservable OnConnectAsObservable() + { + return BoundaryCoordinator.OnReceiveAsObservable(BoundarySignal).AsMessageObservable(this); + } + } + + public abstract class FlexibleBoundarySignalReceiverBase : BoundarySignalReceiverBase, IMessageCollectable + where TBoundarySignalCollector : ValueCollectorBase, new() + { + [SerializeField] private TBoundarySignal boundarySignal = default; + [SerializeField] private TBoundarySignalCollector boundarySignalCollector = new TBoundarySignalCollector(); + + protected override TBoundarySignal BoundarySignal => boundarySignal; + + private TBoundarySignalCollector BoundarySignalCollector => boundarySignalCollector; + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotation.Create(BoundarySignalCollector, x => boundarySignal = x, nameof(BoundarySignal)), + }; + } + + public abstract class FixedBoundarySignalReceiverBase : BoundarySignalReceiverBase + { + [SerializeField] private TBoundarySignal boundarySignal = default; + + protected override TBoundarySignal BoundarySignal => boundarySignal; + } +} diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta new file mode 100644 index 0000000..3219e7a --- /dev/null +++ b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 204c8966d3b84936a19ab49d8075b726 +timeCreated: 1571346168 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs new file mode 100644 index 0000000..568a92d --- /dev/null +++ b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using UniFlow.Utility; +using UnityEngine; +using Zenject; + +namespace UniFlow.Connector.Misc +{ + public abstract class BoundarySignalSenderBase : ConnectorBase + { + protected abstract TBoundarySignal BoundarySignal { get; } + + [Inject] private IBoundarySignalSender BoundaryCoordinator { get; } + + public override IObservable OnConnectAsObservable() + { + BoundaryCoordinator.Send(BoundarySignal); + return ObservableFactory.ReturnMessage(this, nameof(BoundarySignal), BoundarySignal); + } + } + + public abstract class FlexibleBoundarySignalSenderBase : BoundarySignalSenderBase, IMessageCollectable + where TBoundarySignalCollector : ValueCollectorBase, new() + { + [SerializeField] private TBoundarySignal boundarySignal = default; + [SerializeField] private TBoundarySignalCollector enumCollector = new TBoundarySignalCollector(); + + protected override TBoundarySignal BoundarySignal => boundarySignal; + + private TBoundarySignalCollector EnumCollector => enumCollector; + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotation.Create(EnumCollector, x => boundarySignal = x), + }; + } + + public abstract class FixedBoundarySignalSenderBase : BoundarySignalSenderBase + { + protected override TValue BoundarySignal => GetFixedValue(); + + protected abstract TValue GetFixedValue(); + } +} diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta new file mode 100644 index 0000000..8496571 --- /dev/null +++ b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6463e5fd20fde4ce7896eb04f6769a7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/IBoundarySignalCoordinator.cs b/Assets/Scripts/IBoundarySignalCoordinator.cs new file mode 100644 index 0000000..69f3497 --- /dev/null +++ b/Assets/Scripts/IBoundarySignalCoordinator.cs @@ -0,0 +1,27 @@ +using System; +using UniRx; + +namespace UniFlow +{ + public interface IBoundarySignalSender + { + void Send(TValue value); + } + + public interface IBoundarySignalReceiver + { + IObservable OnReceiveAsObservable(); + } + + public interface IBoundarySignalCoordinator : IBoundarySignalSender, IBoundarySignalReceiver + { + } + + public static class BoundaryCoordinatorExtensions + { + public static IObservable OnReceiveAsObservable(this IBoundarySignalReceiver messenger, TValue value) + { + return messenger.OnReceiveAsObservable().Where(x => Equals(x, value)); + } + } +} diff --git a/Assets/Scripts/IBoundarySignalCoordinator.cs.meta b/Assets/Scripts/IBoundarySignalCoordinator.cs.meta new file mode 100644 index 0000000..a4da796 --- /dev/null +++ b/Assets/Scripts/IBoundarySignalCoordinator.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 94f743c768a64d03a61d3c92cd7044e4 +timeCreated: 1571326649 \ No newline at end of file From 528885ded9c7d61e2dd2be1febef9911941b7628 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 09:02:20 +0900 Subject: [PATCH 347/453] :clipboard: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index acc21c1..bbca122 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -93,6 +93,8 @@ public enum ConnectorType ValueInjectorTimelineAudioTrack, ValueInjectorTimelineAnimationTrack, + NumberImageRenderer = 4000, + SignalPublisher = 6000, StringSignalPublisher, ScriptableObjectSignalPublisher, From 73564f10de87d0a4fc77b7dd12af9e8766516b40 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 09:02:30 +0900 Subject: [PATCH 348/453] :tada: Add NumberImageRenderer --- Assets/Scripts/Connector/Complex.meta | 3 + .../Connector/Complex/NumberImageRenderer.cs | 152 ++++++++++++++++++ .../Complex/NumberImageRenderer.cs.meta | 3 + 3 files changed, 158 insertions(+) create mode 100644 Assets/Scripts/Connector/Complex.meta create mode 100644 Assets/Scripts/Connector/Complex/NumberImageRenderer.cs create mode 100644 Assets/Scripts/Connector/Complex/NumberImageRenderer.cs.meta diff --git a/Assets/Scripts/Connector/Complex.meta b/Assets/Scripts/Connector/Complex.meta new file mode 100644 index 0000000..29edd8d --- /dev/null +++ b/Assets/Scripts/Connector/Complex.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 747fddd2be8d47c8939dfeb09737f832 +timeCreated: 1571343186 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs new file mode 100644 index 0000000..748da42 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs @@ -0,0 +1,152 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniRx; +using UniRx.Async; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.UI; + +namespace UniFlow.Connector.Complex +{ + [AddComponentMenu("UniFlow/Complex/NumberImageRenderer", (int) ConnectorType.Custom)] + public class NumberImageRenderer : ConnectorBase, INumberRenderer, IBaseGameObjectSpecifyable, IMessageCollectable, IMessageComposable + { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; + [SerializeField] private int current = default; + [SerializeField] private GameObject digitPrefab = default; + [SerializeField] private float delaySeconds = default; + [SerializeField] private int delayFrames = default; + [SerializeField] private List digitGameObjects = default; + [SerializeField] private List numberImages = default; + + public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + private set => baseGameObject = value; + } + public string TransformPath + { + get => transformPath; + private set => transformPath = value; + } + private int Current + { + get => current; + set => current = value; + } + private GameObject DigitPrefab + { + get => digitPrefab; + set => digitPrefab = value; + } + private float DelaySeconds + { + get => delaySeconds; + set => delaySeconds = value; + } + private int DelayFrames + { + get => delayFrames; + set => delayFrames = value; + } + private IList DigitGameObjects => digitGameObjects; + private IList NumberImages => numberImages; + + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private IntCollector currentCollector = new IntCollector(); + [SerializeField] private GameObjectCollector digitPrefabCollector = new GameObjectCollector(); + [SerializeField] private FloatCollector delaySecondsCollector = new FloatCollector(); + [SerializeField] private IntCollector delayFramesCollector = new IntCollector(); + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private IntCollector CurrentCollector => currentCollector; + private GameObjectCollector DigitPrefabCollector => digitPrefabCollector; + private FloatCollector DelaySecondsCollector => delaySecondsCollector; + private IntCollector DelayFramesCollector => delayFramesCollector; + + private ISubject OnRenderSubject { get; } = new Subject(); + + public override IObservable OnConnectAsObservable() + { + ((INumberRenderer) this).Render(Current); + return OnRenderSubject.AsMessageObservable(this, "Current"); + } + + void INumberRenderer.Render(int number) + { + Assert.AreEqual(10, NumberImages.Count); + + RenderAsync(number).Forget(); + } + + private async UniTask RenderAsync(int number) + { + var splittedDigits = SplitDigits(number).Reverse().ToList(); + + if (DigitPrefab == default && DigitGameObjects.Any()) + { + DigitPrefab = DigitGameObjects[0]; + } + + if (DelaySeconds > 0.0f) + { + await UniTask.Delay(TimeSpan.FromSeconds(DelaySeconds)); + } + + if (DelayFrames > 0) + { + await UniTask.DelayFrame(DelayFrames); + } + + while (splittedDigits.Count > DigitGameObjects.Count) + { + DigitGameObjects.Add(Instantiate(DigitPrefab, this.DeterminateTransform())); + } + + foreach (var (n, d) in splittedDigits.Select((x, d) => (number: x, digit: d))) + { + DigitGameObjects[d].GetOrAddComponent().sprite = NumberImages[n]; + } + + OnRenderSubject.OnNext(number); + } + + private static IEnumerable SplitDigits(int number) + { + IList result = new List(); + do + { + result.Add(number % 10); + number /= 10; + } while (number > 0); + + return result; + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotation.Create(CurrentCollector, x => Current = x, nameof(Current)), + CollectableMessageAnnotation.Create(DigitPrefabCollector, x => DigitPrefab = x, nameof(DigitPrefab)), + CollectableMessageAnnotation.Create(DelaySecondsCollector, x => DelaySeconds = x, nameof(DelaySeconds)), + CollectableMessageAnnotation.Create(DelayFramesCollector, x => DelayFrames = x, nameof(DelayFrames)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotation.Create(null, "Current"), + }; + } + + public interface INumberRenderer + { + void Render(int number); + } +} diff --git a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs.meta b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs.meta new file mode 100644 index 0000000..fad2d1c --- /dev/null +++ b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 11d224f4a7944dfcb60777ab8d3cc64a +timeCreated: 1571343186 \ No newline at end of file From 75a3b542632624bb4e729654784f2878acb76116 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 09:02:40 +0900 Subject: [PATCH 349/453] :sparkles: Add to directory order --- Assets/Editor/Scripts/SearchWindowProvider.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index f84896a..e8f8636 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -26,6 +26,7 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "Logic", "Expression", "Receiver", + "Complex", "Misc", "ValueProvider", "ValueComparer", From 5c282a100f15bf2ca3689195c33179e737712e21 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 09:03:53 +0900 Subject: [PATCH 350/453] :clipboard: Bump up version to v0.1.0-preview.30 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 2116c8a..d7987c5 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.29.1", + "version": "0.1.0-preview.30", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 5c636925cae2f0e4999af145191352ffc10c2be9 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 11:22:28 +0900 Subject: [PATCH 351/453] :clipboard: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index bbca122..90c8109 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -26,6 +26,7 @@ public enum ConnectorType AnimatorTrigger, AnimationEvent, AudioController, + MusicPlayer, AudioEvent, PlayableController, TimelineEvent, From 0f681d588b197dbde526d788ebc713b1bb153933 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 11:24:23 +0900 Subject: [PATCH 352/453] :clipboard: Move ConnectorType --- Assets/Scripts/ConnectorType.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 90c8109..bba432d 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -26,7 +26,6 @@ public enum ConnectorType AnimatorTrigger, AnimationEvent, AudioController, - MusicPlayer, AudioEvent, PlayableController, TimelineEvent, @@ -94,7 +93,8 @@ public enum ConnectorType ValueInjectorTimelineAudioTrack, ValueInjectorTimelineAnimationTrack, - NumberImageRenderer = 4000, + MusicPlayer = 4000, + NumberImageRenderer, SignalPublisher = 6000, StringSignalPublisher, From 2adb1d775a7819eff3ae1236df72341942a4a906 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 11:24:37 +0900 Subject: [PATCH 353/453] :tada: Add MusicPlayer --- .../Scripts/Connector/Complex/MusicPlayer.cs | 105 ++++++++++++++++++ .../Connector/Complex/MusicPlayer.cs.meta | 3 + 2 files changed, 108 insertions(+) create mode 100644 Assets/Scripts/Connector/Complex/MusicPlayer.cs create mode 100644 Assets/Scripts/Connector/Complex/MusicPlayer.cs.meta diff --git a/Assets/Scripts/Connector/Complex/MusicPlayer.cs b/Assets/Scripts/Connector/Complex/MusicPlayer.cs new file mode 100644 index 0000000..6641fc3 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/MusicPlayer.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using UniFlow; +using UniFlow.Connector.Controller; +using UniFlow.Utility; +using UnityEngine; + +namespace PretendLand.Edwin.Scripts.Connector.Complex +{ + [AddComponentMenu("UniFlow/Controller/MusicPlayer", (int) ConnectorType.MusicPlayer)] + public class MusicPlayer : ConnectorBase, IMessageCollectable + { + private static GameObject baseGameObject; + + private static GameObject BaseGameObject => baseGameObject != default ? baseGameObject : baseGameObject = CreatePersistentGameObject(); + + [SerializeField] private AudioSource audioSource = default; + [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; + [SerializeField] + [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] + private AudioClip audioClip = default; + [SerializeField] private bool loop = true; + [SerializeField] private bool rewindSameClip = default; + + private AudioSource AudioSource + { + get => audioSource != default ? audioSource : audioSource = BaseGameObject.GetOrAddComponent(); + set => audioSource = value; + } + private AudioControlMethod AudioControlMethod => audioControlMethod; + private AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } + private bool Loop + { + get => loop; + set => loop = value; + } + private bool RewindSameClip + { + get => rewindSameClip; + set => rewindSameClip = value; + } + + [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); + [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); + [SerializeField] private BoolCollector loopCollector = default; + [SerializeField] private BoolCollector rewindSameClipCollector = new BoolCollector(); + private AudioSourceCollector AudioSourceCollector => audioSourceCollector; + private AudioClipCollector AudioClipCollector => audioClipCollector; + private BoolCollector LoopCollector => loopCollector; + private BoolCollector RewindSameClipCollector => rewindSameClipCollector; + + + public override IObservable OnConnectAsObservable() + { + InvokeAudioSourceMethod(); + return ObservableFactory.ReturnMessage(this); + } + + private void InvokeAudioSourceMethod() + { + switch (AudioControlMethod) + { + case AudioControlMethod.Play: + if (!AudioSource.isPlaying || AudioSource.clip != AudioClip || RewindSameClip) + { + AudioSource.clip = AudioClip; + AudioSource.loop = Loop; + AudioSource.Play(); + } + break; + case AudioControlMethod.Stop: + AudioSource.Stop(); + break; + case AudioControlMethod.Pause: + AudioSource.Pause(); + break; + case AudioControlMethod.UnPause: + AudioSource.UnPause(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[] + { + CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotation.Create(LoopCollector, x => Loop = x, nameof(Loop)), + CollectableMessageAnnotation.Create(RewindSameClipCollector, x => RewindSameClip = x, nameof(RewindSameClip)), + }; + + private static GameObject CreatePersistentGameObject() + { + var go = new GameObject("MusicPlayer"); + DontDestroyOnLoad(go); + return go; + } + } +} diff --git a/Assets/Scripts/Connector/Complex/MusicPlayer.cs.meta b/Assets/Scripts/Connector/Complex/MusicPlayer.cs.meta new file mode 100644 index 0000000..859a5ed --- /dev/null +++ b/Assets/Scripts/Connector/Complex/MusicPlayer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 34df34cf51f94a0aa12b51e31348fc19 +timeCreated: 1571361660 \ No newline at end of file From 90239bec3a0dcdddc2cb5d9c259de57223b7de72 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 11:24:47 +0900 Subject: [PATCH 354/453] :wrench: Add support for looping --- Assets/Scripts/Connector/Controller/AudioController.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 33143c2..3462968 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -17,6 +17,7 @@ public class AudioController : ConnectorBase, [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; + [SerializeField] private bool loop = default; [SerializeField] private bool ignorePlayWhenPlaying = default; public GameObject BaseGameObject @@ -40,6 +41,11 @@ private AudioClip AudioClip get => audioClip; set => audioClip = value; } + private bool Loop + { + get => loop; + set => loop = value; + } private bool IgnorePlayWhenPlaying { get => ignorePlayWhenPlaying; @@ -50,12 +56,14 @@ private bool IgnorePlayWhenPlaying [SerializeField] private StringCollector transformPathCollector = new StringCollector(); [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); + [SerializeField] private BoolCollector loopCollector = default; [SerializeField] private BoolCollector ignorePlayWhenPlayingCollector = new BoolCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; private AudioSourceCollector AudioSourceCollector => audioSourceCollector; private AudioClipCollector AudioClipCollector => audioClipCollector; + private BoolCollector LoopCollector => loopCollector; private BoolCollector IgnorePlayWhenPlayingCollector => ignorePlayWhenPlayingCollector; public override IObservable OnConnectAsObservable() @@ -69,6 +77,7 @@ private void InvokeAudioSourceMethod() if (AudioClip != default) { AudioSource.playOnAwake = false; + AudioSource.loop = Loop; AudioSource.clip = AudioClip; } @@ -101,6 +110,7 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotation.Create(LoopCollector, x => Loop = x, nameof(Loop)), CollectableMessageAnnotation.Create(IgnorePlayWhenPlayingCollector, x => IgnorePlayWhenPlaying = x, nameof(IgnorePlayWhenPlaying)), }; } From b46138111113744cbe8c39979eb23975ce92d616 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 12:34:42 +0900 Subject: [PATCH 355/453] :sparkles: Reload when entered playmode --- Assets/Editor/Scripts/FlowEditorWindow.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor/Scripts/FlowEditorWindow.cs b/Assets/Editor/Scripts/FlowEditorWindow.cs index bd5ff10..5cc3294 100644 --- a/Assets/Editor/Scripts/FlowEditorWindow.cs +++ b/Assets/Editor/Scripts/FlowEditorWindow.cs @@ -76,6 +76,7 @@ private void OnPlayModeStateChanged(PlayModeStateChange playModeStateChange) case PlayModeStateChange.ExitingEditMode: break; case PlayModeStateChange.EnteredPlayMode: + Reload(); break; case PlayModeStateChange.ExitingPlayMode: break; From 2b0aa848068e5a5ea3d1a0967e47374f3579f13d Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 12:35:18 +0900 Subject: [PATCH 356/453] :sparkles: Reload ConnectorList when load Graph --- Assets/Editor/Scripts/FlowVisualElement.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index 01de18f..d309ede 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -21,6 +21,7 @@ public void Initialize() GUILayout.BeginHorizontal(EditorStyles.toolbar); if (GUILayout.Button("Load", EditorStyles.toolbarButton)) { + FlowGraphView.CollectConnectorsForSearchTree(); UniFlowSettings.instance.SelectedGameObject = Selection.activeGameObject; if (Contains(Content)) { @@ -70,10 +71,6 @@ public void Initialize() Load(); Observable.TimerFrame(1).Subscribe(_ => FlowGraphView.Relocation(true)); } - if (GUILayout.Button("Refresh Connector List", EditorStyles.toolbarButton)) - { - FlowGraphView.CollectConnectorsForSearchTree(); - } if (UniFlowSettings.instance.SelectedGameObject != default) { From 9e1629396979080e2f4d67a9deb15f0d5ac8b6ba Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 12:35:41 +0900 Subject: [PATCH 357/453] :sparkles: Remove unnecessary button --- Assets/Editor/Scripts/FlowVisualElement.cs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Assets/Editor/Scripts/FlowVisualElement.cs b/Assets/Editor/Scripts/FlowVisualElement.cs index d309ede..ffd36c6 100644 --- a/Assets/Editor/Scripts/FlowVisualElement.cs +++ b/Assets/Editor/Scripts/FlowVisualElement.cs @@ -29,15 +29,6 @@ public void Initialize() } Load(); } - if (GUILayout.Button("Load All in Scene", EditorStyles.toolbarButton)) - { - UniFlowSettings.instance.SelectedGameObject = null; - if (Contains(Content)) - { - Remove(Content); - } - Load(); - } GUILayout.Space(6); @@ -113,6 +104,7 @@ private void Load() { name = typeof(FlowGraphView).Name, }; + FlowGraphView.Initialize(); Content = new VisualElement { From 86f33f80aa0cf49d1cdd385ccad6b821e8a2a938 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 13:05:42 +0900 Subject: [PATCH 358/453] :clipboard: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index bba432d..c7b2e63 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -65,6 +65,15 @@ public enum ConnectorType ValueProviderRuntimePlatform, CustomValueProvider, + ObjectSelectorByInt = 1500, + GameObjectSelectorByInt, + ComponentSelectorByInt, + TransformSelectorByInt, + AudioClipSelectorByInt, + AnimationClipSelectorByInt, + TimelineAssetSelectorByInt, + CustomValueSelector, + ValueComparerBool = 2000, ValueComparerByte, ValueComparerInt, @@ -114,6 +123,8 @@ public enum ConnectorType Interval, IntervalFrame, TimeScaleController, + RandomInt, + RandomFloat, Empty, Toss = 9100, From 3bd38fb8b6c9e1b46f214cefd06e33b148096201 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 13:05:55 +0900 Subject: [PATCH 359/453] :wrench: Set label --- Assets/Scripts/Connector/ValueProvider/SelectorBase.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 2bad007..da3b4cd 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -19,7 +19,7 @@ public abstract class SelectorBase : ConnectorBase, private IList Keys => keys; private IList Values => values; - public TKey Key { get; set; } + private TKey Key { get; set; } [SerializeField] private TKeyCollector keyCollector = new TKeyCollector(); private TKeyCollector KeyCollector => keyCollector; @@ -29,16 +29,16 @@ public override IObservable OnConnectAsObservable() return Observable.Return(this.CreateMessage()); } - IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), + CollectableMessageAnnotation.Create(KeyCollector, x => Key = x, nameof(Key)), }; - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - CollectableMessageAnnotation.Create(KeyCollector, x => Key = x), + ComposableMessageAnnotation.Create(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), }; } From 8b7a1bc2b964c91640177b4eba9f560671a51d72 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 13:06:18 +0900 Subject: [PATCH 360/453] :sparkles: Implement int based selectors --- Assets/Scripts/Connector/ValueSelector.meta | 3 +++ .../ValueSelector/AnimationClipSelectorByInt.cs | 10 ++++++++++ .../ValueSelector/AnimationClipSelectorByInt.cs.meta | 3 +++ .../Connector/ValueSelector/AudioClipSelectorByInt.cs | 10 ++++++++++ .../ValueSelector/AudioClipSelectorByInt.cs.meta | 3 +++ .../Connector/ValueSelector/ComponentSelectorByInt.cs | 10 ++++++++++ .../ValueSelector/ComponentSelectorByInt.cs.meta | 3 +++ .../ValueSelector/GameObjectSelectorByInt.cs | 10 ++++++++++ .../ValueSelector/GameObjectSelectorByInt.cs.meta | 3 +++ .../Connector/ValueSelector/ObjectSelectorByInt.cs | 10 ++++++++++ .../ValueSelector/ObjectSelectorByInt.cs.meta | 3 +++ .../ValueSelector/TimelineAssetSelectorByInt.cs | 11 +++++++++++ .../ValueSelector/TimelineAssetSelectorByInt.cs.meta | 3 +++ .../Connector/ValueSelector/TransformSelectorByInt.cs | 10 ++++++++++ .../ValueSelector/TransformSelectorByInt.cs.meta | 3 +++ 15 files changed, 95 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueSelector.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector.meta b/Assets/Scripts/Connector/ValueSelector.meta new file mode 100644 index 0000000..a1d48ef --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 075440a1209748028e6127c67da50329 +timeCreated: 1571370796 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs new file mode 100644 index 0000000..bbf174d --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/AnimationClipSelectorByInt", (int) ConnectorType.AnimationClipSelectorByInt)] + public class AnimationClipSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs.meta new file mode 100644 index 0000000..6825690 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 86be1ea93f254b878178e0d36c802c59 +timeCreated: 1571371160 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs new file mode 100644 index 0000000..1e45d52 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/AudioClipSelectorByInt", (int) ConnectorType.AudioClipSelectorByInt)] + public class AudioClipSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs.meta new file mode 100644 index 0000000..50e71f2 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f4e1612d8c0647d2ab9ec211437e9ee1 +timeCreated: 1571370796 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs new file mode 100644 index 0000000..edc7fe6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/ComponentSelectorByInt", (int) ConnectorType.ComponentSelectorByInt)] + public class ComponentSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs.meta new file mode 100644 index 0000000..03873dc --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 95ec483b390d43b6b93082a90e9ebe31 +timeCreated: 1571371149 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs new file mode 100644 index 0000000..c99a4fc --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/GameObjectSelectorByInt", (int) ConnectorType.GameObjectSelectorByInt)] + public class GameObjectSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs.meta new file mode 100644 index 0000000..b7b2c9f --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7838fd9fc98843a1aac1da6fbccc5686 +timeCreated: 1571371032 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs new file mode 100644 index 0000000..11819ae --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/ObjectSelectorByInt", (int) ConnectorType.ObjectSelectorByInt)] + public class ObjectSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs.meta new file mode 100644 index 0000000..ac7fa7a --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b8d79e8b99aa43068a201c3b115fd8f6 +timeCreated: 1571371025 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs new file mode 100644 index 0000000..9d28445 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs @@ -0,0 +1,11 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/TimelineAssetSelectorByInt", (int) ConnectorType.TimelineAssetSelectorByInt)] + public class TimelineAssetSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs.meta new file mode 100644 index 0000000..26bd6ec --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4aea60b243fc4a47873982fd96c4c434 +timeCreated: 1571371172 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs new file mode 100644 index 0000000..d99b14a --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/TransformSelectorByInt", (int) ConnectorType.TransformSelectorByInt)] + public class TransformSelectorByInt : SelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs.meta new file mode 100644 index 0000000..e0a2840 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f3ce38b88a8744bd8e46b7855ab7aa8a +timeCreated: 1571371037 \ No newline at end of file From 0c0f176b4402b2bfe0055506c1f730979555cf11 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 13:06:36 +0900 Subject: [PATCH 361/453] :sparkles: Add RandomInt and RandomFloat --- Assets/Scripts/Connector/Logic/RandomFloat.cs | 53 +++++++++++++++++++ .../Connector/Logic/RandomFloat.cs.meta | 3 ++ Assets/Scripts/Connector/Logic/RandomInt.cs | 53 +++++++++++++++++++ .../Scripts/Connector/Logic/RandomInt.cs.meta | 3 ++ 4 files changed, 112 insertions(+) create mode 100644 Assets/Scripts/Connector/Logic/RandomFloat.cs create mode 100644 Assets/Scripts/Connector/Logic/RandomFloat.cs.meta create mode 100644 Assets/Scripts/Connector/Logic/RandomInt.cs create mode 100644 Assets/Scripts/Connector/Logic/RandomInt.cs.meta diff --git a/Assets/Scripts/Connector/Logic/RandomFloat.cs b/Assets/Scripts/Connector/Logic/RandomFloat.cs new file mode 100644 index 0000000..badc2dc --- /dev/null +++ b/Assets/Scripts/Connector/Logic/RandomFloat.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using UniFlow.Utility; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace UniFlow.Connector.Logic +{ + [AddComponentMenu("UniFlow/Logic/RandomFloat", (int) ConnectorType.RandomFloat)] + public class RandomFloat : ConnectorBase, IMessageCollectable, IMessageComposable + { + [SerializeField][Tooltip("Inclusive")] private float min = default; + [SerializeField][Tooltip("Inclusive")] private float max = default; + + private float Min + { + get => min; + set => min = value; + } + + private float Max + { + get => max; + set => max = value; + } + + private float Value { get; set; } + + [SerializeField] private FloatCollector minCollector = new FloatCollector(); + [SerializeField] private FloatCollector maxCollector = new FloatCollector(); + private FloatCollector MinCollector => minCollector; + private FloatCollector MaxCollector => maxCollector; + + public override IObservable OnConnectAsObservable() + { + Value = Random.Range(Min, Max); + return ObservableFactory.ReturnMessage(this, nameof(Value), Value); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotation.Create(MinCollector, x => Min = x, nameof(Min)), + CollectableMessageAnnotation.Create(MaxCollector, x => Max = x, nameof(Max)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotation.Create(null, nameof(Value)), + }; + } +} diff --git a/Assets/Scripts/Connector/Logic/RandomFloat.cs.meta b/Assets/Scripts/Connector/Logic/RandomFloat.cs.meta new file mode 100644 index 0000000..6eeefa0 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/RandomFloat.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c6e1cb4b72c34006b5aac5fb4f112a17 +timeCreated: 1571370328 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Logic/RandomInt.cs b/Assets/Scripts/Connector/Logic/RandomInt.cs new file mode 100644 index 0000000..6df837b --- /dev/null +++ b/Assets/Scripts/Connector/Logic/RandomInt.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using UniFlow.Utility; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace UniFlow.Connector.Logic +{ + [AddComponentMenu("UniFlow/Logic/RandomInt", (int) ConnectorType.RandomInt)] + public class RandomInt : ConnectorBase, IMessageCollectable, IMessageComposable + { + [SerializeField][Tooltip("Inclusive")] private int min = default; + [SerializeField][Tooltip("Exclusive")] private int max = default; + + private int Min + { + get => min; + set => min = value; + } + + private int Max + { + get => max; + set => max = value; + } + + private int Value { get; set; } + + [SerializeField] private IntCollector minCollector = new IntCollector(); + [SerializeField] private IntCollector maxCollector = new IntCollector(); + private IntCollector MinCollector => minCollector; + private IntCollector MaxCollector => maxCollector; + + public override IObservable OnConnectAsObservable() + { + Value = Random.Range(Min, Max); + return ObservableFactory.ReturnMessage(this, nameof(Value), Value); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotation.Create(MinCollector, x => Min = x, nameof(Min)), + CollectableMessageAnnotation.Create(MaxCollector, x => Max = x, nameof(Max)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotation.Create(null, nameof(Value)), + }; + } +} diff --git a/Assets/Scripts/Connector/Logic/RandomInt.cs.meta b/Assets/Scripts/Connector/Logic/RandomInt.cs.meta new file mode 100644 index 0000000..7453b93 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/RandomInt.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6db01b8df4cc4359aef17a4615919c93 +timeCreated: 1571369898 \ No newline at end of file From 9e09c8429d39bfb4a160fbb7b6520bf649c49372 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 13:08:53 +0900 Subject: [PATCH 362/453] :clipboard: Bump up v0.1.0-preview.31 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index d7987c5..18242c0 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.30", + "version": "0.1.0-preview.31", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 515c3f41aa77c40947b4e1eb8a7602a3639f86d7 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 18 Oct 2019 19:13:27 +0900 Subject: [PATCH 363/453] :beetle: Use Equals instead of == to compare value instead of reference --- Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs index db5b704..f56e7cc 100644 --- a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs @@ -11,9 +11,9 @@ protected override bool Compare(UnityEngine.Object actual) switch (Operator) { case OperatorType.Equal: - return actual == Expect; + return Equals(actual, Expect); case OperatorType.NotEqual: - return actual != Expect; + return !Equals(actual, Expect); case OperatorType.Null: return actual == default; case OperatorType.NotNull: From 9bb1d96babcb92aa79d01766f56c58207b6b7bb3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 20 Oct 2019 17:25:54 +0900 Subject: [PATCH 364/453] :wrench: Add sortOrder --- Assets/Editor/Scripts/SearchWindowProvider.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index e8f8636..2505bf4 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -29,6 +29,7 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "Complex", "Misc", "ValueProvider", + "ValueSelector", "ValueComparer", "ValueInjector", "SignalPublisher", From e75b119fb6d1000b9c06c8ece09f0a292b4ae65e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 20 Oct 2019 17:26:45 +0900 Subject: [PATCH 365/453] :sparkles: Implement AnnotationFactory instead of inner class --- Assets/Scripts/MessageAnnotation.cs | 48 +++++++++++++++++++---------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/Assets/Scripts/MessageAnnotation.cs b/Assets/Scripts/MessageAnnotation.cs index 6400b70..9223c8f 100644 --- a/Assets/Scripts/MessageAnnotation.cs +++ b/Assets/Scripts/MessageAnnotation.cs @@ -12,7 +12,7 @@ public interface IComposableMessageAnnotation public class ComposableMessageAnnotation : IComposableMessageAnnotation { - private ComposableMessageAnnotation(Func callback, string key) + internal ComposableMessageAnnotation(Func callback, string key) { Type = typeof(TValue); Callback = callback; @@ -32,16 +32,6 @@ Message IComposableMessageAnnotation.Compose(Message message) return message; } - - public static ComposableMessageAnnotation Create(Func callback) - { - return Create(callback, typeof(TValue).Name); - } - - public static ComposableMessageAnnotation Create(Func callback, string key) - { - return new ComposableMessageAnnotation(callback, key); - } } public interface ICollectableMessageAnnotation @@ -55,7 +45,7 @@ public interface ICollectableMessageAnnotation public class CollectableMessageAnnotation : ICollectableMessageAnnotation { - private CollectableMessageAnnotation(IValueCollector valueCollector, Action callback, string key) + internal CollectableMessageAnnotation(IValueCollector valueCollector, Action callback, string key) { Type = typeof(TValue); ValueCollector = valueCollector; @@ -91,17 +81,41 @@ private TValue GetValue() return result; } + } + + public static class ComposableMessageAnnotationFactory + { + public static IComposableMessageAnnotation Create() + { + return Create(null, typeof(TValue).Name); + } - public static CollectableMessageAnnotation Create(TValueCollector valueCollector, Action callback) - where TValueCollector : ValueCollectorBase, new() + public static IComposableMessageAnnotation Create(string key) + { + return Create(null, key); + } + + public static IComposableMessageAnnotation Create(Func callback) + { + return Create(callback, typeof(TValue).Name); + } + + public static IComposableMessageAnnotation Create(Func callback, string key) + { + return new ComposableMessageAnnotation(callback, key); + } + } + + public static class CollectableMessageAnnotationFactory + { + public static ICollectableMessageAnnotation Create(IValueCollector valueCollector, Action callback) { return Create(valueCollector, callback, typeof(TValue).Name); } - public static CollectableMessageAnnotation Create(TValueCollector valueCollector, Action callback, string key) - where TValueCollector : ValueCollectorBase, new() + public static ICollectableMessageAnnotation Create(IValueCollector valueCollector, Action callback, string key) { - return new CollectableMessageAnnotation(valueCollector ?? new TValueCollector(), callback, key); + return new CollectableMessageAnnotation(valueCollector, callback, key); } } } From 72cc12b1e754847e3b49cd9ee129ea60e28e2966 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 20 Oct 2019 17:27:16 +0900 Subject: [PATCH 366/453] :sparkles: Use Factory --- .../Scripts/Connector/Complex/MusicPlayer.cs | 10 +++++----- .../Connector/Complex/NumberImageRenderer.cs | 16 ++++++++-------- .../Controller/ActivationController.cs | 8 ++++---- .../Connector/Controller/AnimatorTrigger.cs | 10 +++++----- .../Connector/Controller/AudioController.cs | 14 +++++++------- .../Controller/InstantiateGameObject.cs | 10 +++++----- .../InstantiateGameObjectWithInjectionBase.cs | 8 ++++---- .../Controller/MoveParentTransform.cs | 8 ++++---- .../Connector/Controller/PlayableController.cs | 10 +++++----- .../Controller/SimpleAnimationController.cs | 12 ++++++------ .../Controller/TimeScaleController.cs | 8 ++++---- .../Controller/TransformSiblingController.cs | 6 +++--- .../Scripts/Connector/Event/AnimationEvent.cs | 14 +++++++------- Assets/Scripts/Connector/Event/AudioEvent.cs | 10 +++++----- Assets/Scripts/Connector/Event/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Event/MouseEvent.cs | 2 +- .../Scripts/Connector/Event/ParticleEvent.cs | 2 +- .../Connector/Event/PhysicsCollision2DEvent.cs | 2 +- .../Connector/Event/PhysicsCollisionEvent.cs | 2 +- .../Connector/Event/PhysicsTrigger2DEvent.cs | 2 +- .../Connector/Event/PhysicsTriggerEvent.cs | 2 +- .../Connector/Event/RectTransformEvent.cs | 2 +- .../Connector/Event/SimpleAnimationEvent.cs | 12 ++++++------ .../Scripts/Connector/Event/TimelineEvent.cs | 10 +++++----- .../Scripts/Connector/Event/TransformEvent.cs | 2 +- .../Connector/Event/UIBehaviourEventTrigger.cs | 12 ++++++------ Assets/Scripts/Connector/Expression/And.cs | 2 +- Assets/Scripts/Connector/Expression/Not.cs | 2 +- Assets/Scripts/Connector/Expression/Or.cs | 2 +- Assets/Scripts/Connector/Expression/Xor.cs | 4 ++-- Assets/Scripts/Connector/Logic/Interval.cs | 6 +++--- .../Scripts/Connector/Logic/IntervalFrame.cs | 6 +++--- Assets/Scripts/Connector/Logic/RandomFloat.cs | 6 +++--- Assets/Scripts/Connector/Logic/RandomInt.cs | 6 +++--- Assets/Scripts/Connector/Logic/Timer.cs | 6 +++--- Assets/Scripts/Connector/Logic/TimerFrame.cs | 6 +++--- .../Misc/BoundarySignalReceiverBase.cs | 2 +- .../Connector/Misc/BoundarySignalSenderBase.cs | 2 +- Assets/Scripts/Connector/Misc/Toss.cs | 2 +- .../SignalPublisher/StringSignalPublisher.cs | 16 ++++++++-------- .../SignalReceiver/StringSignalReceiver.cs | 16 ++++++++-------- .../Connector/ValueComparer/ComparerBase.cs | 6 +++--- .../Connector/ValueInjector/ImageInjector.cs | 12 ++++++------ .../ValueInjector/RawImageInjector.cs | 10 +++++----- .../Timeline/AnimationTrackInjector.cs | 14 +++++++------- .../Timeline/AudioTrackInjector.cs | 14 +++++++------- .../Timeline/ControlTrackInjector.cs | 16 ++++++++-------- .../Connector/ValueProvider/Color32Provider.cs | 10 +++++----- .../Connector/ValueProvider/ColorProvider.cs | 10 +++++----- .../ValueProvider/EnumListProviderBase.cs | 2 +- .../ValueProvider/ListProviderBase.cs | 4 ++-- .../ValueProvider/QuaternionProvider.cs | 18 +++++++++--------- .../Connector/ValueProvider/SelectorBase.cs | 4 ++-- .../ValueProvider/Vector2IntProvider.cs | 10 +++++----- .../Connector/ValueProvider/Vector2Provider.cs | 10 +++++----- .../ValueProvider/Vector3IntProvider.cs | 12 ++++++------ .../Connector/ValueProvider/Vector3Provider.cs | 12 ++++++------ .../Connector/ValueProvider/Vector4Provider.cs | 14 +++++++------- 58 files changed, 229 insertions(+), 229 deletions(-) diff --git a/Assets/Scripts/Connector/Complex/MusicPlayer.cs b/Assets/Scripts/Connector/Complex/MusicPlayer.cs index 6641fc3..637a0a5 100644 --- a/Assets/Scripts/Connector/Complex/MusicPlayer.cs +++ b/Assets/Scripts/Connector/Complex/MusicPlayer.cs @@ -87,12 +87,12 @@ private void InvokeAudioSourceMethod() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), - CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), - CollectableMessageAnnotation.Create(LoopCollector, x => Loop = x, nameof(Loop)), - CollectableMessageAnnotation.Create(RewindSameClipCollector, x => RewindSameClip = x, nameof(RewindSameClip)), + CollectableMessageAnnotationFactory.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotationFactory.Create(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotationFactory.Create(LoopCollector, x => Loop = x, nameof(Loop)), + CollectableMessageAnnotationFactory.Create(RewindSameClipCollector, x => RewindSameClip = x, nameof(RewindSameClip)), }; private static GameObject CreatePersistentGameObject() diff --git a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs index 748da42..5ce85e1 100644 --- a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs +++ b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs @@ -128,20 +128,20 @@ private static IEnumerable SplitDigits(int number) } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(CurrentCollector, x => Current = x, nameof(Current)), - CollectableMessageAnnotation.Create(DigitPrefabCollector, x => DigitPrefab = x, nameof(DigitPrefab)), - CollectableMessageAnnotation.Create(DelaySecondsCollector, x => DelaySeconds = x, nameof(DelaySeconds)), - CollectableMessageAnnotation.Create(DelayFramesCollector, x => DelayFrames = x, nameof(DelayFrames)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(CurrentCollector, x => Current = x, nameof(Current)), + CollectableMessageAnnotationFactory.Create(DigitPrefabCollector, x => DigitPrefab = x, nameof(DigitPrefab)), + CollectableMessageAnnotationFactory.Create(DelaySecondsCollector, x => DelaySeconds = x, nameof(DelaySeconds)), + CollectableMessageAnnotationFactory.Create(DelayFramesCollector, x => DelayFrames = x, nameof(DelayFrames)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(null, "Current"), + ComposableMessageAnnotationFactory.Create(null, "Current"), }; } diff --git a/Assets/Scripts/Connector/Controller/ActivationController.cs b/Assets/Scripts/Connector/Controller/ActivationController.cs index 3f727de..359b5b0 100644 --- a/Assets/Scripts/Connector/Controller/ActivationController.cs +++ b/Assets/Scripts/Connector/Controller/ActivationController.cs @@ -58,11 +58,11 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(ActivatedCollector, x => Activated = x, nameof(Activated)), - CollectableMessageAnnotation.Create(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), - CollectableMessageAnnotation.Create(TargetBehaviourCollector, x => TargetBehaviour = x, nameof(TargetBehaviour)), + CollectableMessageAnnotationFactory.Create(ActivatedCollector, x => Activated = x, nameof(Activated)), + CollectableMessageAnnotationFactory.Create(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), + CollectableMessageAnnotationFactory.Create(TargetBehaviourCollector, x => TargetBehaviour = x, nameof(TargetBehaviour)), }; } } diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index e8f585e..402db0c 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -57,12 +57,12 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), - CollectableMessageAnnotation.Create(TriggerNameCollector, x => TriggerName = x, nameof(TriggerName)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotationFactory.Create(TriggerNameCollector, x => TriggerName = x, nameof(TriggerName)), }; } } diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 3462968..022bee0 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -104,14 +104,14 @@ private void InvokeAudioSourceMethod() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), - CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), - CollectableMessageAnnotation.Create(LoopCollector, x => Loop = x, nameof(Loop)), - CollectableMessageAnnotation.Create(IgnorePlayWhenPlayingCollector, x => IgnorePlayWhenPlaying = x, nameof(IgnorePlayWhenPlaying)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotationFactory.Create(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotationFactory.Create(LoopCollector, x => Loop = x, nameof(Loop)), + CollectableMessageAnnotationFactory.Create(IgnorePlayWhenPlayingCollector, x => IgnorePlayWhenPlaying = x, nameof(IgnorePlayWhenPlaying)), }; } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index 01fc1df..adb1996 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -42,16 +42,16 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(SourceCollector, x => Source = x, nameof(Source)), - CollectableMessageAnnotation.Create(ParentCollector, x => Parent = x, nameof(Parent)), + CollectableMessageAnnotationFactory.Create(SourceCollector, x => Source = x, nameof(Source)), + CollectableMessageAnnotationFactory.Create(ParentCollector, x => Parent = x, nameof(Parent)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Instantiated, nameof(Instantiated)), + ComposableMessageAnnotationFactory.Create(() => Instantiated, nameof(Instantiated)), }; } } diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs index eb18071..4a9f4d2 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObjectWithInjectionBase.cs @@ -44,10 +44,10 @@ public override IObservable OnConnectAsObservable() } protected virtual IEnumerable GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(SourceCollector, x => Source = x, nameof(Source)), - CollectableMessageAnnotation.Create(ParentCollector, x => Parent = x, nameof(Parent)), + CollectableMessageAnnotationFactory.Create(SourceCollector, x => Source = x, nameof(Source)), + CollectableMessageAnnotationFactory.Create(ParentCollector, x => Parent = x, nameof(Parent)), }; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => @@ -56,7 +56,7 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => Instantiated), + ComposableMessageAnnotationFactory.Create(() => Instantiated), }; } } diff --git a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs index fe22ad0..3e50855 100644 --- a/Assets/Scripts/Connector/Controller/MoveParentTransform.cs +++ b/Assets/Scripts/Connector/Controller/MoveParentTransform.cs @@ -47,11 +47,11 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), - CollectableMessageAnnotation.Create(ParentTransformCollector, x => ParentTransform = x, nameof(ParentTransform)), - CollectableMessageAnnotation.Create(WorldPositionStaysCollector, x => WorldPositionStays = x, nameof(WorldPositionStays)), + CollectableMessageAnnotationFactory.Create(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), + CollectableMessageAnnotationFactory.Create(ParentTransformCollector, x => ParentTransform = x, nameof(ParentTransform)), + CollectableMessageAnnotationFactory.Create(WorldPositionStaysCollector, x => WorldPositionStays = x, nameof(WorldPositionStays)), }; } } diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 6664983..9107da5 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -86,12 +86,12 @@ private void InvokePlayableDirectorMethod() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x), - CollectableMessageAnnotation.Create(TimelineAssetCollector, x => TimelineAsset = x), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PlayableDirectorCollector, x => PlayableDirector = x), + CollectableMessageAnnotationFactory.Create(TimelineAssetCollector, x => TimelineAsset = x), }; } diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index bd9339c..0f8e724 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -131,13 +131,13 @@ private void OnDestroy() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), - CollectableMessageAnnotation.Create(SimpleAnimationCollector, x => SimpleAnimation = x), - CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotationFactory.Create(SimpleAnimationCollector, x => SimpleAnimation = x), + CollectableMessageAnnotationFactory.Create(AnimationClipCollector, x => AnimationClip = x), }; } diff --git a/Assets/Scripts/Connector/Controller/TimeScaleController.cs b/Assets/Scripts/Connector/Controller/TimeScaleController.cs index 539c615..4601bea 100644 --- a/Assets/Scripts/Connector/Controller/TimeScaleController.cs +++ b/Assets/Scripts/Connector/Controller/TimeScaleController.cs @@ -68,11 +68,11 @@ private void ChangeTimeScale() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(TimeScaleCollector, x => TimeScale = x, nameof(TimeScale)), - CollectableMessageAnnotation.Create(DurationCollector, x => Duration = x, nameof(Duration)), - CollectableMessageAnnotation.Create(EaseTypeCollector, x => EaseType = x, nameof(EaseType)), + CollectableMessageAnnotationFactory.Create(TimeScaleCollector, x => TimeScale = x, nameof(TimeScale)), + CollectableMessageAnnotationFactory.Create(DurationCollector, x => Duration = x, nameof(Duration)), + CollectableMessageAnnotationFactory.Create(EaseTypeCollector, x => EaseType = x, nameof(EaseType)), }; } } diff --git a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs index aafd138..6c0ce83 100644 --- a/Assets/Scripts/Connector/Controller/TransformSiblingController.cs +++ b/Assets/Scripts/Connector/Controller/TransformSiblingController.cs @@ -51,10 +51,10 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), - CollectableMessageAnnotation.Create(IndexCollector, x => Index = x, nameof(Index)), + CollectableMessageAnnotationFactory.Create(TargetTransformCollector, x => TargetTransform = x, nameof(TargetTransform)), + CollectableMessageAnnotationFactory.Create(IndexCollector, x => Index = x, nameof(Index)), }; } diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index c0f48b1..fc6f465 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -105,19 +105,19 @@ private void PrepareAnimationEvent() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), - CollectableMessageAnnotation.Create(SimpleAnimationCollector, x => SimpleAnimation = x), - CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotationFactory.Create(SimpleAnimationCollector, x => SimpleAnimation = x), + CollectableMessageAnnotationFactory.Create(AnimationClipCollector, x => AnimationClip = x), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => LatestAnimationEvent), + ComposableMessageAnnotationFactory.Create(() => LatestAnimationEvent), }; } } diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index c037044..9c2218c 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -114,12 +114,12 @@ private AudioEventType DetectAudioEventType(bool isPlaying, AudioClip clip) } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(AudioSourceCollector, x => AudioSource = x), - CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotationFactory.Create(AudioClipCollector, x => AudioClip = x), }; } diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 7f456fe..3d18f70 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -43,7 +43,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/MouseEvent.cs b/Assets/Scripts/Connector/Event/MouseEvent.cs index 9571c2d..bcf53fe 100644 --- a/Assets/Scripts/Connector/Event/MouseEvent.cs +++ b/Assets/Scripts/Connector/Event/MouseEvent.cs @@ -58,7 +58,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/ParticleEvent.cs b/Assets/Scripts/Connector/Event/ParticleEvent.cs index 2a60c8f..ea4deea 100644 --- a/Assets/Scripts/Connector/Event/ParticleEvent.cs +++ b/Assets/Scripts/Connector/Event/ParticleEvent.cs @@ -48,7 +48,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs index 7d475f6..ebd9953 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollision2DEvent.cs @@ -47,7 +47,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs index 5ec0646..ab3cc80 100644 --- a/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsCollisionEvent.cs @@ -48,7 +48,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs index d86f3a4..bbc7076 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTrigger2DEvent.cs @@ -47,7 +47,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs index a7f410b..95b8d63 100644 --- a/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs +++ b/Assets/Scripts/Connector/Event/PhysicsTriggerEvent.cs @@ -47,7 +47,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/RectTransformEvent.cs b/Assets/Scripts/Connector/Event/RectTransformEvent.cs index e63f214..93c9b44 100644 --- a/Assets/Scripts/Connector/Event/RectTransformEvent.cs +++ b/Assets/Scripts/Connector/Event/RectTransformEvent.cs @@ -46,7 +46,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index d872f19..3485ea2 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -111,13 +111,13 @@ private void OnChangeAnimatorStateInfo(Pair<(bool isPlaying, float normalizedTim } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(AnimatorCollector, x => Animator = x), - CollectableMessageAnnotation.Create(SimpleAnimationCollector, x => SimpleAnimation = x), - CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(AnimatorCollector, x => Animator = x), + CollectableMessageAnnotationFactory.Create(SimpleAnimationCollector, x => SimpleAnimation = x), + CollectableMessageAnnotationFactory.Create(AnimationClipCollector, x => AnimationClip = x), }; } diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 51fbbec..71f2780 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -165,12 +165,12 @@ private void DispatchEnd() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x), - CollectableMessageAnnotation.Create(TimelineAssetCollector, x => TimelineAsset = x), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PlayableDirectorCollector, x => PlayableDirector = x), + CollectableMessageAnnotationFactory.Create(TimelineAssetCollector, x => TimelineAsset = x), }; } diff --git a/Assets/Scripts/Connector/Event/TransformEvent.cs b/Assets/Scripts/Connector/Event/TransformEvent.cs index 59d24a8..06658e3 100644 --- a/Assets/Scripts/Connector/Event/TransformEvent.cs +++ b/Assets/Scripts/Connector/Event/TransformEvent.cs @@ -46,7 +46,7 @@ private IObservable OnEventAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ComponentCollector, x => Component = x), + CollectableMessageAnnotationFactory.Create(ComponentCollector, x => Component = x), }; } diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 5bc0824..0bdd055 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -135,13 +135,13 @@ private void OnDestroy() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(UIBehaviourCollector, x => UIBehaviour = x), - CollectableMessageAnnotation.Create(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x, nameof(ActivateBeforeConnect)), - CollectableMessageAnnotation.Create(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x, nameof(DeactivateAfterConnect)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(UIBehaviourCollector, x => UIBehaviour = x), + CollectableMessageAnnotationFactory.Create(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x, nameof(ActivateBeforeConnect)), + CollectableMessageAnnotationFactory.Create(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x, nameof(DeactivateAfterConnect)), }; } } diff --git a/Assets/Scripts/Connector/Expression/And.cs b/Assets/Scripts/Connector/Expression/And.cs index 794ea9c..727411b 100644 --- a/Assets/Scripts/Connector/Expression/And.cs +++ b/Assets/Scripts/Connector/Expression/And.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ValueCollector, x => Value = x, nameof(Value)), + CollectableMessageAnnotationFactory.Create(ValueCollector, x => Value = x, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Expression/Not.cs b/Assets/Scripts/Connector/Expression/Not.cs index 6fe107a..8750cb3 100644 --- a/Assets/Scripts/Connector/Expression/Not.cs +++ b/Assets/Scripts/Connector/Expression/Not.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ValueCollector, x => Value = x, nameof(Value)), + CollectableMessageAnnotationFactory.Create(ValueCollector, x => Value = x, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Expression/Or.cs b/Assets/Scripts/Connector/Expression/Or.cs index 2ae1b99..e860b43 100644 --- a/Assets/Scripts/Connector/Expression/Or.cs +++ b/Assets/Scripts/Connector/Expression/Or.cs @@ -28,7 +28,7 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ValueCollector, x => Value = x, nameof(Value)), + CollectableMessageAnnotationFactory.Create(ValueCollector, x => Value = x, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Expression/Xor.cs b/Assets/Scripts/Connector/Expression/Xor.cs index c1d6a57..a80007b 100644 --- a/Assets/Scripts/Connector/Expression/Xor.cs +++ b/Assets/Scripts/Connector/Expression/Xor.cs @@ -25,8 +25,8 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(LeftCollector, x => Left = x, nameof(Left)), - CollectableMessageAnnotation.Create(RightCollector, x => Right = x, nameof(Right)), + CollectableMessageAnnotationFactory.Create(LeftCollector, x => Left = x, nameof(Left)), + CollectableMessageAnnotationFactory.Create(RightCollector, x => Right = x, nameof(Right)), }; } } diff --git a/Assets/Scripts/Connector/Logic/Interval.cs b/Assets/Scripts/Connector/Logic/Interval.cs index 6b67447..bbd2e71 100644 --- a/Assets/Scripts/Connector/Logic/Interval.cs +++ b/Assets/Scripts/Connector/Logic/Interval.cs @@ -39,10 +39,10 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), - CollectableMessageAnnotation.Create(IgnoreTimeScaleCollector, x => IgnoreTimeScale = x, nameof(IgnoreTimeScale)), + CollectableMessageAnnotationFactory.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), + CollectableMessageAnnotationFactory.Create(IgnoreTimeScaleCollector, x => IgnoreTimeScale = x, nameof(IgnoreTimeScale)), }; } } diff --git a/Assets/Scripts/Connector/Logic/IntervalFrame.cs b/Assets/Scripts/Connector/Logic/IntervalFrame.cs index 732f8af..fadcaea 100644 --- a/Assets/Scripts/Connector/Logic/IntervalFrame.cs +++ b/Assets/Scripts/Connector/Logic/IntervalFrame.cs @@ -39,10 +39,10 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(FramesCollector, x => Frames = x, nameof(Frames)), - CollectableMessageAnnotation.Create(FrameCountTypeCollector, x => FrameCountType = x, nameof(FrameCountType)), + CollectableMessageAnnotationFactory.Create(FramesCollector, x => Frames = x, nameof(Frames)), + CollectableMessageAnnotationFactory.Create(FrameCountTypeCollector, x => FrameCountType = x, nameof(FrameCountType)), }; } } diff --git a/Assets/Scripts/Connector/Logic/RandomFloat.cs b/Assets/Scripts/Connector/Logic/RandomFloat.cs index badc2dc..a13b776 100644 --- a/Assets/Scripts/Connector/Logic/RandomFloat.cs +++ b/Assets/Scripts/Connector/Logic/RandomFloat.cs @@ -40,14 +40,14 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(MinCollector, x => Min = x, nameof(Min)), - CollectableMessageAnnotation.Create(MaxCollector, x => Max = x, nameof(Max)), + CollectableMessageAnnotationFactory.Create(MinCollector, x => Min = x, nameof(Min)), + CollectableMessageAnnotationFactory.Create(MaxCollector, x => Max = x, nameof(Max)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(null, nameof(Value)), + ComposableMessageAnnotationFactory.Create(nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Logic/RandomInt.cs b/Assets/Scripts/Connector/Logic/RandomInt.cs index 6df837b..e969565 100644 --- a/Assets/Scripts/Connector/Logic/RandomInt.cs +++ b/Assets/Scripts/Connector/Logic/RandomInt.cs @@ -40,14 +40,14 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(MinCollector, x => Min = x, nameof(Min)), - CollectableMessageAnnotation.Create(MaxCollector, x => Max = x, nameof(Max)), + CollectableMessageAnnotationFactory.Create(MinCollector, x => Min = x, nameof(Min)), + CollectableMessageAnnotationFactory.Create(MaxCollector, x => Max = x, nameof(Max)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(null, nameof(Value)), + ComposableMessageAnnotationFactory.Create(null, nameof(Value)), }; } } diff --git a/Assets/Scripts/Connector/Logic/Timer.cs b/Assets/Scripts/Connector/Logic/Timer.cs index f6630ac..8b8ab69 100644 --- a/Assets/Scripts/Connector/Logic/Timer.cs +++ b/Assets/Scripts/Connector/Logic/Timer.cs @@ -39,10 +39,10 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), - CollectableMessageAnnotation.Create(IgnoreTimeScaleCollector, x => IgnoreTimeScale = x, nameof(IgnoreTimeScale)), + CollectableMessageAnnotationFactory.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), + CollectableMessageAnnotationFactory.Create(IgnoreTimeScaleCollector, x => IgnoreTimeScale = x, nameof(IgnoreTimeScale)), }; } } diff --git a/Assets/Scripts/Connector/Logic/TimerFrame.cs b/Assets/Scripts/Connector/Logic/TimerFrame.cs index 32a0d04..1968a65 100644 --- a/Assets/Scripts/Connector/Logic/TimerFrame.cs +++ b/Assets/Scripts/Connector/Logic/TimerFrame.cs @@ -39,10 +39,10 @@ public override IObservable OnConnectAsObservable() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(FramesCollector, x => Frames = x, nameof(Frames)), - CollectableMessageAnnotation.Create(FrameCountTypeCollector, x => FrameCountType = x, nameof(FrameCountType)), + CollectableMessageAnnotationFactory.Create(FramesCollector, x => Frames = x, nameof(Frames)), + CollectableMessageAnnotationFactory.Create(FrameCountTypeCollector, x => FrameCountType = x, nameof(FrameCountType)), }; } diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs index ac95e65..d96d8d5 100644 --- a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs +++ b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs @@ -30,7 +30,7 @@ public abstract class FlexibleBoundarySignalReceiverBase IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(BoundarySignalCollector, x => boundarySignal = x, nameof(BoundarySignal)), + CollectableMessageAnnotationFactory.Create(BoundarySignalCollector, x => boundarySignal = x, nameof(BoundarySignal)), }; } diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs index 568a92d..872436a 100644 --- a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs +++ b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs @@ -32,7 +32,7 @@ public abstract class FlexibleBoundarySignalSenderBase IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(EnumCollector, x => boundarySignal = x), + CollectableMessageAnnotationFactory.Create(EnumCollector, x => boundarySignal = x), }; } diff --git a/Assets/Scripts/Connector/Misc/Toss.cs b/Assets/Scripts/Connector/Misc/Toss.cs index 06b37c8..f70865e 100644 --- a/Assets/Scripts/Connector/Misc/Toss.cs +++ b/Assets/Scripts/Connector/Misc/Toss.cs @@ -34,7 +34,7 @@ public override IObservable OnConnectAsObservable() public IEnumerable GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), + CollectableMessageAnnotationFactory.Create(TargetGameObjectCollector, x => TargetGameObject = x, nameof(TargetGameObject)), }; } } diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index eaaf491..c1f4db0 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -87,15 +87,15 @@ StringSignal ISignalCreator.CreateSignal() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(SignalNameCollector, x => SignalName = x, nameof(SignalName)), - CollectableMessageAnnotation.Create(BoolCollector, x => BoolParameter = x, nameof(BoolParameter)), - CollectableMessageAnnotation.Create(IntCollector, x => IntParameter = x, nameof(IntParameter)), - CollectableMessageAnnotation.Create(FloatCollector, x => FloatParameter = x, nameof(FloatParameter)), - CollectableMessageAnnotation.Create(StringCollector, x => StringParameter = x, nameof(StringParameter)), - CollectableMessageAnnotation.Create(ObjectCollector, x => ObjectParameter = x, nameof(ObjectParameter)), - CollectableMessageAnnotation.Create(ScriptableObjectCollector, x => ScriptableObjectParameter = x, nameof(ScriptableObjectParameter)), + CollectableMessageAnnotationFactory.Create(SignalNameCollector, x => SignalName = x, nameof(SignalName)), + CollectableMessageAnnotationFactory.Create(BoolCollector, x => BoolParameter = x, nameof(BoolParameter)), + CollectableMessageAnnotationFactory.Create(IntCollector, x => IntParameter = x, nameof(IntParameter)), + CollectableMessageAnnotationFactory.Create(FloatCollector, x => FloatParameter = x, nameof(FloatParameter)), + CollectableMessageAnnotationFactory.Create(StringCollector, x => StringParameter = x, nameof(StringParameter)), + CollectableMessageAnnotationFactory.Create(ObjectCollector, x => ObjectParameter = x, nameof(ObjectParameter)), + CollectableMessageAnnotationFactory.Create(ScriptableObjectCollector, x => ScriptableObjectParameter = x, nameof(ScriptableObjectParameter)), }; } } diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 6986f42..2c8ff10 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -42,18 +42,18 @@ protected override void OnReceive(StringSignal receivedSignal) IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(SignalNameCollector, x => SignalName = x, nameof(SignalName)), + CollectableMessageAnnotationFactory.Create(SignalNameCollector, x => SignalName = x, nameof(SignalName)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Signal.Parameter.BoolValue, "BoolParameter"), - ComposableMessageAnnotation.Create(() => Signal.Parameter.IntValue, "IntParameter"), - ComposableMessageAnnotation.Create(() => Signal.Parameter.FloatValue, "FloatParameter"), - ComposableMessageAnnotation.Create(() => Signal.Parameter.StringValue, "StringParameter"), - ComposableMessageAnnotation.Create(() => Signal.Parameter.ObjectValue, "ObjectParameter"), - ComposableMessageAnnotation.Create(() => Signal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), + ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.BoolValue, "BoolParameter"), + ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.IntValue, "IntParameter"), + ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.FloatValue, "FloatParameter"), + ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.StringValue, "StringParameter"), + ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.ObjectValue, "ObjectParameter"), + ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), }; } } diff --git a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs index 20e1069..2c625f7 100644 --- a/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs +++ b/Assets/Scripts/Connector/ValueComparer/ComparerBase.cs @@ -39,14 +39,14 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(ExpectCollector, x => Expect = x, nameof(Expect)), - CollectableMessageAnnotation.Create(ActualCollector, x => Actual = x, nameof(Actual)), + CollectableMessageAnnotationFactory.Create(ExpectCollector, x => Expect = x, nameof(Expect)), + CollectableMessageAnnotationFactory.Create(ActualCollector, x => Actual = x, nameof(Actual)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => Result, MessageParameterKey), + ComposableMessageAnnotationFactory.Create(() => Result, MessageParameterKey), }; } diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index b1931e8..5e48e2b 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -64,13 +64,13 @@ protected override void Inject() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(ImageCollector, x => Image = x, nameof(Image)), - CollectableMessageAnnotation.Create(SpriteCollector, x => Sprite = x, nameof(Sprite)), - CollectableMessageAnnotation.Create(InvokeSetNativeSizeCollector, x => InvokeSetNativeSize = x, nameof(InvokeSetNativeSize)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(ImageCollector, x => Image = x, nameof(Image)), + CollectableMessageAnnotationFactory.Create(SpriteCollector, x => Sprite = x, nameof(Sprite)), + CollectableMessageAnnotationFactory.Create(InvokeSetNativeSizeCollector, x => InvokeSetNativeSize = x, nameof(InvokeSetNativeSize)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs index 7df16fd..d9e9df1 100644 --- a/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RawImageInjector.cs @@ -52,12 +52,12 @@ protected override void Inject() } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(RawImageCollector, x => RawImage = x, nameof(RawImage)), - CollectableMessageAnnotation.Create(TextureCollector, x => Texture = x, nameof(Texture)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(RawImageCollector, x => RawImage = x, nameof(RawImage)), + CollectableMessageAnnotationFactory.Create(TextureCollector, x => Texture = x, nameof(Texture)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs index d917101..545504a 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AnimationTrackInjector.cs @@ -68,14 +68,14 @@ protected override void Inject(AnimationPlayableAsset playableAsset) } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), - CollectableMessageAnnotation.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), - CollectableMessageAnnotation.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), - CollectableMessageAnnotation.Create(AnimationClipCollector, x => AnimationClip = x, nameof(AnimationClip)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + CollectableMessageAnnotationFactory.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + CollectableMessageAnnotationFactory.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + CollectableMessageAnnotationFactory.Create(AnimationClipCollector, x => AnimationClip = x, nameof(AnimationClip)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs index 02ed4ce..ae834c2 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/AudioTrackInjector.cs @@ -68,14 +68,14 @@ protected override void Inject(AudioPlayableAsset playableAsset) } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), - CollectableMessageAnnotation.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), - CollectableMessageAnnotation.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), - CollectableMessageAnnotation.Create(AudioClipCollector, x => AudioClip = x, nameof(AudioClip)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + CollectableMessageAnnotationFactory.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + CollectableMessageAnnotationFactory.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + CollectableMessageAnnotationFactory.Create(AudioClipCollector, x => AudioClip = x, nameof(AudioClip)), }; } } diff --git a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs index 6231505..5e2f135 100644 --- a/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/Timeline/ControlTrackInjector.cs @@ -83,15 +83,15 @@ protected override void Inject(ControlPlayableAsset playableAsset) } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), - CollectableMessageAnnotation.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), - CollectableMessageAnnotation.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), - CollectableMessageAnnotation.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), - CollectableMessageAnnotation.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), - CollectableMessageAnnotation.Create(SourceGameObjectCollector, x => SourceGameObject = x, nameof(SourceGameObject)), - CollectableMessageAnnotation.Create(PrefabGameObjectCollector, x => PrefabGameObject = x, nameof(PrefabGameObject)), + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PlayableDirectorCollector, x => PlayableDirector = x, nameof(PlayableDirector)), + CollectableMessageAnnotationFactory.Create(TrackNameCollector, x => TrackName = x, nameof(TrackName)), + CollectableMessageAnnotationFactory.Create(ClipNameCollector, x => ClipName = x, nameof(ClipName)), + CollectableMessageAnnotationFactory.Create(SourceGameObjectCollector, x => SourceGameObject = x, nameof(SourceGameObject)), + CollectableMessageAnnotationFactory.Create(PrefabGameObjectCollector, x => PrefabGameObject = x, nameof(PrefabGameObject)), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index bc16697..0e9be12 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -19,16 +19,16 @@ public class Color32Provider : ProviderBase, IMessageCollectable, IMess IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(RCollector, x => Value = new Color32(x, Value.g, Value.b, Value.a), "R"), - CollectableMessageAnnotation.Create(GCollector, x => Value = new Color32(Value.r, x, Value.b, Value.a), "G"), - CollectableMessageAnnotation.Create(BCollector, x => Value = new Color32(Value.r, Value.g, x, Value.a), "B"), - CollectableMessageAnnotation.Create(ACollector, x => Value = new Color32(Value.r, Value.g, Value.b, x), "A"), + CollectableMessageAnnotationFactory.Create(RCollector, x => Value = new Color32(x, Value.g, Value.b, Value.a), "R"), + CollectableMessageAnnotationFactory.Create(GCollector, x => Value = new Color32(Value.r, x, Value.b, Value.a), "G"), + CollectableMessageAnnotationFactory.Create(BCollector, x => Value = new Color32(Value.r, Value.g, x, Value.a), "B"), + CollectableMessageAnnotationFactory.Create(ACollector, x => Value = new Color32(Value.r, Value.g, Value.b, x), "A"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index ed439d8..863a4a9 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -19,16 +19,16 @@ public class ColorProvider : ProviderBase, IMessageCollectable, IMessageC IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(RCollector, x => Value = new Color(x, Value.g, Value.b, Value.a), "R"), - CollectableMessageAnnotation.Create(GCollector, x => Value = new Color(Value.r, x, Value.b, Value.a), "G"), - CollectableMessageAnnotation.Create(BCollector, x => Value = new Color(Value.r, Value.g, x, Value.a), "B"), - CollectableMessageAnnotation.Create(ACollector, x => Value = new Color(Value.r, Value.g, Value.b, x), "A"), + CollectableMessageAnnotationFactory.Create(RCollector, x => Value = new Color(x, Value.g, Value.b, Value.a), "R"), + CollectableMessageAnnotationFactory.Create(GCollector, x => Value = new Color(Value.r, x, Value.b, Value.a), "G"), + CollectableMessageAnnotationFactory.Create(BCollector, x => Value = new Color(Value.r, Value.g, x, Value.a), "B"), + CollectableMessageAnnotationFactory.Create(ACollector, x => Value = new Color(Value.r, Value.g, Value.b, x), "A"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs index e91e6db..08d05e9 100644 --- a/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/EnumListProviderBase.cs @@ -26,7 +26,7 @@ IEnumerable IMessageComposable.GetMessageComposabl new[] { // Will compose parameter in OnConnectAsObservable() - ComposableMessageAnnotation.Create(null), + ComposableMessageAnnotationFactory.Create(), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index 37ceaec..ac8a458 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -33,14 +33,14 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation>.Create(ValuesCollector, x => Values = x, $"{typeof(TValue).Name}List"), + CollectableMessageAnnotationFactory.Create(ValuesCollector, x => Values = x, $"{typeof(TValue).Name}List"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { // Will compose parameter in OnConnectAsObservable() - ComposableMessageAnnotation.Create(null), + ComposableMessageAnnotationFactory.Create(), }; } diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index fb614d6..9a0635e 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -19,20 +19,20 @@ public class QuaternionProvider : ProviderBase, IMessageCollectable, private Vector3Collector EulerAngleCollector => eulerAngleCollector; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(XCollector, v => Value = new Quaternion(v, Value.y, Value.z, Value.w), "X"), - CollectableMessageAnnotation.Create(YCollector, v => Value = new Quaternion(Value.x, v, Value.z, Value.w), "Y"), - CollectableMessageAnnotation.Create(ZCollector, v => Value = new Quaternion(Value.x, Value.y, v, Value.w), "Z"), - CollectableMessageAnnotation.Create(WCollector, v => Value = new Quaternion(Value.x, Value.y, Value.z, v), "W"), - CollectableMessageAnnotation.Create(EulerAngleCollector, v => Value = Quaternion.Euler(v), "EulerAngle"), + CollectableMessageAnnotationFactory.Create(XCollector, v => Value = new Quaternion(v, Value.y, Value.z, Value.w), "X"), + CollectableMessageAnnotationFactory.Create(YCollector, v => Value = new Quaternion(Value.x, v, Value.z, Value.w), "Y"), + CollectableMessageAnnotationFactory.Create(ZCollector, v => Value = new Quaternion(Value.x, Value.y, v, Value.w), "Z"), + CollectableMessageAnnotationFactory.Create(WCollector, v => Value = new Quaternion(Value.x, Value.y, Value.z, v), "W"), + CollectableMessageAnnotationFactory.Create(EulerAngleCollector, v => Value = Quaternion.Euler(v), "EulerAngle"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Value), - ComposableMessageAnnotation.Create(() => Value.eulerAngles), + ComposableMessageAnnotationFactory.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value.eulerAngles), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index da3b4cd..768dd63 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -32,13 +32,13 @@ public override IObservable OnConnectAsObservable() IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { - CollectableMessageAnnotation.Create(KeyCollector, x => Key = x, nameof(Key)), + CollectableMessageAnnotationFactory.Create(KeyCollector, x => Key = x, nameof(Key)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotation.Create(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), + ComposableMessageAnnotationFactory.Create(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), }; } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index b6ec94e..73773c2 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -13,16 +13,16 @@ public class Vector2IntProvider : ProviderBase, IMessageCollectable, private IntCollector YCollector => yCollector; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector2Int(v, Value.y), "X"), - CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector2Int(Value.x, v), "Y"), + CollectableMessageAnnotationFactory.Create(XCollector, v => Value = new Vector2Int(v, Value.y), "X"), + CollectableMessageAnnotationFactory.Create(YCollector, v => Value = new Vector2Int(Value.x, v), "Y"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index 9aed8d5..bf4747d 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -13,16 +13,16 @@ public class Vector2Provider : ProviderBase, IMessageCollectable, IMess private FloatCollector YCollector => yCollector; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector2(v, Value.y), "X"), - CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector2(Value.x, v), "Y"), + CollectableMessageAnnotationFactory.Create(XCollector, v => Value = new Vector2(v, Value.y), "X"), + CollectableMessageAnnotationFactory.Create(YCollector, v => Value = new Vector2(Value.x, v), "Y"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index 94ba110..8b12947 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -15,17 +15,17 @@ public class Vector3IntProvider : ProviderBase, IMessageCollectable, private IntCollector ZCollector => zCollector; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector3Int(v, Value.y, Value.z), "X"), - CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector3Int(Value.x, v, Value.z), "Y"), - CollectableMessageAnnotation.Create(ZCollector, v => Value = new Vector3Int(Value.x, Value.y, v), "Z"), + CollectableMessageAnnotationFactory.Create(XCollector, v => Value = new Vector3Int(v, Value.y, Value.z), "X"), + CollectableMessageAnnotationFactory.Create(YCollector, v => Value = new Vector3Int(Value.x, v, Value.z), "Y"), + CollectableMessageAnnotationFactory.Create(ZCollector, v => Value = new Vector3Int(Value.x, Value.y, v), "Z"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index 9beecd3..ed20783 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -15,17 +15,17 @@ public class Vector3Provider : ProviderBase, IMessageCollectable, IMess private FloatCollector ZCollector => zCollector; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector3(v, Value.y, Value.z), "X"), - CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector3(Value.x, v, Value.z), "Y"), - CollectableMessageAnnotation.Create(ZCollector, v => Value = new Vector3(Value.x, Value.y, v), "Z"), + CollectableMessageAnnotationFactory.Create(XCollector, v => Value = new Vector3(v, Value.y, Value.z), "X"), + CollectableMessageAnnotationFactory.Create(YCollector, v => Value = new Vector3(Value.x, v, Value.z), "Y"), + CollectableMessageAnnotationFactory.Create(ZCollector, v => Value = new Vector3(Value.x, Value.y, v), "Z"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index cb78dc6..e0afa4e 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -17,18 +17,18 @@ public class Vector4Provider : ProviderBase, IMessageCollectable, IMess private FloatCollector WCollector => wCollector; IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new ICollectableMessageAnnotation[] + new[] { - CollectableMessageAnnotation.Create(XCollector, v => Value = new Vector4(v, Value.y, Value.z, Value.w), "X"), - CollectableMessageAnnotation.Create(YCollector, v => Value = new Vector4(Value.x, v, Value.z, Value.w), "Y"), - CollectableMessageAnnotation.Create(ZCollector, v => Value = new Vector4(Value.x, Value.y, v, Value.w), "Z"), - CollectableMessageAnnotation.Create(WCollector, v => Value = new Vector4(Value.x, Value.y, Value.z, v), "W"), + CollectableMessageAnnotationFactory.Create(XCollector, v => Value = new Vector4(v, Value.y, Value.z, Value.w), "X"), + CollectableMessageAnnotationFactory.Create(YCollector, v => Value = new Vector4(Value.x, v, Value.z, Value.w), "Y"), + CollectableMessageAnnotationFactory.Create(ZCollector, v => Value = new Vector4(Value.x, Value.y, v, Value.w), "Z"), + CollectableMessageAnnotationFactory.Create(WCollector, v => Value = new Vector4(Value.x, Value.y, Value.z, v), "W"), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new IComposableMessageAnnotation[] + new[] { - ComposableMessageAnnotation.Create(() => Value), + ComposableMessageAnnotationFactory.Create(() => Value), }; } } From 7050b478a695339b8a2cd69af02ab83e0e083723 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 20 Oct 2019 19:29:54 +0900 Subject: [PATCH 367/453] :beetle: Avoid NullReferenceException --- Assets/Editor/Scripts/FlowGraphView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index c217a3d..0ecbd2c 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -318,7 +318,7 @@ private void CreateMessageConnectorEdges() .ToArray(); foreach (var valueCollector in valueCollectors) { - if (!(valueCollector.SourceConnector is IMessageComposable) || !RenderedNodes.ContainsKey(valueCollector.SourceConnector) || !(connector is IMessageCollectable)) + if (!(valueCollector?.SourceConnector is IMessageComposable) || !RenderedNodes.ContainsKey(valueCollector.SourceConnector) || !(connector is IMessageCollectable)) { continue; } From 72c04a4f57b21214ac9e79f88c0904d0af353153 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 20 Oct 2019 19:30:17 +0900 Subject: [PATCH 368/453] :sparkles: Add calculation connector for primitive types --- Assets/Scripts/Connector/Expression/Bool.cs | 18 +++ .../Scripts/Connector/Expression/Bool.cs.meta | 3 + .../Connector/Expression/CalculatorBase.cs | 105 ++++++++++++++++++ .../Expression/CalculatorBase.cs.meta | 3 + Assets/Scripts/Connector/Expression/Float.cs | 33 ++++++ .../Connector/Expression/Float.cs.meta | 3 + Assets/Scripts/Connector/Expression/Int.cs | 33 ++++++ .../Scripts/Connector/Expression/Int.cs.meta | 3 + Assets/Scripts/Connector/Expression/String.cs | 13 +++ .../Connector/Expression/String.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 4 + 11 files changed, 221 insertions(+) create mode 100644 Assets/Scripts/Connector/Expression/Bool.cs create mode 100644 Assets/Scripts/Connector/Expression/Bool.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/CalculatorBase.cs create mode 100644 Assets/Scripts/Connector/Expression/CalculatorBase.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/Float.cs create mode 100644 Assets/Scripts/Connector/Expression/Float.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/Int.cs create mode 100644 Assets/Scripts/Connector/Expression/Int.cs.meta create mode 100644 Assets/Scripts/Connector/Expression/String.cs create mode 100644 Assets/Scripts/Connector/Expression/String.cs.meta diff --git a/Assets/Scripts/Connector/Expression/Bool.cs b/Assets/Scripts/Connector/Expression/Bool.cs new file mode 100644 index 0000000..d2a56fa --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Bool.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/Bool", (int) ConnectorType.ExpressionBool)] + public class Bool : CalculatorBase, IAdditionCalculator, IMultiplicationCalculator + { + bool IAdditionCalculator.Add(bool left, bool right) + { + return left | right; + } + + bool IMultiplicationCalculator.Multiply(bool left, bool right) + { + return left & right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Bool.cs.meta b/Assets/Scripts/Connector/Expression/Bool.cs.meta new file mode 100644 index 0000000..08894c1 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Bool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 108052b08e564232a8e4171d19d07ab0 +timeCreated: 1571562644 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/CalculatorBase.cs b/Assets/Scripts/Connector/Expression/CalculatorBase.cs new file mode 100644 index 0000000..98596af --- /dev/null +++ b/Assets/Scripts/Connector/Expression/CalculatorBase.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using UniFlow.Utility; +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + public class CalculatorBase : ConnectorBase, IMessageCollectable, IMessageComposable where TValueCollector : ValueCollectorBase, new() + { + [SerializeField] private TValue left = default; + [SerializeField] private TValue right = default; + [SerializeField] private OperatorType operatorType = default; + private TValue Left + { + get => left; + set => left = value; + } + private TValue Right + { + get => right; + set => right = value; + } + private OperatorType OperatorType => operatorType; + + [SerializeField] private TValueCollector leftCollector = new TValueCollector(); + [SerializeField] private TValueCollector rightCollector = new TValueCollector(); + private TValueCollector LeftCollector => leftCollector; + private TValueCollector RightCollector => rightCollector; + + public override IObservable OnConnectAsObservable() + { + return ObservableFactory.ReturnMessage(this, "Result", Calculate()); + } + + private TValue Calculate() + { + switch (OperatorType) + { + case OperatorType.Add when this is IAdditionCalculator calculator: + return calculator.Add(Left, Right); + case OperatorType.Sub when this is ISubtractionCalculator calculator: + return calculator.Subtract(Left, Right); + case OperatorType.Mul when this is IMultiplicationCalculator calculator: + return calculator.Multiply(Left, Right); + case OperatorType.Div when this is IDivisionCalculator calculator: + return calculator.Divide(Left, Right); + case OperatorType.Mod when this is IModulationCalculator calculator: + return calculator.Modulo(Left, Right); + default: + throw new ArgumentOutOfRangeException(); + } + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(LeftCollector, x => Left = x, nameof(Left)), + CollectableMessageAnnotationFactory.Create(RightCollector, x => Right = x, nameof(Right)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create("Result"), + }; + } + + public interface IAdditionCalculator + { + TValue Add(TValue left, TValue right); + } + + public interface ISubtractionCalculator + { + TValue Subtract(TValue left, TValue right); + } + + public interface IMultiplicationCalculator + { + TValue Multiply(TValue left, TValue right); + } + + public interface IDivisionCalculator + { + TValue Divide(TValue left, TValue right); + } + + public interface IModulationCalculator + { + TValue Modulo(TValue left, TValue right); + } + + public interface IFourArithmeticCalculator : IAdditionCalculator, ISubtractionCalculator, IMultiplicationCalculator, IDivisionCalculator + { + } + + public enum OperatorType + { + Add, + Sub, + Mul, + Div, + Mod, + } +} diff --git a/Assets/Scripts/Connector/Expression/CalculatorBase.cs.meta b/Assets/Scripts/Connector/Expression/CalculatorBase.cs.meta new file mode 100644 index 0000000..c9cd049 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/CalculatorBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1e7a8d961bd544b2b69695d8f0ecd07e +timeCreated: 1571561858 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/Float.cs b/Assets/Scripts/Connector/Expression/Float.cs new file mode 100644 index 0000000..cdc43b1 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Float.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/Float", (int) ConnectorType.ExpressionFloat)] + public class Float : CalculatorBase, IFourArithmeticCalculator, IModulationCalculator + { + float IAdditionCalculator.Add(float left, float right) + { + return left + right; + } + + float ISubtractionCalculator.Subtract(float left, float right) + { + return left - right; + } + + float IMultiplicationCalculator.Multiply(float left, float right) + { + return left * right; + } + + float IDivisionCalculator.Divide(float left, float right) + { + return left / right; + } + + float IModulationCalculator.Modulo(float left, float right) + { + return left % right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Float.cs.meta b/Assets/Scripts/Connector/Expression/Float.cs.meta new file mode 100644 index 0000000..9b00eff --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Float.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 05dce89e70814e83ae51456b109e6c32 +timeCreated: 1571562576 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/Int.cs b/Assets/Scripts/Connector/Expression/Int.cs new file mode 100644 index 0000000..0e3a3d7 --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Int.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/Int", (int) ConnectorType.ExpressionInt)] + public class Int : CalculatorBase, IFourArithmeticCalculator, IModulationCalculator + { + int IAdditionCalculator.Add(int left, int right) + { + return left + right; + } + + int ISubtractionCalculator.Subtract(int left, int right) + { + return left - right; + } + + int IMultiplicationCalculator.Multiply(int left, int right) + { + return left * right; + } + + int IDivisionCalculator.Divide(int left, int right) + { + return left / right; + } + + int IModulationCalculator.Modulo(int left, int right) + { + return left % right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Int.cs.meta b/Assets/Scripts/Connector/Expression/Int.cs.meta new file mode 100644 index 0000000..6aaa32e --- /dev/null +++ b/Assets/Scripts/Connector/Expression/Int.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 058d2d85c28f40018409695051946a89 +timeCreated: 1571560976 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Expression/String.cs b/Assets/Scripts/Connector/Expression/String.cs new file mode 100644 index 0000000..8a0670e --- /dev/null +++ b/Assets/Scripts/Connector/Expression/String.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UniFlow.Connector.Expression +{ + [AddComponentMenu("UniFlow/Expression/String", (int) ConnectorType.ExpressionString)] + public class String : CalculatorBase, IAdditionCalculator + { + string IAdditionCalculator.Add(string left, string right) + { + return left + right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/String.cs.meta b/Assets/Scripts/Connector/Expression/String.cs.meta new file mode 100644 index 0000000..a9ce28c --- /dev/null +++ b/Assets/Scripts/Connector/Expression/String.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 47eb997c93a0401b8e06188453cdacd6 +timeCreated: 1571562814 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index c7b2e63..eb0fe11 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -117,6 +117,10 @@ public enum ConnectorType Or, Xor, Not, + ExpressionBool, + ExpressionInt, + ExpressionFloat, + ExpressionString, Timer = 9000, TimerFrame, From 5dc86273f436e03e02319bf125eea68964f062fb Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 20 Oct 2019 19:30:39 +0900 Subject: [PATCH 369/453] :sparkles: Add Counter connector --- Assets/Scripts/Connector/Logic/Counter.cs | 34 +++++++++++++++++++ .../Scripts/Connector/Logic/Counter.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 1 + 3 files changed, 38 insertions(+) create mode 100644 Assets/Scripts/Connector/Logic/Counter.cs create mode 100644 Assets/Scripts/Connector/Logic/Counter.cs.meta diff --git a/Assets/Scripts/Connector/Logic/Counter.cs b/Assets/Scripts/Connector/Logic/Counter.cs new file mode 100644 index 0000000..a1850e0 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/Counter.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using UniRx; +using UnityEngine; + +namespace UniFlow.Connector.Logic +{ + [AddComponentMenu("UniFlow/Logic/Counter", (int) ConnectorType.Counter)] + public class Counter : ConnectorBase, IMessageCollectable, IMessageComposable + { + [SerializeField] private IntCollector initialCountCollector = default; + private IntCollector InitialCountCollector => initialCountCollector; + + private IReactiveProperty CounterProperty { get; } = new IntReactiveProperty(); + + public override IObservable OnConnectAsObservable() + { + CounterProperty.Value++; + return CounterProperty.AsMessageObservable(this, "Count"); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(InitialCountCollector, x => CounterProperty.Value = x, "InitialCount"), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create("Count"), + }; + } +} diff --git a/Assets/Scripts/Connector/Logic/Counter.cs.meta b/Assets/Scripts/Connector/Logic/Counter.cs.meta new file mode 100644 index 0000000..7745f91 --- /dev/null +++ b/Assets/Scripts/Connector/Logic/Counter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fd840434b6a44fa78b7d56851568411d +timeCreated: 1571557099 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index eb0fe11..f63c5a8 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -129,6 +129,7 @@ public enum ConnectorType TimeScaleController, RandomInt, RandomFloat, + Counter, Empty, Toss = 9100, From 3c3808204e9b07d4933a3b29efe8314da9657154 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 02:31:39 +0900 Subject: [PATCH 370/453] :sparkles: Add UniFlowInstaller for StringSignal --- Assets/Installers.meta | 8 ++++++++ Assets/Installers/UniFlowInstaller.asset | 14 ++++++++++++++ Assets/Installers/UniFlowInstaller.asset.meta | 8 ++++++++ Assets/Scripts/Installer/UniFlowInstaller.cs | 15 +++++++++++++++ Assets/Scripts/Installer/UniFlowInstaller.cs.meta | 3 +++ 5 files changed, 48 insertions(+) create mode 100644 Assets/Installers.meta create mode 100644 Assets/Installers/UniFlowInstaller.asset create mode 100644 Assets/Installers/UniFlowInstaller.asset.meta create mode 100644 Assets/Scripts/Installer/UniFlowInstaller.cs create mode 100644 Assets/Scripts/Installer/UniFlowInstaller.cs.meta diff --git a/Assets/Installers.meta b/Assets/Installers.meta new file mode 100644 index 0000000..b7f5cc0 --- /dev/null +++ b/Assets/Installers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53348df9a58b6487c94cb5f44690ac9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Installers/UniFlowInstaller.asset b/Assets/Installers/UniFlowInstaller.asset new file mode 100644 index 0000000..1c36e2d --- /dev/null +++ b/Assets/Installers/UniFlowInstaller.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3785a4ba4e2b4fcc81b428da2930f35d, type: 3} + m_Name: UniFlowInstaller + m_EditorClassIdentifier: diff --git a/Assets/Installers/UniFlowInstaller.asset.meta b/Assets/Installers/UniFlowInstaller.asset.meta new file mode 100644 index 0000000..384750a --- /dev/null +++ b/Assets/Installers/UniFlowInstaller.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02e561d68dde84d7882365343fb07ef8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Installer/UniFlowInstaller.cs b/Assets/Scripts/Installer/UniFlowInstaller.cs new file mode 100644 index 0000000..50d67ed --- /dev/null +++ b/Assets/Scripts/Installer/UniFlowInstaller.cs @@ -0,0 +1,15 @@ +using UniFlow.Signal; +using UnityEngine; +using Zenject; + +namespace UniFlow.Installer +{ + [CreateAssetMenu(menuName = "Installers/UniFlowInstaller", fileName = "UniFlowInstaller")] + public class UniFlowInstaller : ScriptableObjectInstaller + { + public override void InstallBindings() + { + Container.DeclareUniFlowSignal(); + } + } +} diff --git a/Assets/Scripts/Installer/UniFlowInstaller.cs.meta b/Assets/Scripts/Installer/UniFlowInstaller.cs.meta new file mode 100644 index 0000000..376d9a0 --- /dev/null +++ b/Assets/Scripts/Installer/UniFlowInstaller.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3785a4ba4e2b4fcc81b428da2930f35d +timeCreated: 1571582936 \ No newline at end of file From 3624e7dc88bb0863b163d16c8ae4ff440f2767ed Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 02:32:10 +0900 Subject: [PATCH 371/453] :fire: Merge BoundarySignals into Signals --- Assets/Scripts/BoundarySignalCoordinator.cs | 20 ------- .../Scripts/BoundarySignalCoordinator.cs.meta | 3 -- .../Misc/BoundarySignalReceiverBase.cs | 43 --------------- .../Misc/BoundarySignalReceiverBase.cs.meta | 3 -- .../Misc/BoundarySignalSenderBase.cs | 45 ---------------- .../Misc/BoundarySignalSenderBase.cs.meta | 11 ---- .../SignalPublisher/ISignalCreator.cs | 7 --- .../SignalPublisher/ISignalCreator.cs.meta | 3 -- .../ScriptableObjectSignalPublisher.cs | 10 ---- .../ScriptableObjectSignalPublisher.cs.meta | 3 -- .../SignalPublisher/StringSignalPublisher.cs | 10 ++-- .../Scripts/Connector/SignalPublisherBase.cs | 40 +++++++++----- .../Connector/SignalReceiver/ISignalFilter.cs | 7 --- .../SignalReceiver/ISignalFilter.cs.meta | 3 -- .../ScriptableObjectSignalReceiver.cs | 10 ---- .../ScriptableObjectSignalReceiver.cs.meta | 3 -- .../SignalReceiver/StringSignalReceiver.cs | 37 +++++-------- .../Scripts/Connector/SignalReceiverBase.cs | 46 ++++++++-------- Assets/Scripts/Extensions.cs | 7 +-- Assets/Scripts/IBoundarySignalCoordinator.cs | 27 ---------- .../IBoundarySignalCoordinator.cs.meta | 3 -- Assets/Scripts/ISignal.cs | 12 ----- Assets/Scripts/ISignal.cs.meta | 3 -- Assets/Scripts/ISignalPublisher.cs | 7 --- Assets/Scripts/ISignalPublisher.cs.meta | 3 -- Assets/Scripts/ISignalReceiver.cs | 9 ---- Assets/Scripts/ISignalReceiver.cs.meta | 3 -- .../Scripts/Signal/ScriptableObjectSignal.cs | 53 ++++++++++++++++++- Assets/Scripts/Signal/SignalBase.cs | 34 ++++++++++++ Assets/Scripts/Signal/SignalBase.cs.meta | 3 ++ Assets/Scripts/Signal/StringSignal.cs | 44 +++++++-------- Assets/Scripts/Utility/SignalHandler.cs | 53 ++++++++----------- 32 files changed, 198 insertions(+), 367 deletions(-) delete mode 100644 Assets/Scripts/BoundarySignalCoordinator.cs delete mode 100644 Assets/Scripts/BoundarySignalCoordinator.cs.meta delete mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs delete mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta delete mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs delete mode 100644 Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta delete mode 100644 Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs delete mode 100644 Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta delete mode 100644 Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs delete mode 100644 Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta delete mode 100644 Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs delete mode 100644 Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta delete mode 100644 Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs delete mode 100644 Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta delete mode 100644 Assets/Scripts/IBoundarySignalCoordinator.cs delete mode 100644 Assets/Scripts/IBoundarySignalCoordinator.cs.meta delete mode 100644 Assets/Scripts/ISignal.cs delete mode 100644 Assets/Scripts/ISignal.cs.meta delete mode 100644 Assets/Scripts/ISignalPublisher.cs delete mode 100644 Assets/Scripts/ISignalPublisher.cs.meta delete mode 100644 Assets/Scripts/ISignalReceiver.cs delete mode 100644 Assets/Scripts/ISignalReceiver.cs.meta create mode 100644 Assets/Scripts/Signal/SignalBase.cs create mode 100644 Assets/Scripts/Signal/SignalBase.cs.meta diff --git a/Assets/Scripts/BoundarySignalCoordinator.cs b/Assets/Scripts/BoundarySignalCoordinator.cs deleted file mode 100644 index acfc7d4..0000000 --- a/Assets/Scripts/BoundarySignalCoordinator.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using Zenject; - -namespace UniFlow -{ - public class BoundarySignalCoordinator : IBoundarySignalCoordinator - { - [Inject] private SignalBus SignalBus { get; } - - void IBoundarySignalSender.Send(TValue value) - { - SignalBus.Fire(value); - } - - IObservable IBoundarySignalReceiver.OnReceiveAsObservable() - { - return SignalBus.GetStream(); - } - } -} diff --git a/Assets/Scripts/BoundarySignalCoordinator.cs.meta b/Assets/Scripts/BoundarySignalCoordinator.cs.meta deleted file mode 100644 index 01e7d48..0000000 --- a/Assets/Scripts/BoundarySignalCoordinator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 180fea9ccac34496847a28a5adf31667 -timeCreated: 1571334387 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs deleted file mode 100644 index d96d8d5..0000000 --- a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using Zenject; - -namespace UniFlow.Connector.Misc -{ - public abstract class BoundarySignalReceiverBase : ConnectorBase - { - protected abstract TBoundarySignal BoundarySignal { get; } - - [Inject] private IBoundarySignalReceiver BoundaryCoordinator { get; } - - public override IObservable OnConnectAsObservable() - { - return BoundaryCoordinator.OnReceiveAsObservable(BoundarySignal).AsMessageObservable(this); - } - } - - public abstract class FlexibleBoundarySignalReceiverBase : BoundarySignalReceiverBase, IMessageCollectable - where TBoundarySignalCollector : ValueCollectorBase, new() - { - [SerializeField] private TBoundarySignal boundarySignal = default; - [SerializeField] private TBoundarySignalCollector boundarySignalCollector = new TBoundarySignalCollector(); - - protected override TBoundarySignal BoundarySignal => boundarySignal; - - private TBoundarySignalCollector BoundarySignalCollector => boundarySignalCollector; - - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new[] - { - CollectableMessageAnnotationFactory.Create(BoundarySignalCollector, x => boundarySignal = x, nameof(BoundarySignal)), - }; - } - - public abstract class FixedBoundarySignalReceiverBase : BoundarySignalReceiverBase - { - [SerializeField] private TBoundarySignal boundarySignal = default; - - protected override TBoundarySignal BoundarySignal => boundarySignal; - } -} diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta b/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta deleted file mode 100644 index 3219e7a..0000000 --- a/Assets/Scripts/Connector/Misc/BoundarySignalReceiverBase.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 204c8966d3b84936a19ab49d8075b726 -timeCreated: 1571346168 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs deleted file mode 100644 index 872436a..0000000 --- a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using UniFlow.Utility; -using UnityEngine; -using Zenject; - -namespace UniFlow.Connector.Misc -{ - public abstract class BoundarySignalSenderBase : ConnectorBase - { - protected abstract TBoundarySignal BoundarySignal { get; } - - [Inject] private IBoundarySignalSender BoundaryCoordinator { get; } - - public override IObservable OnConnectAsObservable() - { - BoundaryCoordinator.Send(BoundarySignal); - return ObservableFactory.ReturnMessage(this, nameof(BoundarySignal), BoundarySignal); - } - } - - public abstract class FlexibleBoundarySignalSenderBase : BoundarySignalSenderBase, IMessageCollectable - where TBoundarySignalCollector : ValueCollectorBase, new() - { - [SerializeField] private TBoundarySignal boundarySignal = default; - [SerializeField] private TBoundarySignalCollector enumCollector = new TBoundarySignalCollector(); - - protected override TBoundarySignal BoundarySignal => boundarySignal; - - private TBoundarySignalCollector EnumCollector => enumCollector; - - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new[] - { - CollectableMessageAnnotationFactory.Create(EnumCollector, x => boundarySignal = x), - }; - } - - public abstract class FixedBoundarySignalSenderBase : BoundarySignalSenderBase - { - protected override TValue BoundarySignal => GetFixedValue(); - - protected abstract TValue GetFixedValue(); - } -} diff --git a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta b/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta deleted file mode 100644 index 8496571..0000000 --- a/Assets/Scripts/Connector/Misc/BoundarySignalSenderBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6463e5fd20fde4ce7896eb04f6769a7f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs b/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs deleted file mode 100644 index 5eb6452..0000000 --- a/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow.Connector.SignalPublisher -{ - public interface ISignalCreator where TSignal : ISignal - { - TSignal CreateSignal(); - } -} diff --git a/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta b/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta deleted file mode 100644 index 73e2a22..0000000 --- a/Assets/Scripts/Connector/SignalPublisher/ISignalCreator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: f627a481c7f14f61ab6c4d48bf024d3d -timeCreated: 1570702872 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs deleted file mode 100644 index 8211bf0..0000000 --- a/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Signal; -using UnityEngine; - -namespace UniFlow.Connector.SignalPublisher -{ - [AddComponentMenu("UniFlow/SignalPublisher/ScriptableObject", (int) ConnectorType.ScriptableObjectSignalPublisher)] - public class ScriptableObjectSignalPublisher : SignalPublisherBase - { - } -} diff --git a/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta deleted file mode 100644 index aa90d3f..0000000 --- a/Assets/Scripts/Connector/SignalPublisher/ScriptableObjectSignalPublisher.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cd2865a0218c4b3bb1b08d940ae9b97c -timeCreated: 1570622344 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index c1f4db0..fca6086 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -5,8 +5,7 @@ namespace UniFlow.Connector.SignalPublisher { [AddComponentMenu("UniFlow/SignalPublisher/String", (int) ConnectorType.StringSignalPublisher)] - public class StringSignalPublisher : SignalPublisherBase, - ISignalCreator, + public class StringSignalPublisher : SignalPublisherBase, IMessageCollectable { [SerializeField] private string signalName = default; @@ -69,11 +68,10 @@ private ScriptableObject ScriptableObjectParameter private ObjectCollector ObjectCollector => objectCollector; private ScriptableObjectCollector ScriptableObjectCollector => scriptableObjectCollector; - StringSignal ISignalCreator.CreateSignal() + protected override StringSignal GetSignal() { - return string.IsNullOrEmpty(SignalName) - ? Signal - : new StringSignal( + return StringSignal + .Create( SignalName, new StringSignal.SignalParameter( BoolParameter, diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs b/Assets/Scripts/Connector/SignalPublisherBase.cs index 828fb14..6e77f7c 100644 --- a/Assets/Scripts/Connector/SignalPublisherBase.cs +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs @@ -1,35 +1,47 @@ using System; -using UniFlow.Connector.SignalPublisher; +using System.Collections.Generic; using UniFlow.Utility; using UnityEngine; +using Zenject; namespace UniFlow.Connector { - public abstract class SignalPublisherBase : ConnectorBase, ISignalPublisher where TSignal : ISignal + public abstract class SignalPublisherBase : ConnectorBase { - private const string MessageParameterKey = "Signal"; - [SerializeField] private TSignal signal = default; + [Inject] private ISignalPublisher Publisher { get; } + + // ReSharper disable once ConvertToAutoPropertyWhenPossible protected TSignal Signal { get => signal; - private set => signal = value; + set => signal = value; } - public override IObservable OnConnectAsObservable() + protected virtual TSignal GetSignal() { - if (this is ISignalCreator signalCreator) - { - Signal = signalCreator.CreateSignal(); - } - ((ISignalPublisher) this).Publish(Signal); - return ObservableFactory.ReturnMessage(this, MessageParameterKey, Signal); + return Signal; } - void ISignalPublisher.Publish(TSignal value) + public override IObservable OnConnectAsObservable() { - SignalHandler.Publish(value); + Publisher.Publish(GetSignal()); + return ObservableFactory.ReturnMessage(this, nameof(Signal), GetSignal()); } } + + public abstract class SignalPublisherBase : SignalPublisherBase, IMessageCollectable + where TSignalCollector : ValueCollectorBase, new() + { + [SerializeField] private TSignalCollector enumCollector = new TSignalCollector(); + + private TSignalCollector EnumCollector => enumCollector; + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(EnumCollector, x => Signal = x, nameof(Signal)), + }; + } } diff --git a/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs b/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs deleted file mode 100644 index 491e449..0000000 --- a/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow.Connector.SignalReceiver -{ - public interface ISignalFilter : ISignalReceiver where TSignal : ISignal - { - bool Filter(TSignal signal); - } -} diff --git a/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta b/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta deleted file mode 100644 index 7598ab5..0000000 --- a/Assets/Scripts/Connector/SignalReceiver/ISignalFilter.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: eb841db22da3404ab0707a89477ec5db -timeCreated: 1570702686 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs deleted file mode 100644 index 2701410..0000000 --- a/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Signal; -using UnityEngine; - -namespace UniFlow.Connector.SignalReceiver -{ - [AddComponentMenu("UniFlow/SignalReceiver/ScriptableObject", (int) ConnectorType.ScriptableObjectSignalReceiver)] - public class ScriptableObjectSignalReceiver : SignalReceiverBase - { - } -} diff --git a/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta deleted file mode 100644 index 848d084..0000000 --- a/Assets/Scripts/Connector/SignalReceiver/ScriptableObjectSignalReceiver.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 02dd196ba99c48afa56db823950bd210 -timeCreated: 1570622357 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index 2c8ff10..b1c6b9e 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -1,14 +1,11 @@ using System.Collections.Generic; -using UniFlow.Connector.SignalPublisher; using UniFlow.Signal; using UnityEngine; namespace UniFlow.Connector.SignalReceiver { [AddComponentMenu("UniFlow/SignalReceiver/String", (int) ConnectorType.StringSignalReceiver)] - public class StringSignalReceiver : SignalReceiverBase, - ISignalCreator, - ISignalFilter, + public class StringSignalReceiver : SignalReceiverBase, IMessageCollectable, IMessageComposable { @@ -24,21 +21,6 @@ private string SignalName private StringCollector SignalNameCollector => signalNameCollector; - bool ISignalFilter.Filter(StringSignal signal) - { - return signal.Name == SignalName; - } - - StringSignal ISignalCreator.CreateSignal() - { - return string.IsNullOrEmpty(SignalName) ? Signal : new StringSignal(SignalName); - } - - protected override void OnReceive(StringSignal receivedSignal) - { - Signal = receivedSignal; - } - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { @@ -48,12 +30,17 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.BoolValue, "BoolParameter"), - ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.IntValue, "IntParameter"), - ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.FloatValue, "FloatParameter"), - ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.StringValue, "StringParameter"), - ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.ObjectValue, "ObjectParameter"), - ComposableMessageAnnotationFactory.Create(() => Signal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Parameter.BoolValue, "BoolParameter"), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Parameter.IntValue, "IntParameter"), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Parameter.FloatValue, "FloatParameter"), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Parameter.StringValue, "StringParameter"), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Parameter.ObjectValue, "ObjectParameter"), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Parameter.ScriptableObjectValue, "ScriptableObjectParameter"), }; + + protected override StringSignal GetSignal() + { + return StringSignal.Create(SignalName); + } } } diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index 26a2e68..4ae952d 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -1,48 +1,48 @@ using System; -using UniFlow.Connector.SignalPublisher; -using UniFlow.Connector.SignalReceiver; +using System.Collections.Generic; using UniFlow.Utility; using UniRx; using UnityEngine; +using Zenject; namespace UniFlow.Connector { - public abstract class SignalReceiverBase : ConnectorBase, ISignalReceiver where TSignal : ISignal + public abstract class SignalReceiverBase : ConnectorBase { - private const string MessageParameterKey = "Signal"; - [SerializeField] private TSignal signal = default; + [Inject] private ISignalReceiver SignalReceiver { get; } + protected TSignal Signal { get => signal; set => signal = value; } - public override IObservable OnConnectAsObservable() + protected TSignal ReceivedSignal { get; private set; } + + protected virtual TSignal GetSignal() { - if (this is ISignalCreator signalCreator) - { - Signal = signalCreator.CreateSignal(); - } - return ((ISignalReceiver) this) - .OnReceiveAsObservable() - .Do(OnReceive) - .Select(x => this.CreateMessage(x, MessageParameterKey)); + return Signal; } - protected virtual void OnReceive(TSignal receivedSignal) + public override IObservable OnConnectAsObservable() { + return SignalReceiver.OnReceiveAsObservable(GetSignal()).Do(x => ReceivedSignal = x).AsMessageObservable(this, "Signal"); } + } - IObservable ISignalReceiver.OnReceiveAsObservable() - { - var observable = SignalHandler.OnReceiveAsObservable(Signal); - if (this is ISignalFilter signalFilter) + public abstract class SignalReceiverBase : SignalReceiverBase, IMessageCollectable + where TSignalCollector : ValueCollectorBase, new() + { + [SerializeField] private TSignalCollector signalCollector = new TSignalCollector(); + + private TSignalCollector SignalCollector => signalCollector; + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] { - observable = observable.Where(signalFilter.Filter); - } - return observable; - } + CollectableMessageAnnotationFactory.Create(SignalCollector, x => Signal = x, "Signal"), + }; } } diff --git a/Assets/Scripts/Extensions.cs b/Assets/Scripts/Extensions.cs index 8467b27..7d4d4a4 100644 --- a/Assets/Scripts/Extensions.cs +++ b/Assets/Scripts/Extensions.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using UniFlow.Utility; using UniRx; using UnityEngine; using Zenject; @@ -95,10 +96,10 @@ public static Message GetMessage(this IEnumerable messages, IConnector public static class ZenjectExtensions { - public static DeclareSignalAsyncTickPriorityCopyBinder DeclareBoundarySignal(this DiContainer container) + public static DeclareSignalAsyncTickPriorityCopyBinder DeclareUniFlowSignal(this DiContainer container) { - container.BindInterfacesTo>().AsCached(); - return container.DeclareSignal().OptionalSubscriber(); + container.BindInterfacesTo>().AsCached(); + return container.DeclareSignal().OptionalSubscriber(); } } } diff --git a/Assets/Scripts/IBoundarySignalCoordinator.cs b/Assets/Scripts/IBoundarySignalCoordinator.cs deleted file mode 100644 index 69f3497..0000000 --- a/Assets/Scripts/IBoundarySignalCoordinator.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using UniRx; - -namespace UniFlow -{ - public interface IBoundarySignalSender - { - void Send(TValue value); - } - - public interface IBoundarySignalReceiver - { - IObservable OnReceiveAsObservable(); - } - - public interface IBoundarySignalCoordinator : IBoundarySignalSender, IBoundarySignalReceiver - { - } - - public static class BoundaryCoordinatorExtensions - { - public static IObservable OnReceiveAsObservable(this IBoundarySignalReceiver messenger, TValue value) - { - return messenger.OnReceiveAsObservable().Where(x => Equals(x, value)); - } - } -} diff --git a/Assets/Scripts/IBoundarySignalCoordinator.cs.meta b/Assets/Scripts/IBoundarySignalCoordinator.cs.meta deleted file mode 100644 index a4da796..0000000 --- a/Assets/Scripts/IBoundarySignalCoordinator.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 94f743c768a64d03a61d3c92cd7044e4 -timeCreated: 1571326649 \ No newline at end of file diff --git a/Assets/Scripts/ISignal.cs b/Assets/Scripts/ISignal.cs deleted file mode 100644 index a14e234..0000000 --- a/Assets/Scripts/ISignal.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace UniFlow -{ - public interface ISignal - { - } - - public interface IEquatableSignal : ISignal, IEquatable - { - } -} diff --git a/Assets/Scripts/ISignal.cs.meta b/Assets/Scripts/ISignal.cs.meta deleted file mode 100644 index ffd8524..0000000 --- a/Assets/Scripts/ISignal.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: cd44a551199a42bdaaca4e37d96d363a -timeCreated: 1570585967 \ No newline at end of file diff --git a/Assets/Scripts/ISignalPublisher.cs b/Assets/Scripts/ISignalPublisher.cs deleted file mode 100644 index 0ee76ae..0000000 --- a/Assets/Scripts/ISignalPublisher.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace UniFlow -{ - public interface ISignalPublisher where TSignal : ISignal - { - void Publish(TSignal signal); - } -} diff --git a/Assets/Scripts/ISignalPublisher.cs.meta b/Assets/Scripts/ISignalPublisher.cs.meta deleted file mode 100644 index 4f0b6e3..0000000 --- a/Assets/Scripts/ISignalPublisher.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 0e002f706f2349a7abd6ef46edb64f9e -timeCreated: 1570585919 \ No newline at end of file diff --git a/Assets/Scripts/ISignalReceiver.cs b/Assets/Scripts/ISignalReceiver.cs deleted file mode 100644 index 307d44f..0000000 --- a/Assets/Scripts/ISignalReceiver.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace UniFlow -{ - public interface ISignalReceiver where TSignal : ISignal - { - IObservable OnReceiveAsObservable(); - } -} diff --git a/Assets/Scripts/ISignalReceiver.cs.meta b/Assets/Scripts/ISignalReceiver.cs.meta deleted file mode 100644 index 7bf0345..0000000 --- a/Assets/Scripts/ISignalReceiver.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 3a559db669ba4bbb940b4c0bc3c91589 -timeCreated: 1570613141 \ No newline at end of file diff --git a/Assets/Scripts/Signal/ScriptableObjectSignal.cs b/Assets/Scripts/Signal/ScriptableObjectSignal.cs index 51c2bf4..af5dccb 100644 --- a/Assets/Scripts/Signal/ScriptableObjectSignal.cs +++ b/Assets/Scripts/Signal/ScriptableObjectSignal.cs @@ -2,7 +2,58 @@ namespace UniFlow.Signal { - public class ScriptableObjectSignal : ScriptableObject, ISignal + public abstract class ScriptableObjectSignalBase : ScriptableObject { + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + return obj.GetType() == GetType(); + } + + public override int GetHashCode() + { + return 0; + } + } + + public abstract class ScriptableObjectSignalBase : ScriptableObject + where TSignal : ScriptableObjectSignalBase + { + protected abstract TComparableValue CreateComparableValue(); + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + // ReSharper disable once ConvertIfStatementToReturnStatement + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals(((TSignal) obj).CreateComparableValue(), CreateComparableValue()); + } + + public override int GetHashCode() + { + return 0; + } } } diff --git a/Assets/Scripts/Signal/SignalBase.cs b/Assets/Scripts/Signal/SignalBase.cs new file mode 100644 index 0000000..4632027 --- /dev/null +++ b/Assets/Scripts/Signal/SignalBase.cs @@ -0,0 +1,34 @@ +namespace UniFlow.Signal +{ + public abstract class SignalBase + where TSignal : SignalBase + { + protected abstract TComparableValue CreateComparableValue(); + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + // ReSharper disable once ConvertIfStatementToReturnStatement + if (obj.GetType() != GetType()) + { + return false; + } + + return Equals(((TSignal) obj).CreateComparableValue(), CreateComparableValue()); + } + + public override int GetHashCode() + { + return 0; + } + } +} diff --git a/Assets/Scripts/Signal/SignalBase.cs.meta b/Assets/Scripts/Signal/SignalBase.cs.meta new file mode 100644 index 0000000..9e72e3f --- /dev/null +++ b/Assets/Scripts/Signal/SignalBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d4ee291d70c4431d91aa379a747c35ea +timeCreated: 1571583826 \ No newline at end of file diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs index fce0793..72290f7 100644 --- a/Assets/Scripts/Signal/StringSignal.cs +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -7,27 +7,15 @@ namespace UniFlow.Signal { [Serializable] [PublicAPI] - public struct StringSignal : IEquatableSignal + public class StringSignal : SignalBase { - public StringSignal(string name) - { - this.name = name; - parameter = default; - } - - public StringSignal(string name, SignalParameter parameter) - { - this.name = name; - this.parameter = parameter; - } - - [SerializeField] private string name; + [SerializeField] private string signalName; [SerializeField] private SignalParameter parameter; - public string Name + public string SignalName { - get => name; - set => name = value; + get => signalName; + set => signalName = value; } public SignalParameter Parameter { @@ -35,19 +23,18 @@ public SignalParameter Parameter set => parameter = value; } - public bool Equals(StringSignal other) - { - return Name == other.Name; - } - - public override bool Equals(object obj) + protected override string CreateComparableValue() { - return obj is StringSignal other && Equals(other); + return SignalName; } - public override int GetHashCode() + public static StringSignal Create(string signalName, SignalParameter signalParameter = default) { - return Name != null ? Name.GetHashCode() : 0; + return new StringSignal + { + SignalName = signalName, + Parameter = signalParameter, + }; } [Serializable] @@ -103,4 +90,9 @@ public ScriptableObject ScriptableObjectValue } } } + + [Serializable] + public class StringSignalCollector : ValueCollectorBase + { + } } diff --git a/Assets/Scripts/Utility/SignalHandler.cs b/Assets/Scripts/Utility/SignalHandler.cs index 6c8033e..2f70413 100644 --- a/Assets/Scripts/Utility/SignalHandler.cs +++ b/Assets/Scripts/Utility/SignalHandler.cs @@ -1,54 +1,45 @@ using System; using JetBrains.Annotations; -using UniFlow.Signal; using UniRx; +using Zenject; namespace UniFlow.Utility { - [PublicAPI] - public static class SignalHandler + public interface ISignalPublisher { - public static void PublishString(string signalName) - { - SignalHandler.Publish(new StringSignal(signalName)); - } + void Publish(TSignal signal); + } - public static void PublishString(string signalName, StringSignal.SignalParameter signalParameter) - { - SignalHandler.Publish(new StringSignal(signalName, signalParameter)); - } + public interface ISignalReceiver + { + IObservable OnReceiveAsObservable(); + } - public static IObservable OnReceiveStringAsObservable(string signalName) - { - return SignalHandler.OnReceiveAsObservable().Where(x => x.Name == signalName); - } + public interface ISignalHandler : ISignalPublisher, ISignalReceiver + { } [PublicAPI] - public static class SignalHandler where TSignal : ISignal + public class SignalHandler : ISignalHandler { - public static void Publish(TSignal signal) + [Inject] private SignalBus SignalBus { get; } + + public void Publish(TSignal signal) { - if (typeof(ScriptableObjectSignal).IsAssignableFrom(typeof(TSignal))) - { - MessageBroker.Default.Publish(signal as ScriptableObjectSignal); - } - else - { - MessageBroker.Default.Publish(signal); - } + SignalBus.Fire(signal); } - public static IObservable OnReceiveAsObservable() + public IObservable OnReceiveAsObservable() { - return typeof(ScriptableObjectSignal).IsAssignableFrom(typeof(TSignal)) - ? MessageBroker.Default.Receive().Where(x => x is TSignal).Select(x => (TSignal) (ISignal) x) - : MessageBroker.Default.Receive(); + return SignalBus.GetStream(); } + } - public static IObservable OnReceiveAsObservable(TSignal signal) + public static class SignalHandlerExtensions + { + public static IObservable OnReceiveAsObservable(this ISignalReceiver signalReceiver, TSignal signal) { - return OnReceiveAsObservable().Where(x => !(x is IEquatableSignal valueSignal) || valueSignal.Equals(signal)); + return signalReceiver.OnReceiveAsObservable().Where(x => Equals(x, signal)); } } } From 851e135296c2b2047db92cfcd107eafa89b71906 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 03:23:28 +0900 Subject: [PATCH 372/453] :clipboard: Bump up version to v0.1.0-preview.32 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 18242c0..6130f31 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.31", + "version": "0.1.0-preview.32", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From a575e597c222f03a2a184889459c0cecfef03149 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 14:51:17 +0900 Subject: [PATCH 373/453] :sparkles: Implement ProgressiveTimer Connector --- .../Connector/Complex/ProgressiveTimer.cs | 65 +++++++++++++++++++ .../Complex/ProgressiveTimer.cs.meta | 3 + Assets/Scripts/ConnectorType.cs | 2 + Assets/Scripts/ValueCollectors.cs | 14 ++++ 4 files changed, 84 insertions(+) create mode 100644 Assets/Scripts/Connector/Complex/ProgressiveTimer.cs create mode 100644 Assets/Scripts/Connector/Complex/ProgressiveTimer.cs.meta diff --git a/Assets/Scripts/Connector/Complex/ProgressiveTimer.cs b/Assets/Scripts/Connector/Complex/ProgressiveTimer.cs new file mode 100644 index 0000000..e98bbcc --- /dev/null +++ b/Assets/Scripts/Connector/Complex/ProgressiveTimer.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using UniFlow; +using UniFlow.Utility; +using UniRx; +using UniRx.Triggers; +using UnityEngine; + +namespace PretendLand.Edwin.Scripts.Connector.Complex +{ + [AddComponentMenu("UniFlow/Complex/ProgressiveTimer", (int) ConnectorType.ProgressiveTimer)] + public class ProgressiveTimer : ConnectorBase, IMessageCollectable, IMessageComposable + { + [SerializeField] private float seconds = default; + [SerializeField] private ProgressDirection direction = default; + private float Seconds + { + get => seconds; + set => seconds = value; + } + private ProgressDirection Direction => direction; + + [SerializeField] private FloatCollector secondsCollector = new FloatCollector(); + private FloatCollector SecondsCollector => secondsCollector; + + private IObservable ProgressObservable { get; set; } + private float ProceedTime { get; set; } = 0.0f; + + public override IObservable OnConnectAsObservable() + { + var observable = this.UpdateAsObservable().TakeUntil(Observable.Timer(TimeSpan.FromSeconds(Seconds))).Share(); + observable.Subscribe(_ => ProceedTime += Time.deltaTime); + switch (Direction) + { + case ProgressDirection.Increase: + ProgressObservable = observable.Select(_ => ProceedTime / Seconds); + break; + case ProgressDirection.Decrease: + ProgressObservable = observable.Select(_ => 1.0f - ProceedTime / Seconds); + break; + default: + throw new ArgumentOutOfRangeException(); + } + return ObservableFactory.ReturnMessage(this); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(SecondsCollector, x => Seconds = x, nameof(Seconds)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create(() => ProgressObservable, nameof(ProgressObservable)), + }; + + private enum ProgressDirection + { + Increase, + Decrease, + } + } +} diff --git a/Assets/Scripts/Connector/Complex/ProgressiveTimer.cs.meta b/Assets/Scripts/Connector/Complex/ProgressiveTimer.cs.meta new file mode 100644 index 0000000..3774fc9 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/ProgressiveTimer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b4f05fb08b6d4e3091c784268cd55968 +timeCreated: 1571625934 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index f63c5a8..a5d0fe6 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -104,6 +104,8 @@ public enum ConnectorType MusicPlayer = 4000, NumberImageRenderer, + GaugeImageRenderer, + ProgressiveTimer, SignalPublisher = 6000, StringSignalPublisher, diff --git a/Assets/Scripts/ValueCollectors.cs b/Assets/Scripts/ValueCollectors.cs index ecad25f..4837ad0 100644 --- a/Assets/Scripts/ValueCollectors.cs +++ b/Assets/Scripts/ValueCollectors.cs @@ -242,5 +242,19 @@ public class EaseTypeCollector : ValueCollectorBase { } +#endregion + +#region IObservable + + [Serializable] + public class IntObservableCollector : ValueCollectorBase> + { + } + + [Serializable] + public class FloatObservableCollector : ValueCollectorBase> + { + } + #endregion } From 986e4ab949fc6f1281c774a9374db0e68a3f852e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 14:51:34 +0900 Subject: [PATCH 374/453] :wrench: Move category for MusicPlayer --- Assets/Scripts/Connector/Complex/MusicPlayer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Complex/MusicPlayer.cs b/Assets/Scripts/Connector/Complex/MusicPlayer.cs index 637a0a5..0532b04 100644 --- a/Assets/Scripts/Connector/Complex/MusicPlayer.cs +++ b/Assets/Scripts/Connector/Complex/MusicPlayer.cs @@ -7,7 +7,7 @@ namespace PretendLand.Edwin.Scripts.Connector.Complex { - [AddComponentMenu("UniFlow/Controller/MusicPlayer", (int) ConnectorType.MusicPlayer)] + [AddComponentMenu("UniFlow/Complex/MusicPlayer", (int) ConnectorType.MusicPlayer)] public class MusicPlayer : ConnectorBase, IMessageCollectable { private static GameObject baseGameObject; From c83cbb8c6408e81b7b099b866a31755f1377ee31 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 14:52:01 +0900 Subject: [PATCH 375/453] :sparkles: Implement GaugeImageRenderer --- .../Connector/Complex/GaugeImageRenderer.cs | 58 +++++++++++++++++++ .../Complex/GaugeImageRenderer.cs.meta | 3 + 2 files changed, 61 insertions(+) create mode 100644 Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs create mode 100644 Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs.meta diff --git a/Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs b/Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs new file mode 100644 index 0000000..ac298af --- /dev/null +++ b/Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using UniFlow; +using UniFlow.Utility; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace PretendLand.Edwin.Scripts.Connector.Complex +{ + [AddComponentMenu("UniFlow/Complex/GaugeImageRenderer", (int) ConnectorType.GaugeImageRenderer)] + public class GaugeImageRenderer : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable + { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; + [SerializeField] private Image image = default; + + public GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + private set => baseGameObject = value; + } + public string TransformPath + { + get => transformPath; + private set => transformPath = value; + } + private Image Image + { + get => image != default ? image : image = this.GetOrAddComponent(); + set => image = value; + } + + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private ImageCollector imageCollector = new ImageCollector(); + [SerializeField] private FloatObservableCollector floatObservableCollector = new FloatObservableCollector(); + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private ImageCollector ImageCollector => imageCollector; + private FloatObservableCollector FloatObservableCollector => floatObservableCollector; + + public override IObservable OnConnectAsObservable() + { + return ObservableFactory.ReturnMessage(this); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(ImageCollector, x => Image = x, nameof(Image)), + CollectableMessageAnnotationFactory.Create(FloatObservableCollector, observable => observable.Subscribe(x => Image.fillAmount = x), "FillAmountObservable"), + }; + } +} diff --git a/Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs.meta b/Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs.meta new file mode 100644 index 0000000..538a840 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/GaugeImageRenderer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4eac16c066ec49e7bf076010a1b48107 +timeCreated: 1571595158 \ No newline at end of file From d1a95dd748242a9e908fe31855f8e8bbc434e7ca Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 17:00:07 +0900 Subject: [PATCH 376/453] :sparkles: Accept UnityEngine.Object for DestroyInstance --- .../Connector/Controller/DestroyInstance.cs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/DestroyInstance.cs b/Assets/Scripts/Connector/Controller/DestroyInstance.cs index 07a01c2..70a9ce9 100644 --- a/Assets/Scripts/Connector/Controller/DestroyInstance.cs +++ b/Assets/Scripts/Connector/Controller/DestroyInstance.cs @@ -9,27 +9,29 @@ namespace UniFlow.Connector.Controller { [AddComponentMenu("UniFlow/Controller/DestroyInstance", (int) ConnectorType.LoadScene)] - public class DestroyInstance : ConnectorBase + public class DestroyInstance : ConnectorBase, IMessageCollectable { - [SerializeField] private List targetComponents = default; - [SerializeField] private List targetGameObjects = default; + [SerializeField] private List objects = new List(); - [UsedImplicitly] public IEnumerable Components + [UsedImplicitly] public IList Objects { - get => targetComponents; - set => targetComponents = value.ToList(); - } - [UsedImplicitly] public IEnumerable GameObjects - { - get => targetGameObjects; - set => targetGameObjects = value.ToList(); + get => objects; + set => objects = value.ToList(); } + [SerializeField] private ObjectCollector objectCollector = new ObjectCollector(); + private ObjectCollector ObjectCollector => objectCollector; + public override IObservable OnConnectAsObservable() { - var targets = Components.Concat(GameObjects).ToList(); - targets.ToList().ForEach(Destroy); + Objects.ToList().ForEach(Destroy); return ObservableFactory.ReturnMessage(this); } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(ObjectCollector, Objects.Add, "Object"), + }; } } From 8c62c5f84c19593ecd51436640f82f0d741b9201 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 17:00:27 +0900 Subject: [PATCH 377/453] :beetle: Send Instantiated instance correctly --- .../Scripts/Connector/Controller/InstantiateGameObject.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index adb1996..c471c53 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -6,7 +6,7 @@ namespace UniFlow.Connector.Controller { - [AddComponentMenu("UniFlow/Controller/InstantiateObject", (int) ConnectorType.InstantiateGameObject)] + [AddComponentMenu("UniFlow/Controller/InstantiateGameObject", (int) ConnectorType.InstantiateGameObject)] public class InstantiateGameObject : ConnectorBase, IMessageCollectable, IMessageComposable @@ -38,7 +38,7 @@ private Transform Parent public override IObservable OnConnectAsObservable() { Instantiated = DiContainer.InstantiatePrefab(Source, Parent); - return ObservableFactory.ReturnMessage(this); + return ObservableFactory.ReturnMessage(this, nameof(Instantiated), Instantiated); } IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => @@ -51,7 +51,7 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotationFactory.Create(() => Instantiated, nameof(Instantiated)), + ComposableMessageAnnotationFactory.Create(nameof(Instantiated)), }; } } From 1f86873e57f678b0aa4e2dbd6a7bc88b8d12e0fa Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 17:02:08 +0900 Subject: [PATCH 378/453] :clipboard: Bump up version to v0.1.0-preview.33 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 6130f31..4a8d448 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.32", + "version": "0.1.0-preview.33", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From e5cbfd97b7bf696fdd40bd0172a8965d2b74f58c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 22:24:32 +0900 Subject: [PATCH 379/453] :sparkles: Add HandleEventSignal --- .../HandleEventSignalPublisher.cs | 29 ++++++++++++++++++ .../HandleEventSignalPublisher.cs.meta | 3 ++ .../HandleEventSignalReceiver.cs | 29 ++++++++++++++++++ .../HandleEventSignalReceiver.cs.meta | 3 ++ Assets/Scripts/ConnectorType.cs | 2 ++ Assets/Scripts/Signal/HandleEventSignal.cs | 30 +++++++++++++++++++ .../Scripts/Signal/HandleEventSignal.cs.meta | 11 +++++++ 7 files changed, 107 insertions(+) create mode 100644 Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs.meta create mode 100644 Assets/Scripts/Signal/HandleEventSignal.cs create mode 100644 Assets/Scripts/Signal/HandleEventSignal.cs.meta diff --git a/Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs new file mode 100644 index 0000000..c5943fe --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalPublisher +{ + [AddComponentMenu("UniFlow/SignalPublisher/HandleEventSignalPublisher", (int) ConnectorType.HandleEventSignalPublisher)] + public class HandleEventSignalPublisher : SignalPublisherBase, IMessageCollectable + { + [SerializeField] private HandleEventType handleEventType = default; + private HandleEventType HandleEventType + { + get => handleEventType; + set => handleEventType = value; + } + + [SerializeField] private HandleEventTypeCollector handleEventTypeCollector = new HandleEventTypeCollector(); + private HandleEventTypeCollector HandleEventTypeCollector => handleEventTypeCollector; + + protected override HandleEventSignal GetSignal() => + HandleEventSignal.Create(HandleEventType); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(HandleEventTypeCollector, x => HandleEventType = x, nameof(HandleEventType)), + }; + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs.meta new file mode 100644 index 0000000..8652111 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/HandleEventSignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4427fa2e03fc4b37bfcfbb8b138ef7d0 +timeCreated: 1571659444 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs new file mode 100644 index 0000000..af76aad --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalReceiver +{ + [AddComponentMenu("UniFlow/SignalReceiver/HandleEventSignalReceiver", (int) ConnectorType.HandleEventSignalPublisher)] + public class HandleEventSignalReceiver : SignalReceiverBase, IMessageCollectable + { + [SerializeField] private HandleEventType handleEventType = default; + private HandleEventType HandleEventType + { + get => handleEventType; + set => handleEventType = value; + } + + [SerializeField] private HandleEventTypeCollector handleEventTypeCollector = new HandleEventTypeCollector(); + private HandleEventTypeCollector HandleEventTypeCollector => handleEventTypeCollector; + + protected override HandleEventSignal GetSignal() => + HandleEventSignal.Create(HandleEventType); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(HandleEventTypeCollector, x => HandleEventType = x, nameof(HandleEventType)), + }; + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs.meta new file mode 100644 index 0000000..d42d515 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/HandleEventSignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2f6a4fa5c1694dc996f906163522641d +timeCreated: 1571659655 \ No newline at end of file diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index a5d0fe6..905afbd 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -110,10 +110,12 @@ public enum ConnectorType SignalPublisher = 6000, StringSignalPublisher, ScriptableObjectSignalPublisher, + HandleEventSignalPublisher, SignalReceiver = 6500, StringSignalReceiver, ScriptableObjectSignalReceiver, + HandleEventSignalReceiver, And = 8000, Or, diff --git a/Assets/Scripts/Signal/HandleEventSignal.cs b/Assets/Scripts/Signal/HandleEventSignal.cs new file mode 100644 index 0000000..c92ec57 --- /dev/null +++ b/Assets/Scripts/Signal/HandleEventSignal.cs @@ -0,0 +1,30 @@ +using System; + +namespace UniFlow.Signal +{ + public class HandleEventSignal : SignalBase + { + public HandleEventType HandleEventType { get; private set; } + + protected override HandleEventType CreateComparableValue() + { + return HandleEventType; + } + + public static HandleEventSignal Create(HandleEventType handleEventType) + { + return new HandleEventSignal {HandleEventType = handleEventType}; + } + } + + public enum HandleEventType + { + Activate, + Deactivate, + } + + [Serializable] + public class HandleEventTypeCollector : ValueCollectorBase + { + } +} diff --git a/Assets/Scripts/Signal/HandleEventSignal.cs.meta b/Assets/Scripts/Signal/HandleEventSignal.cs.meta new file mode 100644 index 0000000..567da75 --- /dev/null +++ b/Assets/Scripts/Signal/HandleEventSignal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd8d05fecd0144910a4f88eca574cc51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 14e986bdf1eb55af7e2bc70f65953a4b09234002 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 22:24:43 +0900 Subject: [PATCH 380/453] :sparkles: Declare signals for HandleEventSignal --- Assets/Scripts/Installer/UniFlowInstaller.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Assets/Scripts/Installer/UniFlowInstaller.cs b/Assets/Scripts/Installer/UniFlowInstaller.cs index 50d67ed..a92f20a 100644 --- a/Assets/Scripts/Installer/UniFlowInstaller.cs +++ b/Assets/Scripts/Installer/UniFlowInstaller.cs @@ -1,4 +1,7 @@ +using System.Diagnostics.CodeAnalysis; +using JetBrains.Annotations; using UniFlow.Signal; +using UniFlow.Utility; using UnityEngine; using Zenject; @@ -10,6 +13,15 @@ public class UniFlowInstaller : ScriptableObjectInstaller public override void InstallBindings() { Container.DeclareUniFlowSignal(); + Container.DeclareUniFlowSignal(); + } + + [UsedImplicitly] + [SuppressMessage("ReSharper", "ObjectCreationAsStatement")] + private void AOTWorkaround() + { + new SignalHandler(); + new SignalHandler(); } } } From efe33ea1aee8885008b8bdf383819a455c10b84a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 21 Oct 2019 22:26:51 +0900 Subject: [PATCH 381/453] :clipboard: Bump up version to v0.1.0-preview.34 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 4a8d448..0de3612 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.33", + "version": "0.1.0-preview.34", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From d06f24988b7fce7cc7643112397affd39d97ac37 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 22 Oct 2019 18:27:55 +0900 Subject: [PATCH 382/453] :beetle: Fix compile error when ZEN_SIGNALS_ADD_UNIRX does not defined --- Assets/Scripts/Utility/SignalHandler.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Assets/Scripts/Utility/SignalHandler.cs b/Assets/Scripts/Utility/SignalHandler.cs index 2f70413..b11b072 100644 --- a/Assets/Scripts/Utility/SignalHandler.cs +++ b/Assets/Scripts/Utility/SignalHandler.cs @@ -31,7 +31,13 @@ public void Publish(TSignal signal) public IObservable OnReceiveAsObservable() { +#if ZEN_SIGNALS_ADD_UNIRX return SignalBus.GetStream(); +#else + var subject = new Subject(); + SignalBus.Subscribe(subject.OnNext); + return subject; +#endif } } From 76c8209bb0a426106b9c8e683f4d4c9f2c2f9ba0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 22 Oct 2019 18:30:24 +0900 Subject: [PATCH 383/453] :clipboard: Bump up version to v0.1.0-preview.34.1 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 0de3612..5943492 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.34", + "version": "0.1.0-preview.34.1", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From b3548c9c115668357298d73005f7495a6bf797b0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 21:30:46 +0900 Subject: [PATCH 384/453] :sparkles: Tweak and Add signal classes --- Assets/Scripts/ISignal.cs | 12 +++ Assets/Scripts/ISignal.cs.meta | 11 +++ Assets/Scripts/Signal/EnumSignalBase.cs | 72 ++++++++++++++++ Assets/Scripts/Signal/EnumSignalBase.cs.meta | 3 + Assets/Scripts/Signal/HandleEventSignal.cs | 13 ++- Assets/Scripts/Signal/MusicControlSignal.cs | 24 ++++++ .../Scripts/Signal/MusicControlSignal.cs.meta | 3 + Assets/Scripts/Signal/MusicDuckingSignal.cs | 17 ++++ .../Scripts/Signal/MusicDuckingSignal.cs.meta | 3 + .../Scripts/Signal/ScriptableObjectSignal.cs | 80 ++++++++++++------ Assets/Scripts/Signal/SignalBase.cs | 82 +++++++++++++++---- Assets/Scripts/Signal/StringSignal.cs | 16 ++-- 12 files changed, 277 insertions(+), 59 deletions(-) create mode 100644 Assets/Scripts/ISignal.cs create mode 100644 Assets/Scripts/ISignal.cs.meta create mode 100644 Assets/Scripts/Signal/EnumSignalBase.cs create mode 100644 Assets/Scripts/Signal/EnumSignalBase.cs.meta create mode 100644 Assets/Scripts/Signal/MusicControlSignal.cs create mode 100644 Assets/Scripts/Signal/MusicControlSignal.cs.meta create mode 100644 Assets/Scripts/Signal/MusicDuckingSignal.cs create mode 100644 Assets/Scripts/Signal/MusicDuckingSignal.cs.meta diff --git a/Assets/Scripts/ISignal.cs b/Assets/Scripts/ISignal.cs new file mode 100644 index 0000000..874c4bf --- /dev/null +++ b/Assets/Scripts/ISignal.cs @@ -0,0 +1,12 @@ +using System; + +namespace UniFlow +{ + public interface ISignal + { + } + + public interface ISignal : ISignal, IEquatable + { + } +} diff --git a/Assets/Scripts/ISignal.cs.meta b/Assets/Scripts/ISignal.cs.meta new file mode 100644 index 0000000..2e89705 --- /dev/null +++ b/Assets/Scripts/ISignal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15a0e408eae1d4aaf8a42d004565cdc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Signal/EnumSignalBase.cs b/Assets/Scripts/Signal/EnumSignalBase.cs new file mode 100644 index 0000000..ed06a86 --- /dev/null +++ b/Assets/Scripts/Signal/EnumSignalBase.cs @@ -0,0 +1,72 @@ +using System; +using JetBrains.Annotations; +using UnityEngine; + +namespace UniFlow.Signal +{ + [Serializable] + [PublicAPI] + public abstract class EnumSignalBase : SignalBase + where TSignal : EnumSignalBase, new() + where TEnum : Enum + { + [SerializeField] private TEnum enumValue = default; + + protected override TEnum ComparableValue + { + get => enumValue; + set => enumValue = value; + } + } + + [PublicAPI] + public abstract class EnumScriptableObjectSignalBase : ScriptableObject, ISignal> + where TSignal : EnumScriptableObjectSignalBase + where TEnum : Enum + { + [SerializeField] private TEnum enumValue = default; + + public TEnum EnumValue + { + get => enumValue; + set => enumValue = value; + } + + public override bool Equals(object obj) + { + if (!(obj is EnumScriptableObjectSignalBase enumScriptableObjectSignal)) + { + return false; + } + + return Equals(EnumValue, enumScriptableObjectSignal.EnumValue); + } + + public override int GetHashCode() + { + return EnumValue.GetHashCode(); + } + + bool IEquatable>.Equals(EnumScriptableObjectSignalBase other) + { + return Equals(other); + } + + public static bool operator ==(EnumScriptableObjectSignalBase left, EnumScriptableObjectSignalBase right) + { + return Equals(left, right); + } + + public static bool operator !=(EnumScriptableObjectSignalBase left, EnumScriptableObjectSignalBase right) + { + return !Equals(left, right); + } + + public static TSignal Create(TEnum enumValue) + { + var signal = CreateInstance(); + signal.EnumValue = enumValue; + return signal; + } + } +} diff --git a/Assets/Scripts/Signal/EnumSignalBase.cs.meta b/Assets/Scripts/Signal/EnumSignalBase.cs.meta new file mode 100644 index 0000000..1cda3a2 --- /dev/null +++ b/Assets/Scripts/Signal/EnumSignalBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f868dacfe54a4feea1e01e26813b92b0 +timeCreated: 1571915970 \ No newline at end of file diff --git a/Assets/Scripts/Signal/HandleEventSignal.cs b/Assets/Scripts/Signal/HandleEventSignal.cs index c92ec57..d8c964f 100644 --- a/Assets/Scripts/Signal/HandleEventSignal.cs +++ b/Assets/Scripts/Signal/HandleEventSignal.cs @@ -1,22 +1,21 @@ using System; +using JetBrains.Annotations; namespace UniFlow.Signal { + [PublicAPI] public class HandleEventSignal : SignalBase { public HandleEventType HandleEventType { get; private set; } - protected override HandleEventType CreateComparableValue() + protected override HandleEventType ComparableValue { - return HandleEventType; - } - - public static HandleEventSignal Create(HandleEventType handleEventType) - { - return new HandleEventSignal {HandleEventType = handleEventType}; + get => HandleEventType; + set => HandleEventType = value; } } + [PublicAPI] public enum HandleEventType { Activate, diff --git a/Assets/Scripts/Signal/MusicControlSignal.cs b/Assets/Scripts/Signal/MusicControlSignal.cs new file mode 100644 index 0000000..760bf21 --- /dev/null +++ b/Assets/Scripts/Signal/MusicControlSignal.cs @@ -0,0 +1,24 @@ +using UniFlow.Connector.Controller; +using UnityEngine; + +namespace UniFlow.Signal +{ + public class MusicControlSignal : SignalBase + { + public AudioControlMethod AudioControlMethod { get; private set; } + public AudioClip AudioClip { get; private set; } + public bool Loop { get; private set; } = true; + public bool RewindSameClip { get; private set; } = false; + + public static MusicControlSignal Create(AudioControlMethod musicControlType, AudioClip audioClip, bool loop = true, bool rewindSameClip = false) + { + return new MusicControlSignal + { + AudioControlMethod = musicControlType, + AudioClip = audioClip, + Loop = loop, + RewindSameClip = rewindSameClip, + }; + } + } +} diff --git a/Assets/Scripts/Signal/MusicControlSignal.cs.meta b/Assets/Scripts/Signal/MusicControlSignal.cs.meta new file mode 100644 index 0000000..cbdb811 --- /dev/null +++ b/Assets/Scripts/Signal/MusicControlSignal.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e771178b3cc7477a880cd769d0411f8a +timeCreated: 1572429841 \ No newline at end of file diff --git a/Assets/Scripts/Signal/MusicDuckingSignal.cs b/Assets/Scripts/Signal/MusicDuckingSignal.cs new file mode 100644 index 0000000..cdbd449 --- /dev/null +++ b/Assets/Scripts/Signal/MusicDuckingSignal.cs @@ -0,0 +1,17 @@ +namespace UniFlow.Signal +{ + public class MusicDuckingSignal : SignalBase + { + public float Volume { get; private set; } + public float Duration { get; private set; } + + public static MusicDuckingSignal Create(float volume, float duration) + { + return new MusicDuckingSignal + { + Volume = volume, + Duration = duration, + }; + } + } +} diff --git a/Assets/Scripts/Signal/MusicDuckingSignal.cs.meta b/Assets/Scripts/Signal/MusicDuckingSignal.cs.meta new file mode 100644 index 0000000..d0ee0e5 --- /dev/null +++ b/Assets/Scripts/Signal/MusicDuckingSignal.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 24b1f23f31a64c96847d5a0a15f366e2 +timeCreated: 1572426096 \ No newline at end of file diff --git a/Assets/Scripts/Signal/ScriptableObjectSignal.cs b/Assets/Scripts/Signal/ScriptableObjectSignal.cs index af5dccb..5dd0d37 100644 --- a/Assets/Scripts/Signal/ScriptableObjectSignal.cs +++ b/Assets/Scripts/Signal/ScriptableObjectSignal.cs @@ -1,59 +1,85 @@ +using System; +using JetBrains.Annotations; using UnityEngine; namespace UniFlow.Signal { - public abstract class ScriptableObjectSignalBase : ScriptableObject + [PublicAPI] + public abstract class ScriptableObjectSignalBase : ScriptableObject, ISignal> + where TSignal : ScriptableObjectSignalBase { public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) - { - return false; - } - - if (ReferenceEquals(this, obj)) - { - return true; - } - - return obj.GetType() == GetType(); + return obj is TSignal; } public override int GetHashCode() { return 0; } + + bool IEquatable>.Equals(ScriptableObjectSignalBase other) + { + return Equals(other); + } + + public static TSignal Create() + { + return CreateInstance(); + } + + public static bool operator ==(ScriptableObjectSignalBase left, ScriptableObjectSignalBase right) + { + return Equals(left, right); + } + + public static bool operator !=(ScriptableObjectSignalBase left, ScriptableObjectSignalBase right) + { + return !Equals(left, right); + } } - public abstract class ScriptableObjectSignalBase : ScriptableObject + [PublicAPI] + public abstract class ScriptableObjectSignalBase : ScriptableObject, ISignal> where TSignal : ScriptableObjectSignalBase { - protected abstract TComparableValue CreateComparableValue(); + protected abstract TComparableValue ComparableValue { get; set; } public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) + if (!(obj is TSignal signal)) { return false; } - if (ReferenceEquals(this, obj)) - { - return true; - } + return Equals(ComparableValue, signal.ComparableValue); + } - // ReSharper disable once ConvertIfStatementToReturnStatement - if (obj.GetType() != GetType()) - { - return false; - } + public override int GetHashCode() + { + return ComparableValue.GetHashCode(); + } - return Equals(((TSignal) obj).CreateComparableValue(), CreateComparableValue()); + bool IEquatable>.Equals(ScriptableObjectSignalBase other) + { + return Equals(other); } - public override int GetHashCode() + public static TSignal Create(TComparableValue comparableValue) { - return 0; + var signal = CreateInstance(); + signal.ComparableValue = comparableValue; + return signal; + } + + public static bool operator ==(ScriptableObjectSignalBase left, ScriptableObjectSignalBase right) + { + return Equals(left, right); + } + + public static bool operator !=(ScriptableObjectSignalBase left, ScriptableObjectSignalBase right) + { + return !Equals(left, right); } } } diff --git a/Assets/Scripts/Signal/SignalBase.cs b/Assets/Scripts/Signal/SignalBase.cs index 4632027..2c80887 100644 --- a/Assets/Scripts/Signal/SignalBase.cs +++ b/Assets/Scripts/Signal/SignalBase.cs @@ -1,34 +1,86 @@ +using System; +using JetBrains.Annotations; + namespace UniFlow.Signal { - public abstract class SignalBase - where TSignal : SignalBase + [PublicAPI] + public abstract class SignalBase : ISignal + where TSignal : SignalBase, new() { - protected abstract TComparableValue CreateComparableValue(); + public override bool Equals(object obj) + { + return obj is TSignal; + } + + public override int GetHashCode() + { + return 0; + } + + bool IEquatable.Equals(TSignal other) + { + return true; + } + + public static TSignal Create() + { + return new TSignal(); + } + + public static bool operator ==(SignalBase first, SignalBase second) + { + return Equals(first, second); + } + + public static bool operator !=(SignalBase first, SignalBase second) + { + return !Equals(first, second); + } + } + + [Serializable] + [PublicAPI] + public abstract class SignalBase : ISignal + where TSignal : SignalBase, new() + { + protected abstract TParameter ComparableValue { get; set; } public override bool Equals(object obj) { - if (ReferenceEquals(null, obj)) + if (!(obj is TSignal signal)) { return false; } - if (ReferenceEquals(this, obj)) - { - return true; - } + return Equals(ComparableValue, signal.ComparableValue); + } + + public override int GetHashCode() + { + return ComparableValue.GetHashCode(); + } - // ReSharper disable once ConvertIfStatementToReturnStatement - if (obj.GetType() != GetType()) + bool IEquatable.Equals(TSignal other) + { + return Equals(other); + } + + public static TSignal Create(TParameter comparableValue) + { + return new TSignal { - return false; - } + ComparableValue = comparableValue, + }; + } - return Equals(((TSignal) obj).CreateComparableValue(), CreateComparableValue()); + public static bool operator ==(SignalBase first, SignalBase second) + { + return Equals(first, second); } - public override int GetHashCode() + public static bool operator !=(SignalBase first, SignalBase second) { - return 0; + return !Equals(first, second); } } } diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs index 72290f7..1d7bc95 100644 --- a/Assets/Scripts/Signal/StringSignal.cs +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -7,33 +7,29 @@ namespace UniFlow.Signal { [Serializable] [PublicAPI] - public class StringSignal : SignalBase + public sealed class StringSignal : SignalBase { [SerializeField] private string signalName; [SerializeField] private SignalParameter parameter; - public string SignalName + protected override string ComparableValue { get => signalName; set => signalName = value; } + public SignalParameter Parameter { get => parameter; set => parameter = value; } - protected override string CreateComparableValue() - { - return SignalName; - } - public static StringSignal Create(string signalName, SignalParameter signalParameter = default) { return new StringSignal { - SignalName = signalName, - Parameter = signalParameter, + signalName = signalName, + parameter = signalParameter, }; } @@ -92,7 +88,7 @@ public ScriptableObject ScriptableObjectValue } [Serializable] - public class StringSignalCollector : ValueCollectorBase + public sealed class StringSignalCollector : ValueCollectorBase { } } From 7520281e80783f9a657a9530409e33d863b38658 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 21:32:16 +0900 Subject: [PATCH 385/453] :sparkles: Add Connector to handle signal for Music --- .../Complex/MusicDuckingController.cs | 60 +++++++++++++++++++ .../Complex/MusicDuckingController.cs.meta | 3 + .../Scripts/Connector/Complex/MusicPlayer.cs | 25 ++++---- .../Connector/Controller/AudioController.cs | 5 ++ .../MusicControlSignalPublisher.cs | 59 ++++++++++++++++++ .../MusicControlSignalPublisher.cs.meta | 3 + .../MusicDuckingSignalPublisher.cs | 40 +++++++++++++ .../MusicDuckingSignalPublisher.cs.meta | 3 + .../Scripts/Connector/SignalPublisherBase.cs | 43 +++++++++++++ .../MusicControlSignalReceiver.cs | 26 ++++++++ .../MusicControlSignalReceiver.cs.meta | 3 + .../MusicDuckingSignalReceiver.cs | 24 ++++++++ .../MusicDuckingSignalReceiver.cs.meta | 3 + .../Scripts/Connector/SignalReceiverBase.cs | 23 ++++++- Assets/Scripts/ConnectorType.cs | 5 ++ 15 files changed, 313 insertions(+), 12 deletions(-) create mode 100644 Assets/Scripts/Connector/Complex/MusicDuckingController.cs create mode 100644 Assets/Scripts/Connector/Complex/MusicDuckingController.cs.meta create mode 100644 Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs.meta create mode 100644 Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs.meta diff --git a/Assets/Scripts/Connector/Complex/MusicDuckingController.cs b/Assets/Scripts/Connector/Complex/MusicDuckingController.cs new file mode 100644 index 0000000..9205afd --- /dev/null +++ b/Assets/Scripts/Connector/Complex/MusicDuckingController.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using UniFlow; +using UniRx; +using UnityEngine; + +namespace PretendLand.Edwin.Scripts.Connector.Complex +{ + [AddComponentMenu("UniFlow/Complex/MusicDuckingController", (int) ConnectorType.MusicDuckingController)] + public class MusicDuckingController : ConnectorBase, IMessageCollectable + { + [SerializeField] private AudioSource audioSource = default; + [SerializeField] private float volume = default; + [SerializeField] private float duration = default; + + private AudioSource AudioSource + { + get => audioSource != default ? audioSource : audioSource = MusicPlayer.BaseGameObject.GetOrAddComponent(); + set => audioSource = value; + } + private float Volume + { + get => volume; + set => volume = value; + } + private float Duration + { + get => duration; + set => duration = value; + } + + [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); + [SerializeField] private FloatCollector volumeCollector = new FloatCollector(); + [SerializeField] private FloatCollector durationCollector = new FloatCollector(); + + private AudioSourceCollector AudioSourceCollector => audioSourceCollector; + private FloatCollector VolumeCollector => volumeCollector; + private FloatCollector DurationCollector => durationCollector; + + public override IObservable OnConnectAsObservable() + { + var subject = new Subject(); + ObservableTween + .Tween(() => AudioSource.volume, () => Volume, Duration, ObservableTween.EaseType.InOutSinusoidal) + .Subscribe( + x => AudioSource.volume = x, + () => subject.OnNext(Unit.Default) + ); + return subject.AsMessageObservable(this); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotationFactory.Create(VolumeCollector, x => Volume = x, nameof(Volume)), + CollectableMessageAnnotationFactory.Create(DurationCollector, x => Duration = x, nameof(Duration)), + }; + } +} diff --git a/Assets/Scripts/Connector/Complex/MusicDuckingController.cs.meta b/Assets/Scripts/Connector/Complex/MusicDuckingController.cs.meta new file mode 100644 index 0000000..a251a04 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/MusicDuckingController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 05cef80ea076421793a3e1e889dcf4b6 +timeCreated: 1572427329 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Complex/MusicPlayer.cs b/Assets/Scripts/Connector/Complex/MusicPlayer.cs index 0532b04..2d0e949 100644 --- a/Assets/Scripts/Connector/Complex/MusicPlayer.cs +++ b/Assets/Scripts/Connector/Complex/MusicPlayer.cs @@ -10,9 +10,7 @@ namespace PretendLand.Edwin.Scripts.Connector.Complex [AddComponentMenu("UniFlow/Complex/MusicPlayer", (int) ConnectorType.MusicPlayer)] public class MusicPlayer : ConnectorBase, IMessageCollectable { - private static GameObject baseGameObject; - - private static GameObject BaseGameObject => baseGameObject != default ? baseGameObject : baseGameObject = CreatePersistentGameObject(); + internal static GameObject BaseGameObject { get; private set; } [SerializeField] private AudioSource audioSource = default; [SerializeField] private AudioControlMethod audioControlMethod = AudioControlMethod.Play; @@ -27,7 +25,11 @@ private AudioSource AudioSource get => audioSource != default ? audioSource : audioSource = BaseGameObject.GetOrAddComponent(); set => audioSource = value; } - private AudioControlMethod AudioControlMethod => audioControlMethod; + private AudioControlMethod AudioControlMethod + { + get => audioControlMethod; + set => audioControlMethod = value; + } private AudioClip AudioClip { get => audioClip; @@ -45,14 +47,21 @@ private bool RewindSameClip } [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); + [SerializeField] private AudioControlMethodCollector audioControlMethodCollector = new AudioControlMethodCollector(); [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); [SerializeField] private BoolCollector loopCollector = default; [SerializeField] private BoolCollector rewindSameClipCollector = new BoolCollector(); + private AudioSourceCollector AudioSourceCollector => audioSourceCollector; + private AudioControlMethodCollector AudioControlMethodCollector => audioControlMethodCollector; private AudioClipCollector AudioClipCollector => audioClipCollector; private BoolCollector LoopCollector => loopCollector; private BoolCollector RewindSameClipCollector => rewindSameClipCollector; + private void Awake() + { + BaseGameObject = gameObject; + } public override IObservable OnConnectAsObservable() { @@ -90,16 +99,10 @@ IEnumerable IMessageCollectable.GetMessageCollect new[] { CollectableMessageAnnotationFactory.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotationFactory.Create(AudioControlMethodCollector, x => AudioControlMethod = x), CollectableMessageAnnotationFactory.Create(AudioClipCollector, x => AudioClip = x), CollectableMessageAnnotationFactory.Create(LoopCollector, x => Loop = x, nameof(Loop)), CollectableMessageAnnotationFactory.Create(RewindSameClipCollector, x => RewindSameClip = x, nameof(RewindSameClip)), }; - - private static GameObject CreatePersistentGameObject() - { - var go = new GameObject("MusicPlayer"); - DontDestroyOnLoad(go); - return go; - } } } diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 022bee0..6568d28 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -122,4 +122,9 @@ public enum AudioControlMethod Pause, UnPause, } + + [Serializable] + public class AudioControlMethodCollector : ValueCollectorBase + { + } } diff --git a/Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs new file mode 100644 index 0000000..3dce4b4 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs @@ -0,0 +1,59 @@ +using System.Collections.Generic; +using UniFlow.Connector.Controller; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalPublisher +{ + [AddComponentMenu("UniFlow/SignalPublisher/MusicControlSignalPublisher", (int) ConnectorType.MusicControlSignalPublisher)] + public class MusicControlSignalPublisher : SignalPublisherBase, IMessageCollectable + { + [SerializeField] private AudioControlMethod audioControlMethod = default; + [SerializeField] private AudioClip audioClip = default; + [SerializeField] private bool loop = true; + [SerializeField] private bool rewindSameClip = false; + + private AudioControlMethod AudioControlMethod + { + get => audioControlMethod; + set => audioControlMethod = value; + } + private AudioClip AudioClip + { + get => audioClip; + set => audioClip = value; + } + private bool Loop + { + get => loop; + set => loop = value; + } + private bool RewindSameClip + { + get => rewindSameClip; + set => rewindSameClip = value; + } + + [SerializeField] private AudioControlMethodCollector audioControlMethodCollector = new AudioControlMethodCollector(); + [SerializeField] private AudioClipCollector audioClipCollector = new AudioClipCollector(); + [SerializeField] private BoolCollector loopCollector = default; + [SerializeField] private BoolCollector rewindSameClipCollector = new BoolCollector(); + + private AudioControlMethodCollector AudioControlMethodCollector => audioControlMethodCollector; + private AudioClipCollector AudioClipCollector => audioClipCollector; + private BoolCollector LoopCollector => loopCollector; + private BoolCollector RewindSameClipCollector => rewindSameClipCollector; + + protected override MusicControlSignal GetSignal() => + MusicControlSignal.Create(AudioControlMethod, AudioClip, Loop, RewindSameClip); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(AudioControlMethodCollector, x => AudioControlMethod = x, nameof(AudioControlMethod)), + CollectableMessageAnnotationFactory.Create(AudioClipCollector, x => AudioClip = x, nameof(AudioClip)), + CollectableMessageAnnotationFactory.Create(LoopCollector, x => Loop = x, nameof(Loop)), + CollectableMessageAnnotationFactory.Create(RewindSameClipCollector, x => RewindSameClip = x, nameof(RewindSameClip)), + }; + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs.meta new file mode 100644 index 0000000..d1ff8da --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/MusicControlSignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a0c997ccff6d44edadaae94badb1e543 +timeCreated: 1572430217 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs new file mode 100644 index 0000000..a69767a --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalPublisher +{ + [AddComponentMenu("UniFlow/SignalPublisher/MusicDuckingSignalPublisher", (int) ConnectorType.MusicDuckingSignalPublisher)] + public class MusicDuckingSignalPublisher : SignalPublisherBase, IMessageCollectable + { + [SerializeField] private float volume = default; + [SerializeField] private float duration = default; + + private float Volume + { + get => volume; + set => volume = value; + } + private float Duration + { + get => duration; + set => duration = value; + } + + [SerializeField] private FloatCollector volumeCollector = new FloatCollector(); + [SerializeField] private FloatCollector durationCollector = new FloatCollector(); + + private FloatCollector VolumeCollector => volumeCollector; + private FloatCollector DurationCollector => durationCollector; + + protected override MusicDuckingSignal GetSignal() => + MusicDuckingSignal.Create(Volume, Duration); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(VolumeCollector, x => Volume = x, nameof(Volume)), + CollectableMessageAnnotationFactory.Create(DurationCollector, x => Duration = x, nameof(Duration)), + }; + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs.meta new file mode 100644 index 0000000..aa5458f --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/MusicDuckingSignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7bdfb8091a24444cbc5977b215dca58b +timeCreated: 1572426589 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisherBase.cs b/Assets/Scripts/Connector/SignalPublisherBase.cs index 6e77f7c..72f243a 100644 --- a/Assets/Scripts/Connector/SignalPublisherBase.cs +++ b/Assets/Scripts/Connector/SignalPublisherBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using UniFlow.Signal; using UniFlow.Utility; using UnityEngine; using Zenject; @@ -7,6 +8,7 @@ namespace UniFlow.Connector { public abstract class SignalPublisherBase : ConnectorBase + where TSignal : ISignal { [SerializeField] private TSignal signal = default; @@ -32,6 +34,7 @@ public override IObservable OnConnectAsObservable() } public abstract class SignalPublisherBase : SignalPublisherBase, IMessageCollectable + where TSignal : ISignal where TSignalCollector : ValueCollectorBase, new() { [SerializeField] private TSignalCollector enumCollector = new TSignalCollector(); @@ -44,4 +47,44 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotationFactory.Create(EnumCollector, x => Signal = x, nameof(Signal)), }; } + + public abstract class SignalPublisherWithParameterBase : SignalPublisherBase + where TSignal : SignalBase, new() + where TParameter : Enum + { + [SerializeField] private TParameter enumValue = default; + private TParameter EnumValue => enumValue; + + protected override TSignal GetSignal() + { + return SignalBase.Create(EnumValue); + } + } + + public abstract class SignalPublisherWithParameterBase : SignalPublisherBase, IMessageCollectable + where TSignal : SignalBase, new() + where TParameterCollector : ValueCollectorBase, new() + where TParameter : Enum + { + [SerializeField] private TParameter enumValue = default; + private TParameter EnumValue + { + get => enumValue; + set => enumValue = value; + } + + [SerializeField] private TParameterCollector enumCollector = new TParameterCollector(); + private TParameterCollector EnumCollector => enumCollector; + + protected override TSignal GetSignal() + { + return SignalBase.Create(EnumValue); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new [] + { + CollectableMessageAnnotationFactory.Create(EnumCollector, x => EnumValue = x, nameof(EnumValue)), + }; + } } diff --git a/Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs new file mode 100644 index 0000000..f0dbc99 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using System.Linq; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalReceiver +{ + [AddComponentMenu("UniFlow/SignalReceiver/MusicControlSignalReceiver", (int) ConnectorType.MusicControlSignalReceiver)] + public class MusicControlSignalReceiver : SignalReceiverBase + { + protected override MusicControlSignal GetSignal() => + MusicControlSignal.Create(); + + public override IEnumerable GetMessageComposableAnnotations() => + base.GetMessageComposableAnnotations() + .Concat( + new[] + { + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.AudioControlMethod, nameof(ReceivedSignal.AudioControlMethod)), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.AudioClip, nameof(ReceivedSignal.AudioClip)), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Loop, nameof(ReceivedSignal.Loop)), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.RewindSameClip, nameof(ReceivedSignal.RewindSameClip)), + } + ); + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs.meta new file mode 100644 index 0000000..4a67c0e --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/MusicControlSignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 35a9753467824cca8a141e2771f39b93 +timeCreated: 1572430059 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs new file mode 100644 index 0000000..69fe852 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Linq; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalReceiver +{ + [AddComponentMenu("UniFlow/SignalReceiver/MusicDuckingSignalReceiver", (int) ConnectorType.MusicDuckingSignalReceiver)] + public class MusicDuckingSignalReceiver : SignalReceiverBase + { + protected override MusicDuckingSignal GetSignal() => + MusicDuckingSignal.Create(); + + public override IEnumerable GetMessageComposableAnnotations() => + base.GetMessageComposableAnnotations() + .Concat( + new[] + { + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Volume, nameof(ReceivedSignal.Volume)), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Duration, nameof(ReceivedSignal.Duration)), + } + ); + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs.meta new file mode 100644 index 0000000..0d0dd4e --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/MusicDuckingSignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 86ad318d1bf74d29aa9db8f6934ff5ae +timeCreated: 1572427115 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index 4ae952d..b29ad80 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using UniFlow.Signal; using UniFlow.Utility; using UniRx; using UnityEngine; @@ -7,7 +8,7 @@ namespace UniFlow.Connector { - public abstract class SignalReceiverBase : ConnectorBase + public abstract class SignalReceiverBase : ConnectorBase, IMessageComposable { [SerializeField] private TSignal signal = default; @@ -30,6 +31,12 @@ public override IObservable OnConnectAsObservable() { return SignalReceiver.OnReceiveAsObservable(GetSignal()).Do(x => ReceivedSignal = x).AsMessageObservable(this, "Signal"); } + + public virtual IEnumerable GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal, "Signal"), + }; } public abstract class SignalReceiverBase : SignalReceiverBase, IMessageCollectable @@ -45,4 +52,18 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotationFactory.Create(SignalCollector, x => Signal = x, "Signal"), }; } + + + public abstract class SignalReceiverWithParameterBase : SignalPublisherBase + where TSignal : SignalBase, new() + where TParameter : Enum + { + [SerializeField] private TParameter enumValue = default; + private TParameter EnumValue => enumValue; + + protected override TSignal GetSignal() + { + return SignalBase.Create(EnumValue); + } + } } diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 905afbd..8d2236e 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -103,6 +103,7 @@ public enum ConnectorType ValueInjectorTimelineAnimationTrack, MusicPlayer = 4000, + MusicDuckingController, NumberImageRenderer, GaugeImageRenderer, ProgressiveTimer, @@ -111,11 +112,15 @@ public enum ConnectorType StringSignalPublisher, ScriptableObjectSignalPublisher, HandleEventSignalPublisher, + MusicControlSignalPublisher, + MusicDuckingSignalPublisher, SignalReceiver = 6500, StringSignalReceiver, ScriptableObjectSignalReceiver, HandleEventSignalReceiver, + MusicControlSignalReceiver, + MusicDuckingSignalReceiver, And = 8000, Or, From 7a791a3020f1782481261bb958654b98f1b98a73 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 21:32:50 +0900 Subject: [PATCH 386/453] :sparkles: Add signal installer --- Assets/Scripts/Installer/UniFlowInstaller.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Assets/Scripts/Installer/UniFlowInstaller.cs b/Assets/Scripts/Installer/UniFlowInstaller.cs index a92f20a..35f815c 100644 --- a/Assets/Scripts/Installer/UniFlowInstaller.cs +++ b/Assets/Scripts/Installer/UniFlowInstaller.cs @@ -14,6 +14,8 @@ public override void InstallBindings() { Container.DeclareUniFlowSignal(); Container.DeclareUniFlowSignal(); + Container.DeclareUniFlowSignal(); + Container.DeclareUniFlowSignal(); } [UsedImplicitly] @@ -22,6 +24,8 @@ private void AOTWorkaround() { new SignalHandler(); new SignalHandler(); + new SignalHandler(); + new SignalHandler(); } } } From 4b81f46eddc44c6922afae9f87036cf1c71c5c6a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 21:47:06 +0900 Subject: [PATCH 387/453] :name_badge: Rename index based value providers --- .../ValueInjector/TransformInjector.cs | 148 ++++++++++++++++++ .../ValueInjector/TransformInjector.cs.meta | 3 + .../Connector/ValueProvider/SelectorBase.cs | 17 +- .../AnimationClipListSelector.cs | 10 ++ ...meta => AnimationClipListSelector.cs.meta} | 0 .../AnimationClipSelectorByInt.cs | 10 -- .../ValueSelector/AudioClipListSelector.cs | 10 ++ ....cs.meta => AudioClipListSelector.cs.meta} | 0 .../ValueSelector/AudioClipSelectorByInt.cs | 10 -- .../ValueSelector/ComponentListSelector.cs | 10 ++ ....cs.meta => ComponentListSelector.cs.meta} | 0 .../ValueSelector/ComponentSelectorByInt.cs | 10 -- .../ValueSelector/GameObjectListSelector.cs | 10 ++ ...cs.meta => GameObjectListSelector.cs.meta} | 0 .../ValueSelector/GameObjectSelectorByInt.cs | 10 -- .../ValueSelector/ObjectListSelector.cs | 10 ++ ...Int.cs.meta => ObjectListSelector.cs.meta} | 0 .../ValueSelector/ObjectSelectorByInt.cs | 10 -- .../TimelineAssetListSelector.cs | 11 ++ ...meta => TimelineAssetListSelector.cs.meta} | 0 .../TimelineAssetSelectorByInt.cs | 11 -- .../ValueSelector/TransformListSelector.cs | 10 ++ ....cs.meta => TransformListSelector.cs.meta} | 0 .../ValueSelector/TransformSelectorByInt.cs | 10 -- Assets/Scripts/ConnectorType.cs | 14 +- 25 files changed, 243 insertions(+), 81 deletions(-) create mode 100644 Assets/Scripts/Connector/ValueInjector/TransformInjector.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/TransformInjector.cs.meta create mode 100644 Assets/Scripts/Connector/ValueSelector/AnimationClipListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{AnimationClipSelectorByInt.cs.meta => AnimationClipListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/AudioClipListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{AudioClipSelectorByInt.cs.meta => AudioClipListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/ComponentListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{ComponentSelectorByInt.cs.meta => ComponentListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/GameObjectListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{GameObjectSelectorByInt.cs.meta => GameObjectListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/ObjectListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{ObjectSelectorByInt.cs.meta => ObjectListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/TimelineAssetListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{TimelineAssetSelectorByInt.cs.meta => TimelineAssetListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs create mode 100644 Assets/Scripts/Connector/ValueSelector/TransformListSelector.cs rename Assets/Scripts/Connector/ValueSelector/{TransformSelectorByInt.cs.meta => TransformListSelector.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs diff --git a/Assets/Scripts/Connector/ValueInjector/TransformInjector.cs b/Assets/Scripts/Connector/ValueInjector/TransformInjector.cs new file mode 100644 index 0000000..34db29f --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/TransformInjector.cs @@ -0,0 +1,148 @@ +using System.Collections.Generic; +using UniFlow; +using UniFlow.Connector.ValueInjector; +using UnityEngine; + +namespace CAFUSample.Scripts.Connector.ValueInjector +{ + [AddComponentMenu("UniFlow/ValueInjector/TransformInjector", (int) ConnectorType.ValueInjectorTransform)] + public class TransformInjector : InjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable + { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; + [SerializeField] private bool actAsLocal = true; + [SerializeField] private Vector3 position = default; + [SerializeField] private Quaternion rotation = default; + [SerializeField] private Vector3 rotationEuler = default; + [SerializeField] private Vector3 scale = default; + + public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + public string TransformPath + { + get => transformPath; + private set => transformPath = value; + } + private bool ActAsLocal => actAsLocal; + private Vector3 Position + { + get => position; + set + { + position = value; + HasInjectPosition = true; + } + } + private Quaternion Rotation + { + get => rotation; + set + { + rotation = value; + HasInjectRotation = true; + } + } + private Vector3 RotationEuler + { + get => rotationEuler; + set + { + rotationEuler = value; + HasInjectRotationEuler = true; + } + } + private Vector3 Scale + { + get => scale; + set + { + scale = value; + HasInjectScale = true; + } + } + + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private Vector3Collector positionCollector = new Vector3Collector(); + [SerializeField] private QuaternionCollector rotationCollector = new QuaternionCollector(); + [SerializeField] private Vector3Collector rotationEulerCollector = new Vector3Collector(); + [SerializeField] private Vector3Collector scaleCollector = new Vector3Collector(); + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private Vector3Collector PositionCollector => positionCollector; + private QuaternionCollector RotationCollector => rotationCollector; + private Vector3Collector RotationEulerCollector => rotationEulerCollector; + private Vector3Collector ScaleCollector => scaleCollector; + + private bool HasInjectPosition { get; set; } + private bool HasInjectRotation { get; set; } + private bool HasInjectRotationEuler { get; set; } + private bool HasInjectScale { get; set; } + + protected override void Inject() + { + var targetTransform = BaseGameObject.transform; + if (HasInjectPosition) + { + if (ActAsLocal) + { + targetTransform.localPosition = Position; + } + else + { + targetTransform.position = Position; + } + } + + if (HasInjectRotationEuler) + { + if (ActAsLocal) + { + targetTransform.localRotation = Quaternion.Euler(RotationEuler); + } + else + { + targetTransform.rotation = Quaternion.Euler(RotationEuler); + } + } + + if (HasInjectRotation) + { + if (ActAsLocal) + { + targetTransform.localRotation = Rotation; + } + else + { + targetTransform.rotation = Rotation; + } + } + + // ReSharper disable once InvertIf + if (HasInjectScale) + { + if (ActAsLocal) + { + targetTransform.localScale = Scale; + } + } + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PositionCollector, x => Position = x, nameof(Position)), + CollectableMessageAnnotationFactory.Create(RotationCollector, x => Rotation = x, nameof(Rotation)), + CollectableMessageAnnotationFactory.Create(RotationEulerCollector, x => RotationEuler = x, nameof(RotationEuler)), + CollectableMessageAnnotationFactory.Create(ScaleCollector, x => Scale = x, nameof(Scale)), + }; + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/TransformInjector.cs.meta b/Assets/Scripts/Connector/ValueInjector/TransformInjector.cs.meta new file mode 100644 index 0000000..45a4ed8 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/TransformInjector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5bdf624dc0f8461ab95051824fdf204b +timeCreated: 1571998192 \ No newline at end of file diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 768dd63..5e599d2 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using UniRx; using UnityEngine; using UnityEngine.EventSystems; @@ -16,8 +17,8 @@ public abstract class SelectorBase : ConnectorBase, [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); - private IList Keys => keys; - private IList Values => values; + protected virtual IList Keys => keys; + protected virtual IEnumerable Values => values; private TKey Key { get; set; } @@ -29,6 +30,11 @@ public override IObservable OnConnectAsObservable() return Observable.Return(this.CreateMessage()); } + protected virtual TValue FindValue(TKey key) + { + return Keys.Contains(key) && Values.Count() > Keys.IndexOf(key) ? Values.ElementAt(Keys.IndexOf(key)) : default; + } + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => new[] { @@ -38,10 +44,15 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotationFactory.Create(() => Keys.Contains(Key) ? Values[Keys.IndexOf(Key)] : default), + ComposableMessageAnnotationFactory.Create(() => FindValue(Key)), }; } + public abstract class ListSelectorBase : SelectorBase + { + protected override IList Keys => Enumerable.Range(0, Values.Count()).ToList(); + } + public abstract class GameObjectSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() { } diff --git a/Assets/Scripts/Connector/ValueSelector/AnimationClipListSelector.cs b/Assets/Scripts/Connector/ValueSelector/AnimationClipListSelector.cs new file mode 100644 index 0000000..2908778 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/AnimationClipListSelector.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/AnimationClipListSelector", (int) ConnectorType.AnimationClipListSelector)] + public class AnimationClipListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/AnimationClipListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/AnimationClipListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs deleted file mode 100644 index bbf174d..0000000 --- a/Assets/Scripts/Connector/ValueSelector/AnimationClipSelectorByInt.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/AnimationClipSelectorByInt", (int) ConnectorType.AnimationClipSelectorByInt)] - public class AnimationClipSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/Connector/ValueSelector/AudioClipListSelector.cs b/Assets/Scripts/Connector/ValueSelector/AudioClipListSelector.cs new file mode 100644 index 0000000..fed4061 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/AudioClipListSelector.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/AudioClipListSelector", (int) ConnectorType.AudioClipListSelector)] + public class AudioClipListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/AudioClipListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/AudioClipListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs deleted file mode 100644 index 1e45d52..0000000 --- a/Assets/Scripts/Connector/ValueSelector/AudioClipSelectorByInt.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/AudioClipSelectorByInt", (int) ConnectorType.AudioClipSelectorByInt)] - public class AudioClipSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/Connector/ValueSelector/ComponentListSelector.cs b/Assets/Scripts/Connector/ValueSelector/ComponentListSelector.cs new file mode 100644 index 0000000..b0e40b4 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/ComponentListSelector.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/ComponentListSelector", (int) ConnectorType.ComponentListSelector)] + public class ComponentListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/ComponentListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/ComponentListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs deleted file mode 100644 index edc7fe6..0000000 --- a/Assets/Scripts/Connector/ValueSelector/ComponentSelectorByInt.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/ComponentSelectorByInt", (int) ConnectorType.ComponentSelectorByInt)] - public class ComponentSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/Connector/ValueSelector/GameObjectListSelector.cs b/Assets/Scripts/Connector/ValueSelector/GameObjectListSelector.cs new file mode 100644 index 0000000..bf0640b --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/GameObjectListSelector.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/GameObjectListSelector", (int) ConnectorType.GameObjectListSelector)] + public class GameObjectListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/GameObjectListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/GameObjectListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs deleted file mode 100644 index c99a4fc..0000000 --- a/Assets/Scripts/Connector/ValueSelector/GameObjectSelectorByInt.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/GameObjectSelectorByInt", (int) ConnectorType.GameObjectSelectorByInt)] - public class GameObjectSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/Connector/ValueSelector/ObjectListSelector.cs b/Assets/Scripts/Connector/ValueSelector/ObjectListSelector.cs new file mode 100644 index 0000000..e0f899e --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/ObjectListSelector.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/ObjectListSelector", (int) ConnectorType.ObjectListSelector)] + public class ObjectListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/ObjectListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/ObjectListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs deleted file mode 100644 index 11819ae..0000000 --- a/Assets/Scripts/Connector/ValueSelector/ObjectSelectorByInt.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/ObjectSelectorByInt", (int) ConnectorType.ObjectSelectorByInt)] - public class ObjectSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/Connector/ValueSelector/TimelineAssetListSelector.cs b/Assets/Scripts/Connector/ValueSelector/TimelineAssetListSelector.cs new file mode 100644 index 0000000..9cd1480 --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/TimelineAssetListSelector.cs @@ -0,0 +1,11 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; +using UnityEngine.Timeline; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/TimelineAssetListSelector", (int) ConnectorType.TimelineAssetListSelector)] + public class TimelineAssetListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/TimelineAssetListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/TimelineAssetListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs deleted file mode 100644 index 9d28445..0000000 --- a/Assets/Scripts/Connector/ValueSelector/TimelineAssetSelectorByInt.cs +++ /dev/null @@ -1,11 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; -using UnityEngine.Timeline; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/TimelineAssetSelectorByInt", (int) ConnectorType.TimelineAssetSelectorByInt)] - public class TimelineAssetSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/Connector/ValueSelector/TransformListSelector.cs b/Assets/Scripts/Connector/ValueSelector/TransformListSelector.cs new file mode 100644 index 0000000..7b91b0a --- /dev/null +++ b/Assets/Scripts/Connector/ValueSelector/TransformListSelector.cs @@ -0,0 +1,10 @@ +using UniFlow.Connector.ValueProvider; +using UnityEngine; + +namespace UniFlow.Connector.ValueSelector +{ + [AddComponentMenu("UniFlow/ValueSelector/TransformListSelector", (int) ConnectorType.TransformListSelector)] + public class TransformListSelector : ListSelectorBase + { + } +} diff --git a/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs.meta b/Assets/Scripts/Connector/ValueSelector/TransformListSelector.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs.meta rename to Assets/Scripts/Connector/ValueSelector/TransformListSelector.cs.meta diff --git a/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs b/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs deleted file mode 100644 index d99b14a..0000000 --- a/Assets/Scripts/Connector/ValueSelector/TransformSelectorByInt.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UniFlow.Connector.ValueProvider; -using UnityEngine; - -namespace UniFlow.Connector.ValueSelector -{ - [AddComponentMenu("UniFlow/ValueSelector/TransformSelectorByInt", (int) ConnectorType.TransformSelectorByInt)] - public class TransformSelectorByInt : SelectorBase - { - } -} diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 8d2236e..68eaddc 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -65,13 +65,13 @@ public enum ConnectorType ValueProviderRuntimePlatform, CustomValueProvider, - ObjectSelectorByInt = 1500, - GameObjectSelectorByInt, - ComponentSelectorByInt, - TransformSelectorByInt, - AudioClipSelectorByInt, - AnimationClipSelectorByInt, - TimelineAssetSelectorByInt, + ObjectListSelector = 1500, + GameObjectListSelector, + ComponentListSelector, + TransformListSelector, + AudioClipListSelector, + AnimationClipListSelector, + TimelineAssetListSelector, CustomValueSelector, ValueComparerBool = 2000, From a468ee5a64b11009caca94466600ef2df4deb6df Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 21:51:12 +0900 Subject: [PATCH 388/453] :sparkles: Support Clamp value for NumberImageRenderer --- .../Connector/Complex/NumberImageRenderer.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs index 5ce85e1..6952d6e 100644 --- a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs +++ b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs @@ -18,6 +18,8 @@ public class NumberImageRenderer : ConnectorBase, INumberRenderer, IBaseGameObje [SerializeField] private GameObject digitPrefab = default; [SerializeField] private float delaySeconds = default; [SerializeField] private int delayFrames = default; + [SerializeField] private int minimumValue = 0; + [SerializeField] private int maximumValue = int.MaxValue; [SerializeField] private List digitGameObjects = default; [SerializeField] private List numberImages = default; @@ -51,6 +53,16 @@ private int DelayFrames get => delayFrames; set => delayFrames = value; } + private int MinimumValue + { + get => minimumValue; + set => minimumValue = value; + } + private int MaximumValue + { + get => maximumValue; + set => maximumValue = value; + } private IList DigitGameObjects => digitGameObjects; private IList NumberImages => numberImages; @@ -60,6 +72,8 @@ private int DelayFrames [SerializeField] private GameObjectCollector digitPrefabCollector = new GameObjectCollector(); [SerializeField] private FloatCollector delaySecondsCollector = new FloatCollector(); [SerializeField] private IntCollector delayFramesCollector = new IntCollector(); + [SerializeField] private IntCollector minimumValueCollector = new IntCollector(); + [SerializeField] private IntCollector maximumValueCollector = new IntCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; @@ -67,12 +81,14 @@ private int DelayFrames private GameObjectCollector DigitPrefabCollector => digitPrefabCollector; private FloatCollector DelaySecondsCollector => delaySecondsCollector; private IntCollector DelayFramesCollector => delayFramesCollector; + private IntCollector MinimumValueCollector => minimumValueCollector; + private IntCollector MaximumValueCollector => maximumValueCollector; private ISubject OnRenderSubject { get; } = new Subject(); public override IObservable OnConnectAsObservable() { - ((INumberRenderer) this).Render(Current); + ((INumberRenderer) this).Render(Mathf.Clamp(Current, MinimumValue, MaximumValue)); return OnRenderSubject.AsMessageObservable(this, "Current"); } @@ -136,6 +152,8 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotationFactory.Create(DigitPrefabCollector, x => DigitPrefab = x, nameof(DigitPrefab)), CollectableMessageAnnotationFactory.Create(DelaySecondsCollector, x => DelaySeconds = x, nameof(DelaySeconds)), CollectableMessageAnnotationFactory.Create(DelayFramesCollector, x => DelayFrames = x, nameof(DelayFrames)), + CollectableMessageAnnotationFactory.Create(MinimumValueCollector, x => MinimumValue = x, nameof(MinimumValue)), + CollectableMessageAnnotationFactory.Create(MaximumValueCollector, x => MaximumValue = x, nameof(MaximumValue)), }; IEnumerable IMessageComposable.GetMessageComposableAnnotations() => From d08b2b82e37d3064fe8cfb5e0759d8aaad736fcf Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 22:25:48 +0900 Subject: [PATCH 389/453] :clipboard: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 68eaddc..dcdbd8f 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -96,7 +96,9 @@ public enum ConnectorType ValueComparerRuntimePlatform, CustomValueComparer, - ValueInjectorImage = 3000, + ValueInjectorTransform = 3000, + ValueInjectorRectTransform, + ValueInjectorImage, ValueInjectorRawImage, ValueInjectorTimelineControlTrack, ValueInjectorTimelineAudioTrack, From 2f5f0b70ba25ee46c9edd9264179cda21b6e134c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 22:25:56 +0900 Subject: [PATCH 390/453] :note: Fix tooltip --- Assets/Scripts/ConnectorBase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 07ac084..eefc723 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -11,10 +11,10 @@ namespace UniFlow { public abstract class ConnectorBase : MonoBehaviour, IConnector { - [SerializeField] [Tooltip("Specify instances of IEventConnector directly")] + [SerializeField] [Tooltip("Specify instances of IConnector directly")] private List targetComponents = new List(); - [SerializeField] [Tooltip("Specify identifiers of IEventConnector that resolve from Zenject.DiContainer")] + [SerializeField] [Tooltip("Specify identifiers of IConnector that resolve from Zenject.DiContainer")] private List targetIds = new List(); [SerializeField] [Tooltip("Set true to allow to act as the entry point of events")] From acf047a31b3adf3dec64e21b55e723c344b7ea7a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 22:26:39 +0900 Subject: [PATCH 391/453] :sparkles: Add base class for Enumerable to Observable --- .../ValueProvider/ListProviderBase.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index ac8a458..451dbed 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -6,6 +6,37 @@ namespace UniFlow.Connector.ValueProvider { + public abstract class ListProviderBase : ConnectorBase, IInjectable>, IMessageComposable + { + [SerializeField] private List values = default; + + public IEnumerable Values + { + get => values; + set => values = value.ToList(); + } + + public override IObservable OnConnectAsObservable() + { + return Values + .ToList() + .ToObservable() + .AsMessageObservable(this, typeof(TValue).Name); + } + + void IInjectable>.Inject(IEnumerable value) + { + Values = value; + } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + // Will compose parameter in OnConnectAsObservable() + ComposableMessageAnnotationFactory.Create(), + }; + } + public abstract class ListProviderBase : ConnectorBase, IMessageCollectable, IMessageComposable From af46ea97776c6091d314c5287b2328b3e2d327dd Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 30 Oct 2019 22:27:09 +0900 Subject: [PATCH 392/453] :wrench: Do not rendering nodes when no selection --- Assets/Editor/Scripts/FlowGraphView.cs | 31 +++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index 0ecbd2c..dc6fa18 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -5,7 +5,6 @@ using UnityEditor; using UnityEditor.Experimental.GraphView; using UnityEngine; -using UnityEngine.SceneManagement; using UnityEngine.UIElements; namespace UniFlow.Editor @@ -193,19 +192,29 @@ internal void SetupActAsTrigger() .ForEach(x => ((ConnectorBase) x.ConnectorInfo.Connector).ActAsTrigger = (x.InputPort.connections == null || !x.InputPort.connections.Any())); } - private void CreateNodesFromInstance() + private IEnumerable CollectConnectors() { - Connectors = UniFlowSettings.instance.IsPrefabMode - ? UniFlowSettings.instance.SelectedGameObject - .GetComponentsInChildren(true) - .OfType() - .ToList() - : (UniFlowSettings.instance.SelectedGameObject == default ? SceneManager.GetActiveScene() : UniFlowSettings.instance.SelectedGameObject.scene) + if (UniFlowSettings.instance.IsPrefabMode) + { + return UniFlowSettings.instance.SelectedGameObject + .GetComponentsInChildren(true); + } + + if (UniFlowSettings.instance.SelectedGameObject != null) + { + return UniFlowSettings.instance + .SelectedGameObject + .scene .GetRootGameObjects() - .SelectMany(x => x.GetComponentsInChildren(true)) - .OfType() - .ToList(); + .SelectMany(x => x.GetComponentsInChildren(true)); + } + + return new IConnector[0]; + } + private void CreateNodesFromInstance() + { + Connectors = CollectConnectors().ToList(); foreach (var connector in Connectors) { From c8650ce406cb8d0a90dd08122de8fbd6e5178d08 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:52:06 +0900 Subject: [PATCH 393/453] :name_badge: Make it easier to understand when searching for text --- .../Scripts/Connector/SignalPublisher/StringSignalPublisher.cs | 2 +- Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs | 2 +- Assets/Scripts/Connector/ValueComparer/BoolComparer.cs | 2 +- Assets/Scripts/Connector/ValueComparer/FloatComparer.cs | 2 +- Assets/Scripts/Connector/ValueComparer/IntComparer.cs | 2 +- Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs | 2 +- .../Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs | 2 +- Assets/Scripts/Connector/ValueComparer/StringComparer.cs | 2 +- Assets/Scripts/Connector/ValueProvider/BoolProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/ByteProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Color32Provider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/ColorProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/FloatProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/IntProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs | 2 +- .../Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs | 2 +- .../Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/StringProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs | 2 +- Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs index fca6086..bfb0707 100644 --- a/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs +++ b/Assets/Scripts/Connector/SignalPublisher/StringSignalPublisher.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.SignalPublisher { - [AddComponentMenu("UniFlow/SignalPublisher/String", (int) ConnectorType.StringSignalPublisher)] + [AddComponentMenu("UniFlow/SignalPublisher/StringSignalPublisher", (int) ConnectorType.StringSignalPublisher)] public class StringSignalPublisher : SignalPublisherBase, IMessageCollectable { diff --git a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs index b1c6b9e..d75c736 100644 --- a/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs +++ b/Assets/Scripts/Connector/SignalReceiver/StringSignalReceiver.cs @@ -4,7 +4,7 @@ namespace UniFlow.Connector.SignalReceiver { - [AddComponentMenu("UniFlow/SignalReceiver/String", (int) ConnectorType.StringSignalReceiver)] + [AddComponentMenu("UniFlow/SignalReceiver/StringSignalReceiver", (int) ConnectorType.StringSignalReceiver)] public class StringSignalReceiver : SignalReceiverBase, IMessageCollectable, IMessageComposable diff --git a/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs index b1d386b..ce3ac21 100644 --- a/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/BoolComparer.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueComparer { - [AddComponentMenu("UniFlow/ValueComparer/Bool", (int) ConnectorType.ValueComparerBool)] + [AddComponentMenu("UniFlow/ValueComparer/BoolComparer", (int) ConnectorType.ValueComparerBool)] public class BoolComparer : ComparerBase { protected override bool Compare(bool actual) diff --git a/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs index 20438ad..82fc081 100644 --- a/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/FloatComparer.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { - [AddComponentMenu("UniFlow/ValueComparer/Float", (int) ConnectorType.ValueComparerFloat)] + [AddComponentMenu("UniFlow/ValueComparer/FloatComparer", (int) ConnectorType.ValueComparerFloat)] public class FloatComparer : ComparerBase { protected override bool Compare(float actual) diff --git a/Assets/Scripts/Connector/ValueComparer/IntComparer.cs b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs index 8599a72..f19e09f 100644 --- a/Assets/Scripts/Connector/ValueComparer/IntComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/IntComparer.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { - [AddComponentMenu("UniFlow/ValueComparer/Int", (int) ConnectorType.ValueComparerInt)] + [AddComponentMenu("UniFlow/ValueComparer/IntComparer", (int) ConnectorType.ValueComparerInt)] public class IntComparer : ComparerBase { protected override bool Compare(int actual) diff --git a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs index f56e7cc..e3afa6a 100644 --- a/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/ObjectComparer.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { - [AddComponentMenu("UniFlow/ValueComparer/Object", (int) ConnectorType.ValueComparerObject)] + [AddComponentMenu("UniFlow/ValueComparer/ObjectComparer", (int) ConnectorType.ValueComparerObject)] public class ObjectComparer : ComparerBase { protected override bool Compare(UnityEngine.Object actual) diff --git a/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs index d634e0c..88d6be7 100644 --- a/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/RuntimePlatformComparer.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueComparer { - [AddComponentMenu("UniFlow/ValueComparer/RuntimePlatform", (int) ConnectorType.ValueComparerRuntimePlatform)] + [AddComponentMenu("UniFlow/ValueComparer/RuntimePlatformComparer", (int) ConnectorType.ValueComparerRuntimePlatform)] public class RuntimePlatformComparer : EnumComparerBase { } diff --git a/Assets/Scripts/Connector/ValueComparer/StringComparer.cs b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs index 1a0579c..11917dc 100644 --- a/Assets/Scripts/Connector/ValueComparer/StringComparer.cs +++ b/Assets/Scripts/Connector/ValueComparer/StringComparer.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueComparer { - [AddComponentMenu("UniFlow/ValueComparer/String", (int) ConnectorType.ValueComparerString)] + [AddComponentMenu("UniFlow/ValueComparer/StringComparer", (int) ConnectorType.ValueComparerString)] public class StringComparer : ComparerBase { protected override bool Compare(string actual) diff --git a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs index 587b055..34d9930 100644 --- a/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/BoolProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Bool", (int) ConnectorType.ValueProviderBool)] + [AddComponentMenu("UniFlow/ValueProvider/BoolProvider", (int) ConnectorType.ValueProviderBool)] public class BoolProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs index 9023414..d3262d7 100644 --- a/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ByteProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Byte", (int) ConnectorType.ValueProviderByte)] + [AddComponentMenu("UniFlow/ValueProvider/ByteProvider", (int) ConnectorType.ValueProviderByte)] public class ByteProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs index 0e9be12..dc7f55e 100644 --- a/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Color32Provider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Color32", (int) ConnectorType.ValueProviderColor32)] + [AddComponentMenu("UniFlow/ValueProvider/Color32Provider", (int) ConnectorType.ValueProviderColor32)] public class Color32Provider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private ByteCollector rCollector = new ByteCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs index 863a4a9..9044379 100644 --- a/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ColorProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Color", (int) ConnectorType.ValueProviderColor)] + [AddComponentMenu("UniFlow/ValueProvider/ColorProvider", (int) ConnectorType.ValueProviderColor)] public class ColorProvider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private FloatCollector rCollector = new FloatCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs index c65c2e4..df2369e 100644 --- a/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/FloatProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Float", (int) ConnectorType.ValueProviderFloat)] + [AddComponentMenu("UniFlow/ValueProvider/FloatProvider", (int) ConnectorType.ValueProviderFloat)] public class FloatProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs index 4d18123..2a251ea 100644 --- a/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/GameObjectProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/GameObject", (int) ConnectorType.ValueProviderGameObject)] + [AddComponentMenu("UniFlow/ValueProvider/GameObjectProvider", (int) ConnectorType.ValueProviderGameObject)] public class GameObjectProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs index 88092a1..b68f4fd 100644 --- a/Assets/Scripts/Connector/ValueProvider/IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/IntProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Int", (int) ConnectorType.ValueProviderInt)] + [AddComponentMenu("UniFlow/ValueProvider/IntProvider", (int) ConnectorType.ValueProviderInt)] public class IntProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs index c1857c4..4bb8ffd 100644 --- a/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ObjectProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Object", (int) ConnectorType.ValueProviderObject)] + [AddComponentMenu("UniFlow/ValueProvider/ObjectProvider", (int) ConnectorType.ValueProviderObject)] public class ObjectProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs index 9a0635e..efc33e2 100644 --- a/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/QuaternionProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Quaternion", (int) ConnectorType.ValueProviderQuaternion)] + [AddComponentMenu("UniFlow/ValueProvider/QuaternionProvider", (int) ConnectorType.ValueProviderQuaternion)] public class QuaternionProvider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private FloatCollector xCollector = new FloatCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs index f6c6bf4..d53b4e3 100644 --- a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatform", (int) ConnectorType.ValueProviderRuntimePlatform)] + [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatformProvider", (int) ConnectorType.ValueProviderRuntimePlatform)] public class RuntimePlatformProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs index 7e88b67..302d4ea 100644 --- a/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/ScriptableObjectProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/ScriptableObject", (int) ConnectorType.ValueProviderScriptableObject)] + [AddComponentMenu("UniFlow/ValueProvider/ScriptableObjectProvider", (int) ConnectorType.ValueProviderScriptableObject)] public class ScriptableObjectProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs index 7c22308..4306dd4 100644 --- a/Assets/Scripts/Connector/ValueProvider/StringProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/StringProvider.cs @@ -2,7 +2,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/String", (int) ConnectorType.ValueProviderString)] + [AddComponentMenu("UniFlow/ValueProvider/StringProvider", (int) ConnectorType.ValueProviderString)] public class StringProvider : ProviderBase { } diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs index 73773c2..72da8bf 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2IntProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Vector2Int", (int) ConnectorType.ValueProviderVector2Int)] + [AddComponentMenu("UniFlow/ValueProvider/Vector2IntProvider", (int) ConnectorType.ValueProviderVector2Int)] public class Vector2IntProvider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private IntCollector xCollector = new IntCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs index bf4747d..89cd2f1 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector2Provider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Vector2", (int) ConnectorType.ValueProviderVector2)] + [AddComponentMenu("UniFlow/ValueProvider/Vector2Provider", (int) ConnectorType.ValueProviderVector2)] public class Vector2Provider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private FloatCollector xCollector = new FloatCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs index 8b12947..0690bf6 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3IntProvider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Vector3Int", (int) ConnectorType.ValueProviderVector3Int)] + [AddComponentMenu("UniFlow/ValueProvider/Vector3IntProvider", (int) ConnectorType.ValueProviderVector3Int)] public class Vector3IntProvider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private IntCollector xCollector = new IntCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs index ed20783..5d36dd7 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector3Provider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Vector3", (int) ConnectorType.ValueProviderVector3)] + [AddComponentMenu("UniFlow/ValueProvider/Vector3Provider", (int) ConnectorType.ValueProviderVector3)] public class Vector3Provider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private FloatCollector xCollector = new FloatCollector(); diff --git a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs index e0afa4e..9a49144 100644 --- a/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs +++ b/Assets/Scripts/Connector/ValueProvider/Vector4Provider.cs @@ -3,7 +3,7 @@ namespace UniFlow.Connector.ValueProvider { - [AddComponentMenu("UniFlow/ValueProvider/Vector4", (int) ConnectorType.ValueProviderVector4)] + [AddComponentMenu("UniFlow/ValueProvider/Vector4Provider", (int) ConnectorType.ValueProviderVector4)] public class Vector4Provider : ProviderBase, IMessageCollectable, IMessageComposable { [SerializeField] private FloatCollector xCollector = new FloatCollector(); From c7a45304296f5ad7b3436225672c92f762d8e28a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:53:27 +0900 Subject: [PATCH 394/453] :name_badge::truck: Rename and move calculation connectors --- Assets/Editor/Scripts/SearchWindowProvider.cs | 1 + Assets/Scripts/Connector/Calculator.meta | 3 + .../Connector/Calculator/BoolCalculator.cs | 18 +++ .../BoolCalculator.cs.meta} | 0 .../Connector/Calculator/CalculatorBase.cs | 137 ++++++++++++++++++ .../CalculatorBase.cs.meta | 0 .../Connector/Calculator/FloatExpression.cs | 33 +++++ .../FloatExpression.cs.meta} | 0 .../Connector/Calculator/IntCalculator.cs | 33 +++++ .../IntCalculator.cs.meta} | 0 .../Connector/Calculator/StringExpression.cs | 13 ++ .../StringExpression.cs.meta} | 0 Assets/Scripts/Connector/Expression/Bool.cs | 18 --- .../Connector/Expression/CalculatorBase.cs | 105 -------------- Assets/Scripts/Connector/Expression/Float.cs | 33 ----- Assets/Scripts/Connector/Expression/Int.cs | 33 ----- Assets/Scripts/Connector/Expression/String.cs | 13 -- Assets/Scripts/ConnectorType.cs | 9 +- 18 files changed, 243 insertions(+), 206 deletions(-) create mode 100644 Assets/Scripts/Connector/Calculator.meta create mode 100644 Assets/Scripts/Connector/Calculator/BoolCalculator.cs rename Assets/Scripts/Connector/{Expression/Bool.cs.meta => Calculator/BoolCalculator.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/Calculator/CalculatorBase.cs rename Assets/Scripts/Connector/{Expression => Calculator}/CalculatorBase.cs.meta (100%) create mode 100644 Assets/Scripts/Connector/Calculator/FloatExpression.cs rename Assets/Scripts/Connector/{Expression/Float.cs.meta => Calculator/FloatExpression.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/Calculator/IntCalculator.cs rename Assets/Scripts/Connector/{Expression/Int.cs.meta => Calculator/IntCalculator.cs.meta} (100%) create mode 100644 Assets/Scripts/Connector/Calculator/StringExpression.cs rename Assets/Scripts/Connector/{Expression/String.cs.meta => Calculator/StringExpression.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/Expression/Bool.cs delete mode 100644 Assets/Scripts/Connector/Expression/CalculatorBase.cs delete mode 100644 Assets/Scripts/Connector/Expression/Float.cs delete mode 100644 Assets/Scripts/Connector/Expression/Int.cs delete mode 100644 Assets/Scripts/Connector/Expression/String.cs diff --git a/Assets/Editor/Scripts/SearchWindowProvider.cs b/Assets/Editor/Scripts/SearchWindowProvider.cs index 2505bf4..1d3e195 100644 --- a/Assets/Editor/Scripts/SearchWindowProvider.cs +++ b/Assets/Editor/Scripts/SearchWindowProvider.cs @@ -24,6 +24,7 @@ public class SearchWindowProvider : ScriptableObject, ISearchWindowProvider "Controller", "Event", "Logic", + "Calculator", "Expression", "Receiver", "Complex", diff --git a/Assets/Scripts/Connector/Calculator.meta b/Assets/Scripts/Connector/Calculator.meta new file mode 100644 index 0000000..5ddf92c --- /dev/null +++ b/Assets/Scripts/Connector/Calculator.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3ba20cdd49d441f7914f0266d022cfea +timeCreated: 1572524989 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Calculator/BoolCalculator.cs b/Assets/Scripts/Connector/Calculator/BoolCalculator.cs new file mode 100644 index 0000000..f0f0b36 --- /dev/null +++ b/Assets/Scripts/Connector/Calculator/BoolCalculator.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace UniFlow.Connector.Calculator +{ + [AddComponentMenu("UniFlow/Calculator/BoolCalculator", (int) ConnectorType.BoolCalculator)] + public class BoolCalculator : CalculatorBase, IAdditionCalculator, IMultiplicationCalculator + { + bool IAdditionCalculator.Add(bool left, bool right) + { + return left | right; + } + + bool IMultiplicationCalculator.Multiply(bool left, bool right) + { + return left & right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Bool.cs.meta b/Assets/Scripts/Connector/Calculator/BoolCalculator.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Expression/Bool.cs.meta rename to Assets/Scripts/Connector/Calculator/BoolCalculator.cs.meta diff --git a/Assets/Scripts/Connector/Calculator/CalculatorBase.cs b/Assets/Scripts/Connector/Calculator/CalculatorBase.cs new file mode 100644 index 0000000..6b9b64f --- /dev/null +++ b/Assets/Scripts/Connector/Calculator/CalculatorBase.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using UniFlow.Utility; +using UnityEngine; + +namespace UniFlow.Connector.Calculator +{ + public abstract class CalculatorBase : CalculatorBase + where TValueCollector : ValueCollectorBase, new() + { + + } + + public abstract class CalculatorBase : ConnectorBase, IMessageCollectable, IMessageComposable + where TLeftValueCollector : ValueCollectorBase, new() + where TRightValueCollector : ValueCollectorBase, new() + { + [SerializeField] private TLeftValue left = default; + [SerializeField] private TRightValue right = default; + [SerializeField] private OperatorType operatorType = default; + private TLeftValue Left + { + get => left; + set => left = value; + } + private TRightValue Right + { + get => right; + set => right = value; + } + private OperatorType OperatorType => operatorType; + + [SerializeField] private TLeftValueCollector leftCollector = new TLeftValueCollector(); + [SerializeField] private TRightValueCollector rightCollector = new TRightValueCollector(); + private TLeftValueCollector LeftCollector => leftCollector; + private TRightValueCollector RightCollector => rightCollector; + + public override IObservable OnConnectAsObservable() + { + return ObservableFactory.ReturnMessage(this, "Result", Calculate()); + } + + private TLeftValue Calculate() + { + switch (OperatorType) + { + case OperatorType.Add when this is IAdditionCalculator calculator: + return calculator.Add(Left, Right); + case OperatorType.Sub when this is ISubtractionCalculator calculator: + return calculator.Subtract(Left, Right); + case OperatorType.Mul when this is IMultiplicationCalculator calculator: + return calculator.Multiply(Left, Right); + case OperatorType.Div when this is IDivisionCalculator calculator: + return calculator.Divide(Left, Right); + case OperatorType.Mod when this is IModulationCalculator calculator: + return calculator.Modulo(Left, Right); + default: + throw new ArgumentOutOfRangeException(); + } + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(LeftCollector, x => Left = x, nameof(Left)), + CollectableMessageAnnotationFactory.Create(RightCollector, x => Right = x, nameof(Right)), + }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create("Result"), + }; + } + + public interface IAdditionCalculator : IAdditionCalculator + { + } + + public interface IAdditionCalculator + { + TLeftValue Add(TLeftValue left, TRightValue right); + } + + public interface ISubtractionCalculator : ISubtractionCalculator + { + } + + public interface ISubtractionCalculator + { + TLeftValue Subtract(TLeftValue left, TRightValue right); + } + + public interface IMultiplicationCalculator : IMultiplicationCalculator + { + } + + public interface IMultiplicationCalculator + { + TLeftValue Multiply(TLeftValue left, TRightValue right); + } + + public interface IDivisionCalculator : IDivisionCalculator + { + } + + public interface IDivisionCalculator + { + TLeftValue Divide(TLeftValue left, TRightValue right); + } + + public interface IModulationCalculator : IModulationCalculator + { + } + + public interface IModulationCalculator + { + TLeftValue Modulo(TLeftValue left, TRightValue right); + } + + public interface IFourArithmeticCalculator : IFourArithmeticCalculator + { + } + + public interface IFourArithmeticCalculator : IAdditionCalculator, ISubtractionCalculator, IMultiplicationCalculator, IDivisionCalculator + { + } + + public enum OperatorType + { + Add, + Sub, + Mul, + Div, + Mod, + } +} diff --git a/Assets/Scripts/Connector/Expression/CalculatorBase.cs.meta b/Assets/Scripts/Connector/Calculator/CalculatorBase.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Expression/CalculatorBase.cs.meta rename to Assets/Scripts/Connector/Calculator/CalculatorBase.cs.meta diff --git a/Assets/Scripts/Connector/Calculator/FloatExpression.cs b/Assets/Scripts/Connector/Calculator/FloatExpression.cs new file mode 100644 index 0000000..6c35853 --- /dev/null +++ b/Assets/Scripts/Connector/Calculator/FloatExpression.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace UniFlow.Connector.Calculator +{ + [AddComponentMenu("UniFlow/Calculator/FloatCalculator", (int) ConnectorType.FloatCalculator)] + public class FloatCalculator : CalculatorBase, IFourArithmeticCalculator, IModulationCalculator + { + float IAdditionCalculator.Add(float left, float right) + { + return left + right; + } + + float ISubtractionCalculator.Subtract(float left, float right) + { + return left - right; + } + + float IMultiplicationCalculator.Multiply(float left, float right) + { + return left * right; + } + + float IDivisionCalculator.Divide(float left, float right) + { + return left / right; + } + + float IModulationCalculator.Modulo(float left, float right) + { + return left % right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Float.cs.meta b/Assets/Scripts/Connector/Calculator/FloatExpression.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Expression/Float.cs.meta rename to Assets/Scripts/Connector/Calculator/FloatExpression.cs.meta diff --git a/Assets/Scripts/Connector/Calculator/IntCalculator.cs b/Assets/Scripts/Connector/Calculator/IntCalculator.cs new file mode 100644 index 0000000..b30decf --- /dev/null +++ b/Assets/Scripts/Connector/Calculator/IntCalculator.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace UniFlow.Connector.Calculator +{ + [AddComponentMenu("UniFlow/Calculator/IntCalculator", (int) ConnectorType.IntCalculator)] + public class IntCalculator : CalculatorBase, IFourArithmeticCalculator, IModulationCalculator + { + int IAdditionCalculator.Add(int left, int right) + { + return left + right; + } + + int ISubtractionCalculator.Subtract(int left, int right) + { + return left - right; + } + + int IMultiplicationCalculator.Multiply(int left, int right) + { + return left * right; + } + + int IDivisionCalculator.Divide(int left, int right) + { + return left / right; + } + + int IModulationCalculator.Modulo(int left, int right) + { + return left % right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/Int.cs.meta b/Assets/Scripts/Connector/Calculator/IntCalculator.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Expression/Int.cs.meta rename to Assets/Scripts/Connector/Calculator/IntCalculator.cs.meta diff --git a/Assets/Scripts/Connector/Calculator/StringExpression.cs b/Assets/Scripts/Connector/Calculator/StringExpression.cs new file mode 100644 index 0000000..90867aa --- /dev/null +++ b/Assets/Scripts/Connector/Calculator/StringExpression.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UniFlow.Connector.Calculator +{ + [AddComponentMenu("UniFlow/Calculator/StringCalculator", (int) ConnectorType.StringCalculator)] + public class StringCalculator : CalculatorBase, IAdditionCalculator + { + string IAdditionCalculator.Add(string left, string right) + { + return left + right; + } + } +} diff --git a/Assets/Scripts/Connector/Expression/String.cs.meta b/Assets/Scripts/Connector/Calculator/StringExpression.cs.meta similarity index 100% rename from Assets/Scripts/Connector/Expression/String.cs.meta rename to Assets/Scripts/Connector/Calculator/StringExpression.cs.meta diff --git a/Assets/Scripts/Connector/Expression/Bool.cs b/Assets/Scripts/Connector/Expression/Bool.cs deleted file mode 100644 index d2a56fa..0000000 --- a/Assets/Scripts/Connector/Expression/Bool.cs +++ /dev/null @@ -1,18 +0,0 @@ -using UnityEngine; - -namespace UniFlow.Connector.Expression -{ - [AddComponentMenu("UniFlow/Expression/Bool", (int) ConnectorType.ExpressionBool)] - public class Bool : CalculatorBase, IAdditionCalculator, IMultiplicationCalculator - { - bool IAdditionCalculator.Add(bool left, bool right) - { - return left | right; - } - - bool IMultiplicationCalculator.Multiply(bool left, bool right) - { - return left & right; - } - } -} diff --git a/Assets/Scripts/Connector/Expression/CalculatorBase.cs b/Assets/Scripts/Connector/Expression/CalculatorBase.cs deleted file mode 100644 index 98596af..0000000 --- a/Assets/Scripts/Connector/Expression/CalculatorBase.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using UniFlow.Utility; -using UnityEngine; - -namespace UniFlow.Connector.Expression -{ - public class CalculatorBase : ConnectorBase, IMessageCollectable, IMessageComposable where TValueCollector : ValueCollectorBase, new() - { - [SerializeField] private TValue left = default; - [SerializeField] private TValue right = default; - [SerializeField] private OperatorType operatorType = default; - private TValue Left - { - get => left; - set => left = value; - } - private TValue Right - { - get => right; - set => right = value; - } - private OperatorType OperatorType => operatorType; - - [SerializeField] private TValueCollector leftCollector = new TValueCollector(); - [SerializeField] private TValueCollector rightCollector = new TValueCollector(); - private TValueCollector LeftCollector => leftCollector; - private TValueCollector RightCollector => rightCollector; - - public override IObservable OnConnectAsObservable() - { - return ObservableFactory.ReturnMessage(this, "Result", Calculate()); - } - - private TValue Calculate() - { - switch (OperatorType) - { - case OperatorType.Add when this is IAdditionCalculator calculator: - return calculator.Add(Left, Right); - case OperatorType.Sub when this is ISubtractionCalculator calculator: - return calculator.Subtract(Left, Right); - case OperatorType.Mul when this is IMultiplicationCalculator calculator: - return calculator.Multiply(Left, Right); - case OperatorType.Div when this is IDivisionCalculator calculator: - return calculator.Divide(Left, Right); - case OperatorType.Mod when this is IModulationCalculator calculator: - return calculator.Modulo(Left, Right); - default: - throw new ArgumentOutOfRangeException(); - } - } - - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new[] - { - CollectableMessageAnnotationFactory.Create(LeftCollector, x => Left = x, nameof(Left)), - CollectableMessageAnnotationFactory.Create(RightCollector, x => Right = x, nameof(Right)), - }; - - IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new[] - { - ComposableMessageAnnotationFactory.Create("Result"), - }; - } - - public interface IAdditionCalculator - { - TValue Add(TValue left, TValue right); - } - - public interface ISubtractionCalculator - { - TValue Subtract(TValue left, TValue right); - } - - public interface IMultiplicationCalculator - { - TValue Multiply(TValue left, TValue right); - } - - public interface IDivisionCalculator - { - TValue Divide(TValue left, TValue right); - } - - public interface IModulationCalculator - { - TValue Modulo(TValue left, TValue right); - } - - public interface IFourArithmeticCalculator : IAdditionCalculator, ISubtractionCalculator, IMultiplicationCalculator, IDivisionCalculator - { - } - - public enum OperatorType - { - Add, - Sub, - Mul, - Div, - Mod, - } -} diff --git a/Assets/Scripts/Connector/Expression/Float.cs b/Assets/Scripts/Connector/Expression/Float.cs deleted file mode 100644 index cdc43b1..0000000 --- a/Assets/Scripts/Connector/Expression/Float.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; - -namespace UniFlow.Connector.Expression -{ - [AddComponentMenu("UniFlow/Expression/Float", (int) ConnectorType.ExpressionFloat)] - public class Float : CalculatorBase, IFourArithmeticCalculator, IModulationCalculator - { - float IAdditionCalculator.Add(float left, float right) - { - return left + right; - } - - float ISubtractionCalculator.Subtract(float left, float right) - { - return left - right; - } - - float IMultiplicationCalculator.Multiply(float left, float right) - { - return left * right; - } - - float IDivisionCalculator.Divide(float left, float right) - { - return left / right; - } - - float IModulationCalculator.Modulo(float left, float right) - { - return left % right; - } - } -} diff --git a/Assets/Scripts/Connector/Expression/Int.cs b/Assets/Scripts/Connector/Expression/Int.cs deleted file mode 100644 index 0e3a3d7..0000000 --- a/Assets/Scripts/Connector/Expression/Int.cs +++ /dev/null @@ -1,33 +0,0 @@ -using UnityEngine; - -namespace UniFlow.Connector.Expression -{ - [AddComponentMenu("UniFlow/Expression/Int", (int) ConnectorType.ExpressionInt)] - public class Int : CalculatorBase, IFourArithmeticCalculator, IModulationCalculator - { - int IAdditionCalculator.Add(int left, int right) - { - return left + right; - } - - int ISubtractionCalculator.Subtract(int left, int right) - { - return left - right; - } - - int IMultiplicationCalculator.Multiply(int left, int right) - { - return left * right; - } - - int IDivisionCalculator.Divide(int left, int right) - { - return left / right; - } - - int IModulationCalculator.Modulo(int left, int right) - { - return left % right; - } - } -} diff --git a/Assets/Scripts/Connector/Expression/String.cs b/Assets/Scripts/Connector/Expression/String.cs deleted file mode 100644 index 8a0670e..0000000 --- a/Assets/Scripts/Connector/Expression/String.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; - -namespace UniFlow.Connector.Expression -{ - [AddComponentMenu("UniFlow/Expression/String", (int) ConnectorType.ExpressionString)] - public class String : CalculatorBase, IAdditionCalculator - { - string IAdditionCalculator.Add(string left, string right) - { - return left + right; - } - } -} diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index dcdbd8f..3445bce 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -128,10 +128,11 @@ public enum ConnectorType Or, Xor, Not, - ExpressionBool, - ExpressionInt, - ExpressionFloat, - ExpressionString, + + BoolCalculator = 8500, + IntCalculator, + FloatCalculator, + StringCalculator, Timer = 9000, TimerFrame, From 5280d261f739ee51f8651d9d8ba4444bf49fa4dc Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:56:12 +0900 Subject: [PATCH 395/453] :sparkles: Implement pitch control for BGM --- .../Connector/Complex/MusicPitchController.cs | 60 +++++++++++++++++++ .../Complex/MusicPitchController.cs.meta | 3 + .../MusicPitchSignalPublisher.cs | 40 +++++++++++++ .../MusicPitchSignalPublisher.cs.meta | 3 + .../MusicPitchSignalReceiver.cs | 24 ++++++++ .../MusicPitchSignalReceiver.cs.meta | 3 + Assets/Scripts/Signal/MusicPitchSignal.cs | 17 ++++++ .../Scripts/Signal/MusicPitchSignal.cs.meta | 3 + 8 files changed, 153 insertions(+) create mode 100644 Assets/Scripts/Connector/Complex/MusicPitchController.cs create mode 100644 Assets/Scripts/Connector/Complex/MusicPitchController.cs.meta create mode 100644 Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs create mode 100644 Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs.meta create mode 100644 Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs create mode 100644 Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs.meta create mode 100644 Assets/Scripts/Signal/MusicPitchSignal.cs create mode 100644 Assets/Scripts/Signal/MusicPitchSignal.cs.meta diff --git a/Assets/Scripts/Connector/Complex/MusicPitchController.cs b/Assets/Scripts/Connector/Complex/MusicPitchController.cs new file mode 100644 index 0000000..25e3bd6 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/MusicPitchController.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using UniFlow; +using UniRx; +using UnityEngine; + +namespace PretendLand.Edwin.Scripts.Connector.Complex +{ + [AddComponentMenu("UniFlow/Complex/MusicPitchController", (int) ConnectorType.MusicPitchController)] + public class MusicPitchController : ConnectorBase, IMessageCollectable + { + [SerializeField] private AudioSource audioSource = default; + [SerializeField] private float pitch = default; + [SerializeField] private float duration = default; + + private AudioSource AudioSource + { + get => audioSource != default ? audioSource : audioSource = MusicPlayer.BaseGameObject.GetOrAddComponent(); + set => audioSource = value; + } + private float Pitch + { + get => pitch; + set => pitch = value; + } + private float Duration + { + get => duration; + set => duration = value; + } + + [SerializeField] private AudioSourceCollector audioSourceCollector = new AudioSourceCollector(); + [SerializeField] private FloatCollector pitchCollector = new FloatCollector(); + [SerializeField] private FloatCollector durationCollector = new FloatCollector(); + + private AudioSourceCollector AudioSourceCollector => audioSourceCollector; + private FloatCollector PitchCollector => pitchCollector; + private FloatCollector DurationCollector => durationCollector; + + public override IObservable OnConnectAsObservable() + { + var subject = new Subject(); + ObservableTween + .Tween(() => AudioSource.pitch, () => Pitch, Duration, ObservableTween.EaseType.InOutSinusoidal) + .Subscribe( + x => AudioSource.pitch = x, + () => subject.OnNext(Unit.Default) + ); + return subject.AsMessageObservable(this); + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(AudioSourceCollector, x => AudioSource = x), + CollectableMessageAnnotationFactory.Create(PitchCollector, x => Pitch = x, nameof(Pitch)), + CollectableMessageAnnotationFactory.Create(DurationCollector, x => Duration = x, nameof(Duration)), + }; + } +} diff --git a/Assets/Scripts/Connector/Complex/MusicPitchController.cs.meta b/Assets/Scripts/Connector/Complex/MusicPitchController.cs.meta new file mode 100644 index 0000000..c2df981 --- /dev/null +++ b/Assets/Scripts/Connector/Complex/MusicPitchController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 12cf2a93a77a4017a659c453c2efbd96 +timeCreated: 1572509181 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs b/Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs new file mode 100644 index 0000000..a913ed6 --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalPublisher +{ + [AddComponentMenu("UniFlow/SignalPublisher/MusicPitchSignalPublisher", (int) ConnectorType.MusicPitchSignalPublisher)] + public class MusicPitchSignalPublisher : SignalPublisherBase, IMessageCollectable + { + [SerializeField] private float pitch = default; + [SerializeField] private float duration = default; + + private float Pitch + { + get => pitch; + set => pitch = value; + } + private float Duration + { + get => duration; + set => duration = value; + } + + [SerializeField] private FloatCollector pitchCollector = new FloatCollector(); + [SerializeField] private FloatCollector durationCollector = new FloatCollector(); + + private FloatCollector PitchCollector => pitchCollector; + private FloatCollector DurationCollector => durationCollector; + + protected override MusicPitchSignal GetSignal() => + MusicPitchSignal.Create(Pitch, Duration); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(PitchCollector, x => Pitch = x, nameof(Pitch)), + CollectableMessageAnnotationFactory.Create(DurationCollector, x => Duration = x, nameof(Duration)), + }; + } +} diff --git a/Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs.meta b/Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs.meta new file mode 100644 index 0000000..43c118c --- /dev/null +++ b/Assets/Scripts/Connector/SignalPublisher/MusicPitchSignalPublisher.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2e77cd52cefb4b8ba2c36e99f31fec94 +timeCreated: 1572509301 \ No newline at end of file diff --git a/Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs b/Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs new file mode 100644 index 0000000..abef868 --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Linq; +using UniFlow.Signal; +using UnityEngine; + +namespace UniFlow.Connector.SignalReceiver +{ + [AddComponentMenu("UniFlow/SignalReceiver/MusicPitchSignalReceiver", (int) ConnectorType.MusicPitchSignalReceiver)] + public class MusicPitchSignalReceiver : SignalReceiverBase + { + protected override MusicPitchSignal GetSignal() => + MusicPitchSignal.Create(); + + public override IEnumerable GetMessageComposableAnnotations() => + base.GetMessageComposableAnnotations() + .Concat( + new[] + { + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Pitch, nameof(ReceivedSignal.Pitch)), + ComposableMessageAnnotationFactory.Create(() => ReceivedSignal.Duration, nameof(ReceivedSignal.Duration)), + } + ); + } +} diff --git a/Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs.meta b/Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs.meta new file mode 100644 index 0000000..4de3b3b --- /dev/null +++ b/Assets/Scripts/Connector/SignalReceiver/MusicPitchSignalReceiver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 558f9d051a1f41f091d3695ea95e3ed0 +timeCreated: 1572509379 \ No newline at end of file diff --git a/Assets/Scripts/Signal/MusicPitchSignal.cs b/Assets/Scripts/Signal/MusicPitchSignal.cs new file mode 100644 index 0000000..6f45440 --- /dev/null +++ b/Assets/Scripts/Signal/MusicPitchSignal.cs @@ -0,0 +1,17 @@ +namespace UniFlow.Signal +{ + public class MusicPitchSignal : SignalBase + { + public float Pitch { get; private set; } + public float Duration { get; private set; } + + public static MusicPitchSignal Create(float volume, float duration) + { + return new MusicPitchSignal + { + Pitch = volume, + Duration = duration, + }; + } + } +} diff --git a/Assets/Scripts/Signal/MusicPitchSignal.cs.meta b/Assets/Scripts/Signal/MusicPitchSignal.cs.meta new file mode 100644 index 0000000..09b502f --- /dev/null +++ b/Assets/Scripts/Signal/MusicPitchSignal.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 308f441149124b41ac5c2a7ee568e698 +timeCreated: 1572509130 \ No newline at end of file From 733c2100836d2fe77b7bfd5acd2991f8e334c3a4 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:56:39 +0900 Subject: [PATCH 396/453] :clipboard: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index 3445bce..b18c7af 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -106,6 +106,7 @@ public enum ConnectorType MusicPlayer = 4000, MusicDuckingController, + MusicPitchController, NumberImageRenderer, GaugeImageRenderer, ProgressiveTimer, @@ -116,6 +117,7 @@ public enum ConnectorType HandleEventSignalPublisher, MusicControlSignalPublisher, MusicDuckingSignalPublisher, + MusicPitchSignalPublisher, SignalReceiver = 6500, StringSignalReceiver, @@ -123,6 +125,7 @@ public enum ConnectorType HandleEventSignalReceiver, MusicControlSignalReceiver, MusicDuckingSignalReceiver, + MusicPitchSignalReceiver, And = 8000, Or, From c67d8cdd9ae6a331bdb9e7e05d0222672ec2182b Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:57:40 +0900 Subject: [PATCH 397/453] :beetle: Avoid KeyNotFoundException --- Assets/Editor/Scripts/FlowGraphView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Editor/Scripts/FlowGraphView.cs b/Assets/Editor/Scripts/FlowGraphView.cs index dc6fa18..1bbfe6f 100644 --- a/Assets/Editor/Scripts/FlowGraphView.cs +++ b/Assets/Editor/Scripts/FlowGraphView.cs @@ -327,7 +327,7 @@ private void CreateMessageConnectorEdges() .ToArray(); foreach (var valueCollector in valueCollectors) { - if (!(valueCollector?.SourceConnector is IMessageComposable) || !RenderedNodes.ContainsKey(valueCollector.SourceConnector) || !(connector is IMessageCollectable)) + if (!(valueCollector?.SourceConnector is IMessageComposable) || !RenderedNodes.ContainsKey(connector) || !RenderedNodes.ContainsKey(valueCollector.SourceConnector) || !(connector is IMessageCollectable)) { continue; } From 31cd104c42f5318e8669217b210674b6d3b71350 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:58:00 +0900 Subject: [PATCH 398/453] :sparkles: Re-register TimelineSignal when some value collected --- .../Scripts/Connector/Event/TimelineEvent.cs | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/Connector/Event/TimelineEvent.cs b/Assets/Scripts/Connector/Event/TimelineEvent.cs index 71f2780..042da12 100644 --- a/Assets/Scripts/Connector/Event/TimelineEvent.cs +++ b/Assets/Scripts/Connector/Event/TimelineEvent.cs @@ -22,29 +22,56 @@ public class TimelineEvent : ConnectorBase, IBaseGameObjectSpecifyable, IMessage public GameObject BaseGameObject { get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; - private set => baseGameObject = value; + private set + { + baseGameObject = value; + transformPath = default; + playableDirector = default; + timelineAsset = default; + // Try to re-register when TimelineAsset may change + // Note: Marker is ignored if Playable has already been played, so a hack such as delaying playback by 1 frame is required + RegisterSignal(); + } } + public string TransformPath { get => transformPath; - private set => transformPath = value; + private set + { + transformPath = value; + playableDirector = default; + timelineAsset = default; + // Try to re-register when TimelineAsset may change + // Note: Marker is ignored if Playable has already been played, so a hack such as delaying playback by 1 frame is required + RegisterSignal(); + } } + private PlayableDirector PlayableDirector { - get => - playableDirector != default - ? playableDirector - : playableDirector = - BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() != default - ? BaseGameObject.transform.Find(TransformPath).gameObject.GetComponent() - : BaseGameObject.transform.Find(TransformPath).gameObject.AddComponent(); - set => playableDirector = value; + get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); + set + { + playableDirector = value; + timelineAsset = default; + // Try to re-register when TimelineAsset may change + // Note: Marker is ignored if Playable has already been played, so a hack such as delaying playback by 1 frame is required + RegisterSignal(); + } } + private TimelineEventType TimelineEventType => timelineEventType; private TimelineAsset TimelineAsset { - get => timelineAsset; - set => timelineAsset = value; + get => timelineAsset != default ? timelineAsset : PlayableDirector.playableAsset as TimelineAsset; + set + { + timelineAsset = value; + // Try to re-register when TimelineAsset may change + // Note: Marker is ignored if Playable has already been played, so a hack such as delaying playback by 1 frame is required + RegisterSignal(); + } } [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); @@ -117,7 +144,7 @@ public override IObservable OnConnectAsObservable() private void RegisterSignal() { - if (!(PlayableDirector.playableAsset is TimelineAsset timeline)) + if (!(TimelineAsset is TimelineAsset timeline)) { return; } From 73d05d600a68d171c16514daa2c32b01961fc2f0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:58:32 +0900 Subject: [PATCH 399/453] :sparkles: Send BaseEventData from UIBehaviourEventTrigger --- .../Scripts/Connector/Event/UIBehaviourEventTrigger.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index 0bdd055..e71bfa3 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -9,7 +9,7 @@ namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/UIBehaviourEventTrigger", (int) ConnectorType.UIBehaviourEventTrigger)] - public class UIBehaviourEventTrigger : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable + public class UIBehaviourEventTrigger : ConnectorBase, IBaseGameObjectSpecifyable, IMessageCollectable, IMessageComposable { [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; @@ -83,7 +83,7 @@ public override IObservable OnConnectAsObservable() } } ) - .AsMessageObservable(this); + .AsMessageObservable(this, "EventData"); } private IObservable OnEventTriggerAsObservable() @@ -143,5 +143,11 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotationFactory.Create(ActivateBeforeConnectCollector, x => ActivateBeforeConnect = x, nameof(ActivateBeforeConnect)), CollectableMessageAnnotationFactory.Create(DeactivateAfterConnectCollector, x => DeactivateAfterConnect = x, nameof(DeactivateAfterConnect)), }; + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create(null, "EventData"), + }; } } From b900e78ddca1be813a6757081b62e624b4c24c7c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:58:52 +0900 Subject: [PATCH 400/453] :beetle: Send current count correctly --- Assets/Scripts/Connector/Logic/Counter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/Logic/Counter.cs b/Assets/Scripts/Connector/Logic/Counter.cs index a1850e0..0293540 100644 --- a/Assets/Scripts/Connector/Logic/Counter.cs +++ b/Assets/Scripts/Connector/Logic/Counter.cs @@ -28,7 +28,7 @@ IEnumerable IMessageCollectable.GetMessageCollect IEnumerable IMessageComposable.GetMessageComposableAnnotations() => new[] { - ComposableMessageAnnotationFactory.Create("Count"), + ComposableMessageAnnotationFactory.Create(() => CounterProperty.Value, "Count"), }; } } From cf6d397bd09f8c8c7537eac4f2f07bf414433097 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 03:59:29 +0900 Subject: [PATCH 401/453] :sparkles: Tweak SelectorBase to allow override Keys property --- .../Connector/ValueProvider/SelectorBase.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs index 5e599d2..131c61a 100644 --- a/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/SelectorBase.cs @@ -17,8 +17,8 @@ public abstract class SelectorBase : ConnectorBase, [SerializeField] private List keys = new List(); [SerializeField] private List values = new List(); - protected virtual IList Keys => keys; - protected virtual IEnumerable Values => values; + protected IList Keys => keys != default && keys.Any() ? keys : keys = GetKeys().ToList(); + protected IEnumerable Values => values != default && values.Any() ? values : values = GetValues().ToList(); private TKey Key { get; set; } @@ -30,6 +30,16 @@ public override IObservable OnConnectAsObservable() return Observable.Return(this.CreateMessage()); } + protected virtual IEnumerable GetKeys() + { + return keys; + } + + protected virtual IEnumerable GetValues() + { + return values; + } + protected virtual TValue FindValue(TKey key) { return Keys.Contains(key) && Values.Count() > Keys.IndexOf(key) ? Values.ElementAt(Keys.IndexOf(key)) : default; @@ -50,7 +60,10 @@ IEnumerable IMessageComposable.GetMessageComposabl public abstract class ListSelectorBase : SelectorBase { - protected override IList Keys => Enumerable.Range(0, Values.Count()).ToList(); + protected override IEnumerable GetKeys() + { + return Enumerable.Range(0, Values.Count()); + } } public abstract class GameObjectSelectorBase : SelectorBase where TKeyCollector : ValueCollectorBase, new() From 22df1e6fed8c51a629dff348537cc2f1bbc17d66 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 04:00:03 +0900 Subject: [PATCH 402/453] :beetle: Add DeclareUniFlowSignal for MusicPitchSignal --- Assets/Scripts/Installer/UniFlowInstaller.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Scripts/Installer/UniFlowInstaller.cs b/Assets/Scripts/Installer/UniFlowInstaller.cs index 35f815c..f981567 100644 --- a/Assets/Scripts/Installer/UniFlowInstaller.cs +++ b/Assets/Scripts/Installer/UniFlowInstaller.cs @@ -16,6 +16,7 @@ public override void InstallBindings() Container.DeclareUniFlowSignal(); Container.DeclareUniFlowSignal(); Container.DeclareUniFlowSignal(); + Container.DeclareUniFlowSignal(); } [UsedImplicitly] @@ -26,6 +27,7 @@ private void AOTWorkaround() new SignalHandler(); new SignalHandler(); new SignalHandler(); + new SignalHandler(); } } } From 4124b5f9353cac624fe9512dc1a4ef52ce68c0d0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 04:00:26 +0900 Subject: [PATCH 403/453] :sparkles: Add EventDataCollector --- Assets/Scripts/ValueCollectors.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Assets/Scripts/ValueCollectors.cs b/Assets/Scripts/ValueCollectors.cs index 4837ad0..f63a1a9 100644 --- a/Assets/Scripts/ValueCollectors.cs +++ b/Assets/Scripts/ValueCollectors.cs @@ -244,6 +244,20 @@ public class EaseTypeCollector : ValueCollectorBase #endregion +#region EventData + + [Serializable] + public class PointerEventDataCollector : ValueCollectorBase + { + } + + [Serializable] + public class BaseEventDataCollector : ValueCollectorBase + { + } + +#endregion + #region IObservable [Serializable] From fa0f5bae322bf324080a725ea65c9e6310aae93a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Fri, 1 Nov 2019 04:03:13 +0900 Subject: [PATCH 404/453] :up: Bump up version to v0.1.0-preview.35 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 5943492..38ea5a8 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.34.1", + "version": "0.1.0-preview.35", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From c9558685954973532eb93c9cf53cfb178069756c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 3 Nov 2019 17:28:40 +0900 Subject: [PATCH 405/453] :sparkles: Expose ComparableValue in SignalBase --- Assets/Scripts/Signal/EnumSignalBase.cs | 2 +- Assets/Scripts/Signal/HandleEventSignal.cs | 2 +- Assets/Scripts/Signal/SignalBase.cs | 2 +- Assets/Scripts/Signal/StringSignal.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/Signal/EnumSignalBase.cs b/Assets/Scripts/Signal/EnumSignalBase.cs index ed06a86..fa5e9d5 100644 --- a/Assets/Scripts/Signal/EnumSignalBase.cs +++ b/Assets/Scripts/Signal/EnumSignalBase.cs @@ -12,7 +12,7 @@ public abstract class EnumSignalBase : SignalBase enumValue; set => enumValue = value; diff --git a/Assets/Scripts/Signal/HandleEventSignal.cs b/Assets/Scripts/Signal/HandleEventSignal.cs index d8c964f..e5b48b7 100644 --- a/Assets/Scripts/Signal/HandleEventSignal.cs +++ b/Assets/Scripts/Signal/HandleEventSignal.cs @@ -8,7 +8,7 @@ public class HandleEventSignal : SignalBase { public HandleEventType HandleEventType { get; private set; } - protected override HandleEventType ComparableValue + public override HandleEventType ComparableValue { get => HandleEventType; set => HandleEventType = value; diff --git a/Assets/Scripts/Signal/SignalBase.cs b/Assets/Scripts/Signal/SignalBase.cs index 2c80887..05ab498 100644 --- a/Assets/Scripts/Signal/SignalBase.cs +++ b/Assets/Scripts/Signal/SignalBase.cs @@ -43,7 +43,7 @@ public static TSignal Create() public abstract class SignalBase : ISignal where TSignal : SignalBase, new() { - protected abstract TParameter ComparableValue { get; set; } + public abstract TParameter ComparableValue { get; set; } public override bool Equals(object obj) { diff --git a/Assets/Scripts/Signal/StringSignal.cs b/Assets/Scripts/Signal/StringSignal.cs index 1d7bc95..f80ffe1 100644 --- a/Assets/Scripts/Signal/StringSignal.cs +++ b/Assets/Scripts/Signal/StringSignal.cs @@ -12,7 +12,7 @@ public sealed class StringSignal : SignalBase [SerializeField] private string signalName; [SerializeField] private SignalParameter parameter; - protected override string ComparableValue + public override string ComparableValue { get => signalName; set => signalName = value; From 3a37f1a49d4c0a14793556b9a48697230783c093 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sun, 3 Nov 2019 18:54:45 +0900 Subject: [PATCH 406/453] :clipboard: Bump up v0.1.0-preview.35.1 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 38ea5a8..6242f42 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.35", + "version": "0.1.0-preview.35.1", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 550e38e3ac2d4bafba0be3c0ca269928d71623b0 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Wed, 6 Nov 2019 17:26:56 +0900 Subject: [PATCH 407/453] :beetle: Reset time before play --- Assets/Scripts/Connector/Controller/PlayableController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 9107da5..3d45b5f 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -69,6 +69,7 @@ private void InvokePlayableDirectorMethod() switch (PlayableControlMethod) { case PlayableControlMethod.Play: + PlayableDirector.time = 0; PlayableDirector.Play(); break; case PlayableControlMethod.Stop: From d35049af8b2f38aaf45627a7fd8613c65cdb1920 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 7 Nov 2019 00:30:14 +0900 Subject: [PATCH 408/453] :clipboard: Bump up version to v0.1.0-preview.35.2 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 6242f42..2b4ba90 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.35.1", + "version": "0.1.0-preview.35.2", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 54753be2fa05f5cf958f09e096a6674fc8167e5f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 7 Nov 2019 00:34:41 +0900 Subject: [PATCH 409/453] :clipboard: Bump up version to v0.1.0-preview.35.3 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 2b4ba90..862c7a0 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.35.2", + "version": "0.1.0-preview.35.3", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 26b9cda011c33736623e9db35e26fb144e30610a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 7 Nov 2019 00:29:56 +0900 Subject: [PATCH 410/453] :microscope: WIP --- .../Controller/KeyInputController.cs | 48 ++++++++++++++++++ .../Controller/KeyInputController.cs.meta | 3 ++ Assets/Scripts/Connector/Event/KeyEvent.cs | 49 ++++++++++++++++++- Assets/Scripts/ConnectorType.cs | 1 + 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 Assets/Scripts/Connector/Controller/KeyInputController.cs create mode 100644 Assets/Scripts/Connector/Controller/KeyInputController.cs.meta diff --git a/Assets/Scripts/Connector/Controller/KeyInputController.cs b/Assets/Scripts/Connector/Controller/KeyInputController.cs new file mode 100644 index 0000000..1df8847 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/KeyInputController.cs @@ -0,0 +1,48 @@ +using System; +using JetBrains.Annotations; +using UniFlow.Connector.Event; +using UniFlow.Utility; +using UnityEngine; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/KeyInputController", (int) ConnectorType.KeyInputController)] + public class KeyInputController : ConnectorBase + { + [SerializeField] private KeyInputControlMethod keyInputControlMethod = KeyInputControlMethod.Activate; + + [UsedImplicitly] private KeyInputControlMethod KeyInputControlMethod + { + get => keyInputControlMethod; + set => keyInputControlMethod = value; + } + + public override IObservable OnConnectAsObservable() + { + HandleActivation(); + return ObservableFactory.ReturnMessage(this); + } + + private void HandleActivation() + { + switch (KeyInputControlMethod) + { + case KeyInputControlMethod.Activate: + KeyEvent.Gate.Value = true; + break; + case KeyInputControlMethod.Deactivate: + KeyEvent.Gate.Value = false; + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + [PublicAPI] + public enum KeyInputControlMethod + { + Activate, + Deactivate, + } +} diff --git a/Assets/Scripts/Connector/Controller/KeyInputController.cs.meta b/Assets/Scripts/Connector/Controller/KeyInputController.cs.meta new file mode 100644 index 0000000..b93e733 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/KeyInputController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 847d58c0f0984366917ea34fc4c60458 +timeCreated: 1573034597 \ No newline at end of file diff --git a/Assets/Scripts/Connector/Event/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs index 7539902..09597f7 100644 --- a/Assets/Scripts/Connector/Event/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using UniRx; using UniRx.Triggers; using UnityEngine; @@ -8,15 +9,17 @@ namespace UniFlow.Connector.Event [AddComponentMenu("UniFlow/Event/KeyEvent", (int) ConnectorType.KeyEvent)] public class KeyEvent : ConnectorBase { + [SerializeField] private string groupName = default; [SerializeField] private KeyEventType keyEventType = KeyEventType.Down; [SerializeField] private KeyCode keyCode = default; + private string GroupName => groupName; private KeyEventType KeyEventType => keyEventType; private KeyCode KeyCode => keyCode; public override IObservable OnConnectAsObservable() { - return KeyEventAsObservable().Select(this.CreateMessage); + return KeyEventAsObservable().Where(_ => RegisterCommandGroup(GroupName).Execute(Unit.Default)).Select(this.CreateMessage); } private IObservable KeyEventAsObservable() @@ -42,6 +45,50 @@ private IObservable KeyEventAsObservable() throw new ArgumentOutOfRangeException(); } } + + private void OnDestroy() + { + UnregisterCommandGroup(GroupName); + } + + internal static IReactiveProperty Gate { get; } = new BoolReactiveProperty(true); + + private static IDictionary CommandGroups { get; } = new Dictionary(); + + private static IReactiveCommand RegisterCommandGroup(string groupName) + { + if (!CommandGroups.ContainsKey(groupName) || CommandGroups[groupName] == default) + { + CommandGroups[groupName] = new ReactiveCommandReference(Gate); + } + + CommandGroups[groupName].ReferenceCount++; + return CommandGroups[groupName].Command; + } + + private static void UnregisterCommandGroup(string groupName) + { + if (CommandGroups.ContainsKey(groupName) && CommandGroups[groupName] != default) + { + CommandGroups[groupName].ReferenceCount--; + + if (CommandGroups[groupName].ReferenceCount <= 0) + { + CommandGroups.Remove(groupName); + } + } + } + + private class ReactiveCommandReference + { + internal ReactiveCommandReference(IObservable gate) + { + Command = gate.ToReactiveCommand(); + } + + internal IReactiveCommand Command { get; } + internal int ReferenceCount { get; set; } + } } public enum KeyEventType diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index b18c7af..a2176c2 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -30,6 +30,7 @@ public enum ConnectorType PlayableController, TimelineEvent, TimelineSignal, + KeyInputController, RaycasterController, RaycastTargetController, TransformSiblingController, From d809b330219a2bee07bffbe21e0890ea1270d871 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 11 Nov 2019 21:59:47 +0900 Subject: [PATCH 411/453] :white_check_mark: Fix compile error in test case --- Assets/Scripts/Connector/Controller/AnimatorTrigger.cs | 4 ++-- Assets/Scripts/Connector/Controller/AudioController.cs | 4 ++-- Assets/Scripts/Connector/Controller/PlayableController.cs | 5 +++-- .../Connector/Controller/SimpleAnimationController.cs | 4 ++-- Assets/Scripts/Connector/Event/AnimationEvent.cs | 4 ++-- Assets/Scripts/Connector/Event/AudioEvent.cs | 6 +++--- Assets/Scripts/Connector/Event/CameraEvent.cs | 2 +- Assets/Scripts/Connector/Event/LifecycleEvent.cs | 2 +- Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs | 4 ++-- Assets/Tests/Runtime/Scripts/AllTest.cs | 2 +- Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs | 3 +-- Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs | 3 +-- 12 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs index 402db0c..ee6ea8f 100644 --- a/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs +++ b/Assets/Scripts/Connector/Controller/AnimatorTrigger.cs @@ -27,10 +27,10 @@ public string TransformPath get => transformPath; private set => transformPath = value; } - private Animator Animator + public Animator Animator { get => animator ? animator : animator = this.GetOrAddComponent(); - set => animator = value; + private set => animator = value; } private string TriggerName { diff --git a/Assets/Scripts/Connector/Controller/AudioController.cs b/Assets/Scripts/Connector/Controller/AudioController.cs index 6568d28..410bbe3 100644 --- a/Assets/Scripts/Connector/Controller/AudioController.cs +++ b/Assets/Scripts/Connector/Controller/AudioController.cs @@ -30,10 +30,10 @@ public string TransformPath get => transformPath; private set => transformPath = value; } - private AudioSource AudioSource + public AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = this.GetOrAddComponent(); - set => audioSource = value; + private set => audioSource = value; } private AudioControlMethod AudioControlMethod => audioControlMethod; private AudioClip AudioClip diff --git a/Assets/Scripts/Connector/Controller/PlayableController.cs b/Assets/Scripts/Connector/Controller/PlayableController.cs index 3d45b5f..0e0f587 100644 --- a/Assets/Scripts/Connector/Controller/PlayableController.cs +++ b/Assets/Scripts/Connector/Controller/PlayableController.cs @@ -26,10 +26,11 @@ public string TransformPath get => transformPath; private set => transformPath = value; } - private PlayableDirector PlayableDirector + + public PlayableDirector PlayableDirector { get => playableDirector != default ? playableDirector : playableDirector = this.GetOrAddComponent(); - set => playableDirector = value; + private set => playableDirector = value; } private PlayableControlMethod PlayableControlMethod => playableControlMethod; private TimelineAsset TimelineAsset diff --git a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs index 0f8e724..ee47701 100644 --- a/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs +++ b/Assets/Scripts/Connector/Controller/SimpleAnimationController.cs @@ -38,7 +38,7 @@ private Animator Animator get => animator != default ? animator : animator = this.GetOrAddComponent(); set => animator = value; } - private SimpleAnimation SimpleAnimation + public SimpleAnimation SimpleAnimation { get => simpleAnimation != default @@ -48,7 +48,7 @@ private SimpleAnimation SimpleAnimation ? Animator.GetComponent() : Animator.gameObject.AddComponent() ; - set => simpleAnimation = value; + private set => simpleAnimation = value; } private SimpleAnimationControlMethod SimpleAnimationControlMethod => simpleAnimationControlMethod; private AnimationClip AnimationClip diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index fc6f465..057878a 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -30,10 +30,10 @@ public string TransformPath get => transformPath; private set => transformPath = value; } - private Animator Animator + public Animator Animator { get => animator != default ? animator : animator = this.GetOrAddComponent(); - set => animator = value; + private set => animator = value; } private SimpleAnimation SimpleAnimation { diff --git a/Assets/Scripts/Connector/Event/AudioEvent.cs b/Assets/Scripts/Connector/Event/AudioEvent.cs index 9c2218c..ab341ea 100644 --- a/Assets/Scripts/Connector/Event/AudioEvent.cs +++ b/Assets/Scripts/Connector/Event/AudioEvent.cs @@ -26,12 +26,12 @@ public string TransformPath get => transformPath; private set => transformPath = value; } - private AudioSource AudioSource + public AudioSource AudioSource { get => audioSource != default ? audioSource : audioSource = this.GetOrAddComponent(); - set => audioSource = value; + private set => audioSource = value; } - private AudioEventType AudioEventType => audioEventType; + public AudioEventType AudioEventType => audioEventType; private AudioClip AudioClip { get => audioClip; diff --git a/Assets/Scripts/Connector/Event/CameraEvent.cs b/Assets/Scripts/Connector/Event/CameraEvent.cs index 3d18f70..3321bb4 100644 --- a/Assets/Scripts/Connector/Event/CameraEvent.cs +++ b/Assets/Scripts/Connector/Event/CameraEvent.cs @@ -17,7 +17,7 @@ private Component Component get => component ? component : component = this; set => component = value; } - private CameraEventType CameraEventType => cameraEventType; + public CameraEventType CameraEventType => cameraEventType; [SerializeField] private ComponentCollector componentCollector = new ComponentCollector(); private ComponentCollector ComponentCollector => componentCollector; diff --git a/Assets/Scripts/Connector/Event/LifecycleEvent.cs b/Assets/Scripts/Connector/Event/LifecycleEvent.cs index 90f9c5c..fc112d5 100644 --- a/Assets/Scripts/Connector/Event/LifecycleEvent.cs +++ b/Assets/Scripts/Connector/Event/LifecycleEvent.cs @@ -12,7 +12,7 @@ public class LifecycleEvent : ConnectorBase [SerializeField] private LifecycleEventType lifecycleEventType = LifecycleEventType.Start; private Component Component => component ? component : component = this; - private LifecycleEventType LifecycleEventType => lifecycleEventType; + public LifecycleEventType LifecycleEventType => lifecycleEventType; private IReactiveProperty StartProperty { get; } = new BoolReactiveProperty(false); private IReactiveProperty OnEnableProperty { get; } = new BoolReactiveProperty(false); diff --git a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs index e71bfa3..e1ee1a4 100644 --- a/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs +++ b/Assets/Scripts/Connector/Event/UIBehaviourEventTrigger.cs @@ -28,10 +28,10 @@ public string TransformPath get => transformPath; private set => transformPath = value; } - private UIBehaviour UIBehaviour + public UIBehaviour UIBehaviour { get => uiBehaviour ? uiBehaviour : uiBehaviour = ((IBaseGameObjectSpecifyable) this).GetComponent(); - set => uiBehaviour = value; + private set => uiBehaviour = value; } private EventTriggerType EventTriggerType => eventTriggerType; private bool ActivateBeforeConnect diff --git a/Assets/Tests/Runtime/Scripts/AllTest.cs b/Assets/Tests/Runtime/Scripts/AllTest.cs index e56647d..b96c066 100644 --- a/Assets/Tests/Runtime/Scripts/AllTest.cs +++ b/Assets/Tests/Runtime/Scripts/AllTest.cs @@ -77,7 +77,7 @@ private void AssertAll(IEnumerable sentConnectors) } { - var connector = connectors[4] as TimelineSignal; + var connector = connectors[4] as Connector.Event.TimelineSignal; Assert.NotNull(connector); } diff --git a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs index 70d1fea..0d86bf8 100644 --- a/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs +++ b/Assets/Tests/Runtime/Scripts/PlayableControllerTest.cs @@ -3,7 +3,6 @@ using System.Linq; using NUnit.Framework; using UniFlow.Connector.Controller; -using UniFlow.Connector.Event; using UnityEngine.Playables; using UnityEngine.TestTools; @@ -36,7 +35,7 @@ private void AssertPlayableController(IEnumerable sentConnectors) } { - var connector = connectors[1] as TimelineSignal; + var connector = connectors[1] as Connector.Event.TimelineSignal; Assert.NotNull(connector); } diff --git a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs index 01c5aa5..380ee8c 100644 --- a/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs +++ b/Assets/Tests/Runtime/Scripts/TimelineSignalTest.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using NUnit.Framework; -using UniFlow.Connector.Event; using UnityEngine.TestTools; namespace UniFlow.Tests.Runtime @@ -26,7 +25,7 @@ private void AssertTimelineSignal(IEnumerable sentConnectors) var connectors = sentConnectors.ToList(); Assert.AreEqual(2, connectors.Count); - var connector = connectors[0] as TimelineSignal; + var connector = connectors[0] as Connector.Event.TimelineSignal; Assert.NotNull(connector); HasAssert = true; } From 0fc7342845b391e549f4939f26a6723f6d6b176f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 11 Nov 2019 22:00:11 +0900 Subject: [PATCH 412/453] :clipboard: Upgrade Unity 2019.2.11f1 --- ProjectSettings/ProjectVersion.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 3e24348..87079c1 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.8f1 -m_EditorVersionWithRevision: 2019.2.8f1 (ff5b465c8d13) +m_EditorVersion: 2019.2.11f1 +m_EditorVersionWithRevision: 2019.2.11f1 (5f859a4cfee5) From fe750186ed14ed53556b6bacd2f5daeddc3f035a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 11 Nov 2019 23:07:13 +0900 Subject: [PATCH 413/453] :fire: Remove unnecessary connector --- .../Controller/KeyInputController.cs | 48 ------------------- .../Controller/KeyInputController.cs.meta | 3 -- 2 files changed, 51 deletions(-) delete mode 100644 Assets/Scripts/Connector/Controller/KeyInputController.cs delete mode 100644 Assets/Scripts/Connector/Controller/KeyInputController.cs.meta diff --git a/Assets/Scripts/Connector/Controller/KeyInputController.cs b/Assets/Scripts/Connector/Controller/KeyInputController.cs deleted file mode 100644 index 1df8847..0000000 --- a/Assets/Scripts/Connector/Controller/KeyInputController.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using JetBrains.Annotations; -using UniFlow.Connector.Event; -using UniFlow.Utility; -using UnityEngine; - -namespace UniFlow.Connector.Controller -{ - [AddComponentMenu("UniFlow/Controller/KeyInputController", (int) ConnectorType.KeyInputController)] - public class KeyInputController : ConnectorBase - { - [SerializeField] private KeyInputControlMethod keyInputControlMethod = KeyInputControlMethod.Activate; - - [UsedImplicitly] private KeyInputControlMethod KeyInputControlMethod - { - get => keyInputControlMethod; - set => keyInputControlMethod = value; - } - - public override IObservable OnConnectAsObservable() - { - HandleActivation(); - return ObservableFactory.ReturnMessage(this); - } - - private void HandleActivation() - { - switch (KeyInputControlMethod) - { - case KeyInputControlMethod.Activate: - KeyEvent.Gate.Value = true; - break; - case KeyInputControlMethod.Deactivate: - KeyEvent.Gate.Value = false; - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - } - - [PublicAPI] - public enum KeyInputControlMethod - { - Activate, - Deactivate, - } -} diff --git a/Assets/Scripts/Connector/Controller/KeyInputController.cs.meta b/Assets/Scripts/Connector/Controller/KeyInputController.cs.meta deleted file mode 100644 index b93e733..0000000 --- a/Assets/Scripts/Connector/Controller/KeyInputController.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 847d58c0f0984366917ea34fc4c60458 -timeCreated: 1573034597 \ No newline at end of file From 97b36d52d6d489368cc54b6e21159bd5430009af Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 11 Nov 2019 23:07:27 +0900 Subject: [PATCH 414/453] :clipboard: Refer KeyEventHandler --- Assets/UniFlow.asmdef | 1 + Packages/manifest.json | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Assets/UniFlow.asmdef b/Assets/UniFlow.asmdef index 53b9116..e3e22b8 100644 --- a/Assets/UniFlow.asmdef +++ b/Assets/UniFlow.asmdef @@ -6,6 +6,7 @@ "GUID:560b04d1a97f54a4e82edc0cbbb69285", "GUID:f51ebe6a0ceec4240a699833d6309b23", "GUID:c571cab59b47e4b18969473a38df77be", + "GUID:beb451cbe847343cda1f9c1e001b3e06", "GUID:0d8beb7f090555447a6cf5ce9e54dbb4" ], "includePlatforms": [], diff --git a/Packages/manifest.json b/Packages/manifest.json index 18317d8..11b6ca7 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -7,7 +7,8 @@ "com.unity.simpleanimation", "com.stevevermeulen", "jp.cysharp", - "dev.monry" + "dev.monry", + "dev.upm-packages" ] } ], @@ -31,6 +32,7 @@ "com.unity.ugui": "1.0.0", "com.unity.xr.legacyinputhelpers": "2.0.2", "dev.monry.unirx-observabletween": "0.0.1-preview.6", + "dev.upm-packages.keyeventhandler": "1.0.0-preview.1", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "com.unity.modules.ai": "1.0.0", From a8281ef4d46e8e07a26b297a585c44660f181034 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 11 Nov 2019 23:07:57 +0900 Subject: [PATCH 415/453] :sparkles: Implement KeyEvent using KeyEventHandler --- Assets/Scripts/Connector/Event/KeyEvent.cs | 102 ++++++++------------- 1 file changed, 36 insertions(+), 66 deletions(-) diff --git a/Assets/Scripts/Connector/Event/KeyEvent.cs b/Assets/Scripts/Connector/Event/KeyEvent.cs index 09597f7..d7b1d90 100644 --- a/Assets/Scripts/Connector/Event/KeyEvent.cs +++ b/Assets/Scripts/Connector/Event/KeyEvent.cs @@ -1,94 +1,54 @@ using System; using System.Collections.Generic; -using UniRx; -using UniRx.Triggers; +using KeyEventHandler; using UnityEngine; namespace UniFlow.Connector.Event { [AddComponentMenu("UniFlow/Event/KeyEvent", (int) ConnectorType.KeyEvent)] - public class KeyEvent : ConnectorBase + public class KeyEvent : ConnectorBase, IMessageCollectable { - [SerializeField] private string groupName = default; - [SerializeField] private KeyEventType keyEventType = KeyEventType.Down; [SerializeField] private KeyCode keyCode = default; + [SerializeField] private KeyEventType keyEventType = default; - private string GroupName => groupName; - private KeyEventType KeyEventType => keyEventType; - private KeyCode KeyCode => keyCode; - - public override IObservable OnConnectAsObservable() + private KeyCode KeyCode { - return KeyEventAsObservable().Where(_ => RegisterCommandGroup(GroupName).Execute(Unit.Default)).Select(this.CreateMessage); + get => keyCode; + set => keyCode = value; } + private KeyEventType KeyEventType + { + get => keyEventType; + set => keyEventType = value; + } + + [SerializeField] private KeyCodeCollector keyCodeCollector = new KeyCodeCollector(); + [SerializeField] private KeyEventTypeCollector keyEventTypeCollector = new KeyEventTypeCollector(); - private IObservable KeyEventAsObservable() + private KeyCodeCollector KeyCodeCollector => keyCodeCollector; + private KeyEventTypeCollector KeyEventTypeCollector => keyEventTypeCollector; + + public override IObservable OnConnectAsObservable() { switch (KeyEventType) { case KeyEventType.Down: - return this - .UpdateAsObservable() - .Where(_ => Input.GetKeyDown(KeyCode)) - .AsUnitObservable(); + return this.OnKeyDownAsObservable(KeyCode).AsMessageObservable(this); case KeyEventType.Press: - return this - .UpdateAsObservable() - .Where(_ => Input.GetKey(KeyCode)) - .AsUnitObservable(); + return this.OnKeyPressAsObservable(KeyCode).AsMessageObservable(this); case KeyEventType.Up: - return this - .UpdateAsObservable() - .Where(_ => Input.GetKeyUp(KeyCode)) - .AsUnitObservable(); + return this.OnKeyUpAsObservable(KeyCode).AsMessageObservable(this); default: throw new ArgumentOutOfRangeException(); } } - private void OnDestroy() - { - UnregisterCommandGroup(GroupName); - } - - internal static IReactiveProperty Gate { get; } = new BoolReactiveProperty(true); - - private static IDictionary CommandGroups { get; } = new Dictionary(); - - private static IReactiveCommand RegisterCommandGroup(string groupName) - { - if (!CommandGroups.ContainsKey(groupName) || CommandGroups[groupName] == default) - { - CommandGroups[groupName] = new ReactiveCommandReference(Gate); - } - - CommandGroups[groupName].ReferenceCount++; - return CommandGroups[groupName].Command; - } - - private static void UnregisterCommandGroup(string groupName) - { - if (CommandGroups.ContainsKey(groupName) && CommandGroups[groupName] != default) + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] { - CommandGroups[groupName].ReferenceCount--; - - if (CommandGroups[groupName].ReferenceCount <= 0) - { - CommandGroups.Remove(groupName); - } - } - } - - private class ReactiveCommandReference - { - internal ReactiveCommandReference(IObservable gate) - { - Command = gate.ToReactiveCommand(); - } - - internal IReactiveCommand Command { get; } - internal int ReferenceCount { get; set; } - } + CollectableMessageAnnotationFactory.Create(KeyCodeCollector, x => KeyCode = x, nameof(KeyCode)), + CollectableMessageAnnotationFactory.Create(KeyEventTypeCollector, x => KeyEventType = x, nameof(KeyEventType)), + }; } public enum KeyEventType @@ -97,4 +57,14 @@ public enum KeyEventType Press, Up, } + + [Serializable] + public class KeyCodeCollector : ValueCollectorBase + { + } + + [Serializable] + public class KeyEventTypeCollector : ValueCollectorBase + { + } } From a56b25eeb1b9d8f0bf8bfb9ca3f07897884740df Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Mon, 11 Nov 2019 23:10:30 +0900 Subject: [PATCH 416/453] :clipboard: Bump up version to v0.1.0-preview.36 --- Assets/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/package.json b/Assets/package.json index 862c7a0..07d341f 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.35.3", + "version": "0.1.0-preview.36", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { @@ -17,7 +17,8 @@ "com.stevevermeulen.extenject": "9.1.0", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", - "dev.monry.unirx-observabletween": "0.0.1-preview.6" + "dev.monry.unirx-observabletween": "0.0.1-preview.6", + "dev.upm-packages.keyeventhandler": "1.0.0-preview.1" }, "repository": { "type": "git", From 85f1c9e0499b71543ba167d9b938e16a1c66e416 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Wed, 13 Nov 2019 11:25:59 +0900 Subject: [PATCH 417/453] :clipboard: Make ProviderBase conform IMessageComposable --- .../Connector/ValueProvider/ProviderBase.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs index 7ca24b3..ff15c31 100644 --- a/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ProviderBase.cs @@ -1,11 +1,14 @@ using System; -using UniRx; +using System.Collections.Generic; +using UniFlow.Utility; using UnityEngine; namespace UniFlow.Connector.ValueProvider { - public abstract class ProviderBase : ConnectorBase, IInjectable + public abstract class ProviderBase : ConnectorBase, IInjectable, IMessageComposable { + private const string MessageParameterKey = "Value"; + [SerializeField] private TValue value = default; public TValue Value { @@ -15,12 +18,18 @@ public TValue Value public override IObservable OnConnectAsObservable() { - return Observable.Return(this.CreateMessage()); + return ObservableFactory.ReturnMessage(this, MessageParameterKey, Value); } void IInjectable.Inject(TValue v) { Value = v; } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create(() => Value, MessageParameterKey), + }; } } From 5886a89155bb882eb0436d241677eab99a3daf80 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 14 Nov 2019 21:40:19 +0900 Subject: [PATCH 418/453] :name_badge: Add suffix --- Assets/Scripts/Receiver/{Empty.cs => EmptyReceiver.cs} | 4 ++-- .../Scripts/Receiver/{Empty.cs.meta => EmptyReceiver.cs.meta} | 0 Assets/Scripts/Receiver/{Log.cs => LoggerReceiver.cs} | 4 ++-- .../Scripts/Receiver/{Log.cs.meta => LoggerReceiver.cs.meta} | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename Assets/Scripts/Receiver/{Empty.cs => EmptyReceiver.cs} (53%) rename Assets/Scripts/Receiver/{Empty.cs.meta => EmptyReceiver.cs.meta} (100%) rename Assets/Scripts/Receiver/{Log.cs => LoggerReceiver.cs} (84%) rename Assets/Scripts/Receiver/{Log.cs.meta => LoggerReceiver.cs.meta} (100%) diff --git a/Assets/Scripts/Receiver/Empty.cs b/Assets/Scripts/Receiver/EmptyReceiver.cs similarity index 53% rename from Assets/Scripts/Receiver/Empty.cs rename to Assets/Scripts/Receiver/EmptyReceiver.cs index ea8b145..3066d3d 100644 --- a/Assets/Scripts/Receiver/Empty.cs +++ b/Assets/Scripts/Receiver/EmptyReceiver.cs @@ -2,8 +2,8 @@ namespace UniFlow.Receiver { - [AddComponentMenu("UniFlow/Receiver/Empty", (int) ConnectorType.Receiver)] - public class Empty : ReceiverBase + [AddComponentMenu("UniFlow/Receiver/EmptyReceiver", (int) ConnectorType.Receiver)] + public class EmptyReceiver : ReceiverBase { public override void OnReceive() { diff --git a/Assets/Scripts/Receiver/Empty.cs.meta b/Assets/Scripts/Receiver/EmptyReceiver.cs.meta similarity index 100% rename from Assets/Scripts/Receiver/Empty.cs.meta rename to Assets/Scripts/Receiver/EmptyReceiver.cs.meta diff --git a/Assets/Scripts/Receiver/Log.cs b/Assets/Scripts/Receiver/LoggerReceiver.cs similarity index 84% rename from Assets/Scripts/Receiver/Log.cs rename to Assets/Scripts/Receiver/LoggerReceiver.cs index a3f06db..302265c 100644 --- a/Assets/Scripts/Receiver/Log.cs +++ b/Assets/Scripts/Receiver/LoggerReceiver.cs @@ -5,8 +5,8 @@ namespace UniFlow.Receiver { - [AddComponentMenu("UniFlow/Receiver/Log", (int) ConnectorType.Receiver)] - public class Log : ReceiverBase + [AddComponentMenu("UniFlow/Receiver/LoggerReceiver", (int) ConnectorType.Receiver)] + public class LoggerReceiver : ReceiverBase { private IList Connectors { get; } = new List(); diff --git a/Assets/Scripts/Receiver/Log.cs.meta b/Assets/Scripts/Receiver/LoggerReceiver.cs.meta similarity index 100% rename from Assets/Scripts/Receiver/Log.cs.meta rename to Assets/Scripts/Receiver/LoggerReceiver.cs.meta From e8bfb391f7fe831aa19058eb1419b975720dba9a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 14 Nov 2019 21:43:24 +0900 Subject: [PATCH 419/453] :clipboard: Upgrade KeyEventHandler --- Assets/package.json | 2 +- Packages/manifest.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/package.json b/Assets/package.json index 07d341f..a20ebf5 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -18,7 +18,7 @@ "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.1" + "dev.upm-packages.keyeventhandler": "1.0.0-preview.2" }, "repository": { "type": "git", diff --git a/Packages/manifest.json b/Packages/manifest.json index 11b6ca7..a04be2a 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -32,7 +32,7 @@ "com.unity.ugui": "1.0.0", "com.unity.xr.legacyinputhelpers": "2.0.2", "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.1", + "dev.upm-packages.keyeventhandler": "1.0.0-preview.2", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "com.unity.modules.ai": "1.0.0", From c291c3059be5bd58cc2dda5974e2327e71e2713a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 14 Nov 2019 21:44:48 +0900 Subject: [PATCH 420/453] :sparkles: Add ConnectorType --- Assets/Scripts/ConnectorType.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index a2176c2..ae0f409 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -36,6 +36,7 @@ public enum ConnectorType TransformSiblingController, MoveParentTransform, DontDestroyOnLoad, + EventHandlingController, LoadScene = 400, LoadScene_Enum, From a717b413d42d5a2039076e719ed50625d5ff6895 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 14 Nov 2019 21:44:57 +0900 Subject: [PATCH 421/453] :tada: Implement EventHandlingController --- .../Controller/EventHandlingController.cs | 84 +++++++++++++++++++ .../EventHandlingController.cs.meta | 3 + 2 files changed, 87 insertions(+) create mode 100644 Assets/Scripts/Connector/Controller/EventHandlingController.cs create mode 100644 Assets/Scripts/Connector/Controller/EventHandlingController.cs.meta diff --git a/Assets/Scripts/Connector/Controller/EventHandlingController.cs b/Assets/Scripts/Connector/Controller/EventHandlingController.cs new file mode 100644 index 0000000..6aa3000 --- /dev/null +++ b/Assets/Scripts/Connector/Controller/EventHandlingController.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using JetBrains.Annotations; +using KeyEventHandler; +using UniFlow.Utility; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace UniFlow.Connector.Controller +{ + [AddComponentMenu("UniFlow/Controller/EventHandlingController", (int) ConnectorType.EventHandlingController)] + public class EventHandlingController : ConnectorBase + { + [SerializeField] private EventHandlingControlMethod eventHandlingControlMethod = EventHandlingControlMethod.Activate; + [SerializeField] private List raycasters = default; + [SerializeField] private List keyEventLayers = default; + [SerializeField] private List graphics = default; + [SerializeField] private List colliders = default; + [SerializeField] private List collider2Ds = default; + [SerializeField] private List canvasGroups = default; + + [UsedImplicitly] private EventHandlingControlMethod EventHandlingControlMethod + { + get => eventHandlingControlMethod; + set => eventHandlingControlMethod = value; + } + [UsedImplicitly] private IEnumerable Raycasters + { + get => raycasters; + set => raycasters = value.ToList(); + } + [UsedImplicitly] private IEnumerable KeyEventLayers + { + get => keyEventLayers; + set => keyEventLayers = value.ToList(); + } + [UsedImplicitly] public IEnumerable Graphics + { + get => graphics; + set => graphics = value.ToList(); + } + [UsedImplicitly] public IEnumerable Colliders + { + get => colliders; + set => colliders = value.ToList(); + } + [UsedImplicitly] public IEnumerable Collider2Ds + { + get => collider2Ds; + set => collider2Ds = value.ToList(); + } + [UsedImplicitly] public IEnumerable CanvasGroups + { + get => canvasGroups; + set => canvasGroups = value.ToList(); + } + + public override IObservable OnConnectAsObservable() + { + HandleActivation(); + return ObservableFactory.ReturnMessage(this); + } + + private void HandleActivation() + { + var activate = EventHandlingControlMethod == EventHandlingControlMethod.Activate; + Raycasters.Where(x => x.enabled != activate).ToList().ForEach(x => x.enabled = activate); + KeyEventLayers.Where(x => x.enabled != activate).ToList().ForEach(x => x.enabled = activate); + Graphics.Where(x => x.raycastTarget != activate).ToList().ForEach(x => x.raycastTarget = activate); + Colliders.Where(x => x.enabled != activate).ToList().ForEach(x => x.enabled = activate); + Collider2Ds.Where(x => x.enabled != activate).ToList().ForEach(x => x.enabled = activate); + CanvasGroups.Where(x => x.blocksRaycasts != activate).ToList().ForEach(x => x.blocksRaycasts = activate); + } + } + + [PublicAPI] + public enum EventHandlingControlMethod + { + Activate, + Deactivate, + } +} diff --git a/Assets/Scripts/Connector/Controller/EventHandlingController.cs.meta b/Assets/Scripts/Connector/Controller/EventHandlingController.cs.meta new file mode 100644 index 0000000..331abfd --- /dev/null +++ b/Assets/Scripts/Connector/Controller/EventHandlingController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d57eab21d8ce4b0fac9fce7c95bd83ee +timeCreated: 1573732913 \ No newline at end of file From b050b06b49bfd8e1b74bba78390cdd917396f79a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 14 Nov 2019 21:49:00 +0900 Subject: [PATCH 422/453] :clipboard: Bump up version v0.1.0-preview.37 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index a20ebf5..ecc1c80 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.36", + "version": "0.1.0-preview.37", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From c77f6b75455c5d449dd5c5dbeaf82c8cc20c8b56 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 16 Nov 2019 03:36:19 +0900 Subject: [PATCH 423/453] :sparkles: Implement list enumeration type --- .../ValueProvider/ListProviderBase.cs | 74 +++++++++++++++++-- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs index 451dbed..2023452 100644 --- a/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs +++ b/Assets/Scripts/Connector/ValueProvider/ListProviderBase.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Linq; +using JetBrains.Annotations; using UniRx; using UnityEngine; +using Random = System.Random; namespace UniFlow.Connector.ValueProvider { @@ -10,7 +12,11 @@ public abstract class ListProviderBase : ConnectorBase, IInjectable values = default; - public IEnumerable Values + [SerializeField] private EnumerationType enumerationType = default; + + private EnumerationType EnumerationType => enumerationType; + + [UsedImplicitly] public IEnumerable Values { get => values; set => values = value.ToList(); @@ -18,7 +24,23 @@ public IEnumerable Values public override IObservable OnConnectAsObservable() { - return Values + IEnumerable v; + switch (EnumerationType) + { + case EnumerationType.Normal: + v = Values; + break; + case EnumerationType.Reverse: + v = Values.Reverse(); + break; + case EnumerationType.Shuffle: + v = Values.Shuffle(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return v .ToList() .ToObservable() .AsMessageObservable(this, typeof(TValue).Name); @@ -44,7 +66,11 @@ public abstract class ListProviderBase : ConnectorBase, { [SerializeField] private List values = default; - public IEnumerable Values + [SerializeField] private EnumerationType enumerationType = default; + + private EnumerationType EnumerationType => enumerationType; + + [UsedImplicitly] public IEnumerable Values { get => values; set => values = value.ToList(); @@ -55,7 +81,23 @@ public IEnumerable Values public override IObservable OnConnectAsObservable() { - return Values + IEnumerable v; + switch (EnumerationType) + { + case EnumerationType.Normal: + v = Values; + break; + case EnumerationType.Reverse: + v = Values.Reverse(); + break; + case EnumerationType.Shuffle: + v = Values.Shuffle(); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return v .ToList() .ToObservable() .AsMessageObservable(this, typeof(TValue).Name); @@ -75,8 +117,28 @@ IEnumerable IMessageComposable.GetMessageComposabl }; } - [Serializable] - public class CollectMessage + public enum EnumerationType { + Normal, + Reverse, + Shuffle, + } + + internal static class ListExtensions + { + private static Random Random { get; } = new Random(); + + internal static IEnumerable Shuffle(this IEnumerable source) + { + var elements = source.ToArray(); + + for (var n = 0; n < elements.Length; n++) + { + var k = Random.Next(n, elements.Length); + yield return elements[k]; + + elements[k] = elements[n]; + } + } } } From 9cc73ce4f827809a9fe6300bf9657567a27029a3 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 16 Nov 2019 03:38:50 +0900 Subject: [PATCH 424/453] :sparkles: Add base methods to merge MessageAnnotations --- Assets/Scripts/ConnectorBase.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index eefc723..24d7a3e 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -70,6 +70,12 @@ protected virtual void Start() } } + protected virtual IEnumerable MergeMessageCollectableAnnotations() => + new ICollectableMessageAnnotation[0]; + + protected virtual IEnumerable MergeMessageComposableAnnotations() => + new IComposableMessageAnnotation[0]; + void IConnector.Connect(IObservable source) { #if UNITY_EDITOR From 2f3a5e5e561cf1112eb5041074b6b3918a5164b6 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 16 Nov 2019 03:39:32 +0900 Subject: [PATCH 425/453] :sparkles: Support to merge recursively MessageAnnotations --- .../Controller/InstantiateGameObject.cs | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs index c471c53..9a19887 100644 --- a/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs +++ b/Assets/Scripts/Connector/Controller/InstantiateGameObject.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using UniFlow.Utility; using UnityEngine; using Zenject; @@ -31,7 +32,7 @@ private Transform Parent private GameObjectCollector SourceCollector => sourceCollector; private TransformCollector ParentCollector => parentCollector; - private GameObject Instantiated { get; set; } + protected GameObject Instantiated { get; set; } [Inject] private DiContainer DiContainer { get; } @@ -41,17 +42,27 @@ public override IObservable OnConnectAsObservable() return ObservableFactory.ReturnMessage(this, nameof(Instantiated), Instantiated); } - IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => - new[] - { - CollectableMessageAnnotationFactory.Create(SourceCollector, x => Source = x, nameof(Source)), - CollectableMessageAnnotationFactory.Create(ParentCollector, x => Parent = x, nameof(Parent)), - }; - - IEnumerable IMessageComposable.GetMessageComposableAnnotations() => - new[] - { - ComposableMessageAnnotationFactory.Create(nameof(Instantiated)), - }; + protected override IEnumerable MergeMessageCollectableAnnotations() => + base.MergeMessageCollectableAnnotations() + .Concat( + new[] + { + CollectableMessageAnnotationFactory.Create(SourceCollector, x => Source = x, nameof(Source)), + CollectableMessageAnnotationFactory.Create(ParentCollector, x => Parent = x, nameof(Parent)), + } + ); + + protected override IEnumerable MergeMessageComposableAnnotations() => + base.MergeMessageComposableAnnotations() + .Concat( + new[] + { + ComposableMessageAnnotationFactory.Create(nameof(Instantiated)), + } + ); + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => MergeMessageCollectableAnnotations(); + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => MergeMessageComposableAnnotations(); } } From 1c04fb647f4aada10c53d8815bff1f2406afbd80 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 16 Nov 2019 03:46:12 +0900 Subject: [PATCH 426/453] :clipboard: Bump up version to v0.1.0-preview.38 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index ecc1c80..a64f7bb 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.37", + "version": "0.1.0-preview.38", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 8fb94cfd109d7298f2b04dfdcaf325ed57552929 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 19 Nov 2019 20:00:16 +0900 Subject: [PATCH 427/453] :sparkles: Support overwrite to load/unload scene using Zenject --- Assets/Scripts/Connector/Controller/LoadSceneBase.cs | 11 ++++++++--- .../Scripts/Connector/Controller/UnloadSceneBase.cs | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs index aa64352..e5ceb6d 100644 --- a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs @@ -4,6 +4,7 @@ using UniRx; using UniRx.Async; using UnityEngine.SceneManagement; +using Zenject; namespace UniFlow.Connector.Controller { @@ -12,19 +13,23 @@ public abstract class LoadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } + [InjectOptional] private AsyncLoadSceneDelegate AsyncLoadSceneDelegate { get; } = DefaultAsyncLoadScene; + public override IObservable OnConnectAsObservable() { - return LoadScenes() + return AsyncLoadSceneDelegate(SceneNames) .ToObservable() .Select(this.CreateMessage); } - private async UniTask LoadScenes() + private static async UniTask DefaultAsyncLoadScene(IEnumerable sceneNames) { - foreach (var sceneName in SceneNames) + foreach (var sceneName in sceneNames) { await SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); } } } + + public delegate UniTask AsyncLoadSceneDelegate(IEnumerable sceneNames); } diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs index 812b484..9b10ded 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs @@ -4,6 +4,7 @@ using UniRx; using UniRx.Async; using UnityEngine.SceneManagement; +using Zenject; namespace UniFlow.Connector.Controller { @@ -12,19 +13,23 @@ public abstract class UnloadSceneBase : ConnectorBase [UsedImplicitly] public abstract IEnumerable SceneNames { get; set; } + [InjectOptional] private AsyncUnloadSceneDelegate AsyncUnloadSceneDelegate { get; } = DefaultAsyncUnloadScene; + public override IObservable OnConnectAsObservable() { - return UnloadScenes() + return AsyncUnloadSceneDelegate(SceneNames) .ToObservable() .Select(this.CreateMessage); } - private async UniTask UnloadScenes() + private static async UniTask DefaultAsyncUnloadScene(IEnumerable sceneNames) { - foreach (var sceneName in SceneNames) + foreach (var sceneName in sceneNames) { await SceneManager.UnloadSceneAsync(sceneName); } } } + + public delegate UniTask AsyncUnloadSceneDelegate(IEnumerable sceneNames); } From 4298b8b30fec11199d51aabd98f9515223cace5f Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 19 Nov 2019 20:04:57 +0900 Subject: [PATCH 428/453] :clipboard: Bump up version to v0.1.0-preview.39 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index a64f7bb..744d0f9 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.38", + "version": "0.1.0-preview.39", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 69341fc05563e57ed3e60b17eb7b6dc43444c03a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 21 Nov 2019 18:17:54 +0900 Subject: [PATCH 429/453] :beetle: Fix to compare AudioClip --- Assets/Scripts/Connector/Complex/MusicPlayer.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Complex/MusicPlayer.cs b/Assets/Scripts/Connector/Complex/MusicPlayer.cs index 2d0e949..020f13c 100644 --- a/Assets/Scripts/Connector/Complex/MusicPlayer.cs +++ b/Assets/Scripts/Connector/Complex/MusicPlayer.cs @@ -1,5 +1,6 @@ -using System; +using System; using System.Collections.Generic; +using JetBrains.Annotations; using UniFlow; using UniFlow.Connector.Controller; using UniFlow.Utility; @@ -17,6 +18,7 @@ public class MusicPlayer : ConnectorBase, IMessageCollectable [SerializeField] [Tooltip("If you do not specify it will be obtained by AudioSource.clip")] private AudioClip audioClip = default; + [SerializeField] private string key = default; [SerializeField] private bool loop = true; [SerializeField] private bool rewindSameClip = default; @@ -35,6 +37,11 @@ private AudioClip AudioClip get => audioClip; set => audioClip = value; } + [UsedImplicitly] private string Key + { + get => string.IsNullOrEmpty(key) ? AudioClip.name : key; + set => key = value; + } private bool Loop { get => loop; @@ -74,8 +81,10 @@ private void InvokeAudioSourceMethod() switch (AudioControlMethod) { case AudioControlMethod.Play: - if (!AudioSource.isPlaying || AudioSource.clip != AudioClip || RewindSameClip) + if (!AudioSource.isPlaying || AudioSource.name != Key || RewindSameClip) { + // Set key to AudioSource.name to compare name + AudioSource.name = Key; AudioSource.clip = AudioClip; AudioSource.loop = Loop; AudioSource.Play(); From 515fdab27cf460d1f3a7f47ed433b542cfe4f4e4 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 21 Nov 2019 18:20:11 +0900 Subject: [PATCH 430/453] :clipboard: Bump up version to v0.1.0-preview.39.1 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 744d0f9..932c7de 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.39", + "version": "0.1.0-preview.39.1", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 849667cc2e04bfb1cc783d8d06a31df9190fa1f1 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 5 Dec 2019 00:05:34 +0900 Subject: [PATCH 431/453] :beetle: Avoid NullReferenceException --- Assets/Editor/Scripts/FlowNode.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Assets/Editor/Scripts/FlowNode.cs b/Assets/Editor/Scripts/FlowNode.cs index 3eaf7b3..6e799e7 100644 --- a/Assets/Editor/Scripts/FlowNode.cs +++ b/Assets/Editor/Scripts/FlowNode.cs @@ -170,7 +170,8 @@ private void AddParameters() { var element = new VisualElement(); - var field = new ObjectField("GameObject") {value = ConnectorInfo.GameObject, objectType = typeof(GameObject), allowSceneObjects = true}; + var field = new ObjectField("GameObject") {objectType = typeof(GameObject), allowSceneObjects = true}; + field.SetValueWithoutNotify(ConnectorInfo.GameObject); field.RegisterValueChangedCallback( x => { @@ -305,6 +306,14 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI { label = ToDisplayName(parameter.Name), }; + + // ReSharper disable once InvertIf + if (typeof(TValue) == typeof(Object) && field is ObjectField objectField) + { + objectField.objectType = parameter.Type; + objectField.allowSceneObjects = true; + } + if (parameter.Value != default) { field.value = (TValue) parameter.Value; @@ -325,13 +334,6 @@ private static VisualElement CreateField(ConnectorInfo connectorInfo, ConnectorI ); } - // ReSharper disable once InvertIf - if (typeof(TValue) == typeof(Object) && field is ObjectField objectField) - { - objectField.objectType = parameter.Type; - objectField.allowSceneObjects = true; - } - return field; } From 6283516ba30510d345c32ae16c8790deedc194c7 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 5 Dec 2019 00:06:55 +0900 Subject: [PATCH 432/453] :beetle: Fix incorrect base class for SignalReceiverWithParameterBase --- Assets/Scripts/Connector/SignalReceiverBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Scripts/Connector/SignalReceiverBase.cs b/Assets/Scripts/Connector/SignalReceiverBase.cs index b29ad80..9e81dae 100644 --- a/Assets/Scripts/Connector/SignalReceiverBase.cs +++ b/Assets/Scripts/Connector/SignalReceiverBase.cs @@ -54,7 +54,7 @@ IEnumerable IMessageCollectable.GetMessageCollect } - public abstract class SignalReceiverWithParameterBase : SignalPublisherBase + public abstract class SignalReceiverWithParameterBase : SignalReceiverBase where TSignal : SignalBase, new() where TParameter : Enum { From 9623906d1ecc7745ffc059f3554be0cc1a3a8da7 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 5 Dec 2019 00:09:45 +0900 Subject: [PATCH 433/453] :clipboard: Bump up version to v0.1.0-preview.40 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index 932c7de..e0b5dfc 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.39.1", + "version": "0.1.0-preview.40", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From c56401c13bd24078830148022474a796bdbb5443 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Wed, 18 Dec 2019 15:01:13 +0900 Subject: [PATCH 434/453] :clipboard: Add color property injection for ImageInjector --- .../Connector/ValueInjector/ImageInjector.cs | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs index 5e48e2b..0966a74 100644 --- a/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/ImageInjector.cs @@ -13,6 +13,7 @@ public class ImageInjector : InjectorBase, [SerializeField] private GameObject baseGameObject = default; [SerializeField] private string transformPath = default; [SerializeField] private Image image = default; + [SerializeField] private Color color = default; [SerializeField] private Sprite sprite = default; [SerializeField] private bool invokeSetNativeSize = default; @@ -34,7 +35,20 @@ private Image Image private Sprite Sprite { get => sprite; - set => sprite = value; + set + { + sprite = value; + HasInjectSprite = true; + } + } + private Color Color + { + get => color; + set + { + color = value; + HasInjectColor = true; + } } private bool InvokeSetNativeSize { @@ -46,17 +60,31 @@ private bool InvokeSetNativeSize [SerializeField] private StringCollector transformPathCollector = new StringCollector(); [SerializeField] private ImageCollector imageCollector = new ImageCollector(); [SerializeField] private SpriteCollector spriteCollector = new SpriteCollector(); + [SerializeField] private ColorCollector colorCollector = new ColorCollector(); [SerializeField] private BoolCollector invokeSetNativeSizeCollector = new BoolCollector(); private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; private StringCollector TransformPathCollector => transformPathCollector; private ImageCollector ImageCollector => imageCollector; private SpriteCollector SpriteCollector => spriteCollector; + private ColorCollector ColorCollector => colorCollector; private BoolCollector InvokeSetNativeSizeCollector => invokeSetNativeSizeCollector; + private bool HasInjectColor { get; set; } + private bool HasInjectSprite { get; set; } + protected override void Inject() { - Image.sprite = Sprite; + if (HasInjectColor) + { + Image.color = Color; + } + + if (HasInjectSprite) + { + Image.sprite = Sprite; + } + if (InvokeSetNativeSize) { Image.SetNativeSize(); @@ -70,6 +98,7 @@ IEnumerable IMessageCollectable.GetMessageCollect CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), CollectableMessageAnnotationFactory.Create(ImageCollector, x => Image = x, nameof(Image)), CollectableMessageAnnotationFactory.Create(SpriteCollector, x => Sprite = x, nameof(Sprite)), + CollectableMessageAnnotationFactory.Create(ColorCollector, x => Color = x, nameof(Color)), CollectableMessageAnnotationFactory.Create(InvokeSetNativeSizeCollector, x => InvokeSetNativeSize = x, nameof(InvokeSetNativeSize)), }; } From 3bfc45dc5130b37dd098a0fa38fa501f0357e103 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Wed, 18 Dec 2019 15:40:14 +0900 Subject: [PATCH 435/453] :clipboard: Add RectTransformInjector --- .../ValueInjector/RectTransformInjector.cs | 187 ++++++++++++++++++ .../RectTransformInjector.cs.meta | 3 + 2 files changed, 190 insertions(+) create mode 100644 Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs create mode 100644 Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs.meta diff --git a/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs b/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs new file mode 100644 index 0000000..ba1e5f7 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs @@ -0,0 +1,187 @@ +using System.Collections.Generic; +using UniFlow; +using UniFlow.Connector.ValueInjector; +using UnityEngine; + +namespace CAFUSample.Scripts.Connector.ValueInjector +{ + [AddComponentMenu("UniFlow/ValueInjector/RectTransformInjector", (int) ConnectorType.ValueInjectorRectTransform)] + public class RectTransformInjector : InjectorBase, + IBaseGameObjectSpecifyable, + IMessageCollectable + { + [SerializeField] private GameObject baseGameObject = default; + [SerializeField] private string transformPath = default; + [SerializeField] private bool actAsLocal = true; + [SerializeField] private Vector3 position = default; + [SerializeField] private Quaternion rotation = default; + [SerializeField] private Vector3 rotationEuler = default; + [SerializeField] private Vector3 scale = default; + [SerializeField] private Vector2 anchoredPosition = default; + [SerializeField] private Vector2 anchoredPosition3D = default; + + public override GameObject BaseGameObject + { + get => baseGameObject == default ? baseGameObject = gameObject : baseGameObject; + set => baseGameObject = value; + } + public string TransformPath + { + get => transformPath; + private set => transformPath = value; + } + private bool ActAsLocal => actAsLocal; + private Vector3 Position + { + get => position; + set + { + position = value; + HasInjectPosition = true; + } + } + private Quaternion Rotation + { + get => rotation; + set + { + rotation = value; + HasInjectRotation = true; + } + } + private Vector3 RotationEuler + { + get => rotationEuler; + set + { + rotationEuler = value; + HasInjectRotationEuler = true; + } + } + private Vector3 Scale + { + get => scale; + set + { + scale = value; + HasInjectScale = true; + } + } + private Vector2 AnchoredPosition + { + get => anchoredPosition; + set + { + anchoredPosition = value; + HasInjectAnchoredPosition = true; + } + } + private Vector3 AnchoredPosition3D + { + get => anchoredPosition3D; + set + { + anchoredPosition3D = value; + HasInjectAnchoredPosition3D = true; + } + } + + [SerializeField] private GameObjectCollector baseGameObjectCollector = new GameObjectCollector(); + [SerializeField] private StringCollector transformPathCollector = new StringCollector(); + [SerializeField] private Vector3Collector positionCollector = new Vector3Collector(); + [SerializeField] private QuaternionCollector rotationCollector = new QuaternionCollector(); + [SerializeField] private Vector3Collector rotationEulerCollector = new Vector3Collector(); + [SerializeField] private Vector3Collector scaleCollector = new Vector3Collector(); + [SerializeField] private Vector2Collector anchoredPositionCollector = new Vector2Collector(); + [SerializeField] private Vector3Collector anchoredPosition3DCollector = new Vector3Collector(); + + private GameObjectCollector BaseGameObjectCollector => baseGameObjectCollector; + private StringCollector TransformPathCollector => transformPathCollector; + private Vector3Collector PositionCollector => positionCollector; + private QuaternionCollector RotationCollector => rotationCollector; + private Vector3Collector RotationEulerCollector => rotationEulerCollector; + private Vector3Collector ScaleCollector => scaleCollector; + private Vector2Collector AnchoredPositionCollector => anchoredPositionCollector; + private Vector3Collector AnchoredPosition3DCollector => anchoredPosition3DCollector; + + + private bool HasInjectPosition { get; set; } + private bool HasInjectRotation { get; set; } + private bool HasInjectRotationEuler { get; set; } + private bool HasInjectScale { get; set; } + private bool HasInjectAnchoredPosition { get; set; } + private bool HasInjectAnchoredPosition3D { get; set; } + + protected override void Inject() + { + var targetTransform = BaseGameObject.transform as RectTransform; + if (HasInjectPosition) + { + if (ActAsLocal) + { + targetTransform.localPosition = Position; + } + else + { + targetTransform.position = Position; + } + } + + if (HasInjectRotationEuler) + { + if (ActAsLocal) + { + targetTransform.localRotation = Quaternion.Euler(RotationEuler); + } + else + { + targetTransform.rotation = Quaternion.Euler(RotationEuler); + } + } + + if (HasInjectRotation) + { + if (ActAsLocal) + { + targetTransform.localRotation = Rotation; + } + else + { + targetTransform.rotation = Rotation; + } + } + + // ReSharper disable once InvertIf + if (HasInjectScale) + { + if (ActAsLocal) + { + targetTransform.localScale = Scale; + } + } + + if (HasInjectAnchoredPosition) + { + targetTransform.anchoredPosition = AnchoredPosition; + } + + if (HasInjectAnchoredPosition3D) + { + targetTransform.anchoredPosition3D = AnchoredPosition3D; + } + } + + IEnumerable IMessageCollectable.GetMessageCollectableAnnotations() => + new[] + { + CollectableMessageAnnotationFactory.Create(BaseGameObjectCollector, x => BaseGameObject = x, nameof(BaseGameObject)), + CollectableMessageAnnotationFactory.Create(TransformPathCollector, x => TransformPath = x, nameof(TransformPath)), + CollectableMessageAnnotationFactory.Create(PositionCollector, x => Position = x, nameof(Position)), + CollectableMessageAnnotationFactory.Create(RotationCollector, x => Rotation = x, nameof(Rotation)), + CollectableMessageAnnotationFactory.Create(RotationEulerCollector, x => RotationEuler = x, nameof(RotationEuler)), + CollectableMessageAnnotationFactory.Create(ScaleCollector, x => Scale = x, nameof(Scale)), + CollectableMessageAnnotationFactory.Create(AnchoredPositionCollector, x => AnchoredPosition = x, nameof(AnchoredPosition)), + CollectableMessageAnnotationFactory.Create(AnchoredPosition3DCollector, x => AnchoredPosition3D = x, nameof(AnchoredPosition3D)), + }; + } +} diff --git a/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs.meta b/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs.meta new file mode 100644 index 0000000..57cd7e6 --- /dev/null +++ b/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 58d576dc387f848d1a8e6bf88caf77d4 +timeCreated: 1571998192 \ No newline at end of file From 0cb469583dad2ec2d24189777b9b2e570f7fc6de Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Wed, 18 Dec 2019 16:07:30 +0900 Subject: [PATCH 436/453] :clipboard: Check whether targetTransform is null --- .../Scripts/Connector/ValueInjector/RectTransformInjector.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs b/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs index ba1e5f7..8874eb2 100644 --- a/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs +++ b/Assets/Scripts/Connector/ValueInjector/RectTransformInjector.cs @@ -115,6 +115,11 @@ private Vector3 AnchoredPosition3D protected override void Inject() { var targetTransform = BaseGameObject.transform as RectTransform; + if (targetTransform == null) + { + return; + } + if (HasInjectPosition) { if (ActAsLocal) From 0767139d2719164f35d7eb30c19af87d44f0008e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 11 Jan 2020 21:48:03 +0900 Subject: [PATCH 437/453] :sparkles: Close stream every time --- Assets/Scripts/ConnectorBase.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index 24d7a3e..fd5abef 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -76,6 +76,8 @@ protected virtual IEnumerable MergeMessageCollect protected virtual IEnumerable MergeMessageComposableAnnotations() => new IComposableMessageAnnotation[0]; + private ISubject ShutdownSubject { get; } = new Subject(); + void IConnector.Connect(IObservable source) { #if UNITY_EDITOR @@ -84,6 +86,7 @@ void IConnector.Connect(IObservable source) OnConnectSubject.Subscribe(_ => Logger.Log(this)).AddTo(this); } #endif + ShutdownSubject.OnNext(Unit.Default); var observable = source .SelectMany( message => @@ -109,6 +112,9 @@ void IConnector.Connect(IObservable source) { observable = observable.Replay().RefCount(); } + + observable = observable.TakeUntil(ShutdownSubject); + #if UNITY_EDITOR TargetConnectors .Select((connector, index) => (connector, index)) From 173e82bf1767e4f38708e72db7002b4d7afb285e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 11 Jan 2020 21:55:19 +0900 Subject: [PATCH 438/453] :clipboard: Bump up to v0.1.0-preview.41 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index e0b5dfc..8d8b29e 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.40", + "version": "0.1.0-preview.41", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From c0c06fa0cf046be9ccccb9a31148417602bf6040 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 11 Jan 2020 23:50:26 +0900 Subject: [PATCH 439/453] :sparkles: Tweak cancellation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ソースストリームに値が流れる度に、既存のストリームを OnCompleted するように変更 --- Assets/Scripts/ConnectorBase.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/ConnectorBase.cs b/Assets/Scripts/ConnectorBase.cs index fd5abef..534a245 100644 --- a/Assets/Scripts/ConnectorBase.cs +++ b/Assets/Scripts/ConnectorBase.cs @@ -76,7 +76,7 @@ protected virtual IEnumerable MergeMessageCollect protected virtual IEnumerable MergeMessageComposableAnnotations() => new IComposableMessageAnnotation[0]; - private ISubject ShutdownSubject { get; } = new Subject(); + protected ISubject CancellationSubject { get; } = new Subject(); void IConnector.Connect(IObservable source) { @@ -86,13 +86,15 @@ void IConnector.Connect(IObservable source) OnConnectSubject.Subscribe(_ => Logger.Log(this)).AddTo(this); } #endif - ShutdownSubject.OnNext(Unit.Default); + var observable = source .SelectMany( message => { StreamedMessages = message.StreamedMessages.ToList(); + CancellationSubject.OnNext(Unit.Default); + if (this is IMessageCollectable messageCollectable) { messageCollectable.GetMessageCollectableAnnotations().ToList().ForEach(x => x.Collect()); @@ -100,6 +102,7 @@ void IConnector.Connect(IObservable source) return (this as IConnector) .OnConnectAsObservable() + .TakeUntil(CancellationSubject) .Select(x => this is IMessageComposable messageComposable ? messageComposable.ComposeAll(x) : x) .Do(x => x.StreamedMessages?.Add(x)) #if UNITY_EDITOR @@ -108,13 +111,12 @@ void IConnector.Connect(IObservable source) ; } ); + if (TargetConnectors.Count() > 1) { observable = observable.Replay().RefCount(); } - observable = observable.TakeUntil(ShutdownSubject); - #if UNITY_EDITOR TargetConnectors .Select((connector, index) => (connector, index)) From 2fc7d8ad49f7639fe9cee4070aa706dbdc6787c2 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Sat, 11 Jan 2020 23:51:36 +0900 Subject: [PATCH 440/453] :sparkles: Complete stream completely MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 何らかのストリームを繋いでいる場合、源流も OnCompleted する必要がある --- Assets/Scripts/Connector/Event/AnimationEvent.cs | 3 +-- Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Connector/Event/AnimationEvent.cs b/Assets/Scripts/Connector/Event/AnimationEvent.cs index 057878a..0abf58b 100644 --- a/Assets/Scripts/Connector/Event/AnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/AnimationEvent.cs @@ -76,8 +76,7 @@ public override IObservable OnConnectAsObservable() { PrepareAnimationEvent(); return Subject - // Prevents the previous flow from being re-invoked when triggered multiple times - .Take(1) + .TakeUntil(CancellationSubject) .Select(this.CreateMessage); } diff --git a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs index 3485ea2..67165ee 100644 --- a/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs +++ b/Assets/Scripts/Connector/Event/SimpleAnimationEvent.cs @@ -74,6 +74,7 @@ public override IObservable OnConnectAsObservable() { ObserveSimpleAnimation(); return CurrentStateSubject + .TakeUntil(CancellationSubject) .Where(x => (AnimationClip == default || x.animationClip == AnimationClip) && x.eventType == SimpleAnimationEventType) .Select(x => this.CreateMessage(x, MessageParameterKey)); } @@ -86,6 +87,7 @@ private void ObserveSimpleAnimation() state .ObserveEveryValueChanged(x => (SimpleAnimation.IsPlaying(x.name), x.normalizedTime)) .Pairwise() + .TakeUntil(CancellationSubject) .SubscribeWithState(state, OnChangeAnimatorStateInfo) .AddTo(this); } From e24fd4d1949d1025a20eeb98d65f5bff1d3af9aa Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 4 Feb 2020 09:02:05 +0900 Subject: [PATCH 441/453] :clipboard: Upgrade packages --- Assets/package.json | 4 ++-- Packages/manifest.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/package.json b/Assets/package.json index 8d8b29e..c394781 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -14,11 +14,11 @@ "category": "", "dependencies": { "com.unity.simpleanimation": "1.0.0", - "com.stevevermeulen.extenject": "9.1.0", + "com.stevevermeulen.extenject": "9.1.0-5", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.2" + "dev.upm-packages.keyeventhandler": "1.0.0-preview.3" }, "repository": { "type": "git", diff --git a/Packages/manifest.json b/Packages/manifest.json index a04be2a..8ef5ec3 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -13,7 +13,7 @@ } ], "dependencies": { - "com.stevevermeulen.extenject": "9.1.0", + "com.stevevermeulen.extenject": "9.1.0-5", "com.unity.2d.sprite": "1.0.0", "com.unity.2d.tilemap": "1.0.0", "com.unity.ads": "2.0.8", @@ -32,7 +32,7 @@ "com.unity.ugui": "1.0.0", "com.unity.xr.legacyinputhelpers": "2.0.2", "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.2", + "dev.upm-packages.keyeventhandler": "1.0.0-preview.3", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "com.unity.modules.ai": "1.0.0", From 4dd55a75324f30c6528d8e4b210ecb78cffa2c32 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 4 Feb 2020 09:02:25 +0900 Subject: [PATCH 442/453] :clipboard: Bump up version to v0.1.0-preview.42 --- Assets/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/package.json b/Assets/package.json index c394781..eddf15c 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.41", + "version": "0.1.0-preview.42", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 1babd6d63693a9016bfb03ea371472de4dce984c Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 6 Oct 2020 15:14:51 +0900 Subject: [PATCH 443/453] :clipboard: Upgrade Unity 2020.1.7f1 --- ProjectSettings/ProjectVersion.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 87079c1..402c0e3 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2019.2.11f1 -m_EditorVersionWithRevision: 2019.2.11f1 (5f859a4cfee5) +m_EditorVersion: 2020.1.7f1 +m_EditorVersionWithRevision: 2020.1.7f1 (064ffcdb64ad) From 50c3abfd03ee8e27767d5da84b65226d2b80a74a Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 6 Oct 2020 15:15:19 +0900 Subject: [PATCH 444/453] :clipboard: Apply changes to open with Unity 2020.1.7f1 --- .../Runtime/UniFlow.Tests.Runtime.asmdef | 6 +- Packages/manifest.json | 26 +- Packages/packages-lock.json | 458 ++++++++++++++++++ ProjectSettings/EditorSettings.asset | 11 +- ProjectSettings/PackageManagerSettings.asset | 63 +++ ProjectSettings/VersionControlSettings.asset | 8 + UserSettings/EditorUserSettings.asset | 19 + 7 files changed, 574 insertions(+), 17 deletions(-) create mode 100644 Packages/packages-lock.json create mode 100644 ProjectSettings/PackageManagerSettings.asset create mode 100644 ProjectSettings/VersionControlSettings.asset create mode 100644 UserSettings/EditorUserSettings.asset diff --git a/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef index b1777b7..94fff2d 100644 --- a/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef +++ b/Assets/Tests/Runtime/UniFlow.Tests.Runtime.asmdef @@ -4,7 +4,6 @@ "GUID:04f82f1ff3df44e29a1b2cce70510c34", "GUID:560b04d1a97f54a4e82edc0cbbb69285", "GUID:0d8beb7f090555447a6cf5ce9e54dbb4", - "GUID:a2f2239355369ba4fb6909aeaa41def5", "GUID:aff632302a0b84b498c3f33f7639b4d3", "GUID:27619889b8ba8c24980f49ee34dbb44a", "GUID:0acc523941302664db1f4e527237feb3" @@ -15,11 +14,12 @@ "overrideReferences": true, "precompiledReferences": [ "nunit.framework.dll", - "Zenject-TestFramework.dll" + "Zenject-TestFramework-usage.dll" ], "autoReferenced": false, "defineConstraints": [ "UNITY_INCLUDE_TESTS" ], - "versionDefines": [] + "versionDefines": [], + "noEngineReferences": false } \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json index 8ef5ec3..9085e4d 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -13,24 +13,24 @@ } ], "dependencies": { - "com.stevevermeulen.extenject": "9.1.0-5", + "com.stevevermeulen.extenject": "9.1.2", "com.unity.2d.sprite": "1.0.0", "com.unity.2d.tilemap": "1.0.0", - "com.unity.ads": "2.0.8", - "com.unity.analytics": "3.3.2", - "com.unity.collab-proxy": "1.2.16", + "com.unity.ads": "3.4.9", + "com.unity.analytics": "3.3.5", + "com.unity.collab-proxy": "1.3.9", "com.unity.ext.nunit": "1.0.0", - "com.unity.ide.rider": "1.1.0", - "com.unity.ide.vscode": "1.1.2", - "com.unity.multiplayer-hlapi": "1.0.2", - "com.unity.package-manager-ui": "2.2.0", - "com.unity.purchasing": "2.0.6", + "com.unity.ide.rider": "1.2.1", + "com.unity.ide.visualstudio": "2.0.3", + "com.unity.ide.vscode": "1.2.2", + "com.unity.multiplayer-hlapi": "1.0.6", + "com.unity.purchasing": "2.1.1", "com.unity.simpleanimation": "1.0.0", - "com.unity.test-framework": "1.0.13", - "com.unity.textmeshpro": "2.0.1", - "com.unity.timeline": "1.1.0", + "com.unity.test-framework": "1.1.16", + "com.unity.textmeshpro": "3.0.1", + "com.unity.timeline": "1.3.6", "com.unity.ugui": "1.0.0", - "com.unity.xr.legacyinputhelpers": "2.0.2", + "com.unity.xr.legacyinputhelpers": "2.1.4", "dev.monry.unirx-observabletween": "0.0.1-preview.6", "dev.upm-packages.keyeventhandler": "1.0.0-preview.3", "jp.cysharp.unirx": "7.1.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json new file mode 100644 index 0000000..94dc878 --- /dev/null +++ b/Packages/packages-lock.json @@ -0,0 +1,458 @@ +{ + "dependencies": { + "com.stevevermeulen.extenject": { + "version": "9.1.2", + "depth": 0, + "source": "registry", + "dependencies": { + "jp.cysharp.unirx": "7.1.0", + "dev.upm-packages.moq": "4.13.3", + "dev.upm-packages.nsubstitute": "2.0.4" + }, + "url": "https://upm-packages.dev" + }, + "com.unity.2d.sprite": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.2d.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.ads": { + "version": "3.4.9", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.analytics": { + "version": "3.3.5", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.collab-proxy": { + "version": "1.3.9", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ext.nunit": { + "version": "1.0.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ide.rider": { + "version": "1.2.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.test-framework": "1.1.1" + }, + "url": "https://packages.unity.com" + }, + "com.unity.ide.visualstudio": { + "version": "2.0.3", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ide.vscode": { + "version": "1.2.2", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.multiplayer-hlapi": { + "version": "1.0.6", + "depth": 0, + "source": "registry", + "dependencies": { + "nuget.mono-cecil": "0.1.6-preview" + }, + "url": "https://packages.unity.com" + }, + "com.unity.purchasing": { + "version": "2.1.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.simpleanimation": { + "version": "1.0.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://upm-packages.dev" + }, + "com.unity.test-framework": { + "version": "1.1.16", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ext.nunit": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.textmeshpro": { + "version": "3.0.1", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.ugui": "1.0.0" + }, + "url": "https://packages.unity.com" + }, + "com.unity.timeline": { + "version": "1.3.6", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.ugui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0" + } + }, + "com.unity.xr.legacyinputhelpers": { + "version": "2.1.4", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "dev.monry.unirx-observabletween": { + "version": "0.0.1-preview.6", + "depth": 0, + "source": "registry", + "dependencies": { + "jp.cysharp.unirx": "7.1.0" + }, + "url": "https://upm-packages.dev" + }, + "dev.upm-packages.keyeventhandler": { + "version": "1.0.0-preview.3", + "depth": 0, + "source": "registry", + "dependencies": { + "com.stevevermeulen.extenject": "9.1.0-5", + "jp.cysharp.unirx": "7.1.0" + }, + "url": "https://upm-packages.dev" + }, + "dev.upm-packages.moq": { + "version": "4.13.3", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://upm-packages.dev" + }, + "dev.upm-packages.nsubstitute": { + "version": "2.0.4", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://upm-packages.dev" + }, + "jp.cysharp.unirx": { + "version": "7.1.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://upm-packages.dev" + }, + "jp.cysharp.unitask": { + "version": "1.0.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://upm-packages.dev" + }, + "nuget.mono-cecil": { + "version": "0.1.6-preview", + "depth": 1, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, + "com.unity.modules.ai": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.androidjni": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.animation": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.assetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.audio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.cloth": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.director": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.animation": "1.0.0" + } + }, + "com.unity.modules.imageconversion": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.imgui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.jsonserialize": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.particlesystem": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.physics2d": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.screencapture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.subsystems": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.terrain": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.terrainphysics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.terrain": "1.0.0" + } + }, + "com.unity.modules.tilemap": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics2d": "1.0.0" + } + }, + "com.unity.modules.ui": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.uielements": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.uielementsnative": "1.0.0" + } + }, + "com.unity.modules.uielementsnative": { + "version": "1.0.0", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.umbra": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unityanalytics": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + } + }, + "com.unity.modules.unitywebrequest": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.unitywebrequestassetbundle": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestaudio": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.audio": "1.0.0" + } + }, + "com.unity.modules.unitywebrequesttexture": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.unitywebrequestwww": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.unitywebrequest": "1.0.0", + "com.unity.modules.unitywebrequestassetbundle": "1.0.0", + "com.unity.modules.unitywebrequestaudio": "1.0.0", + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.assetbundle": "1.0.0", + "com.unity.modules.imageconversion": "1.0.0" + } + }, + "com.unity.modules.vehicles": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0" + } + }, + "com.unity.modules.video": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.audio": "1.0.0", + "com.unity.modules.ui": "1.0.0", + "com.unity.modules.unitywebrequest": "1.0.0" + } + }, + "com.unity.modules.vr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.xr": "1.0.0" + } + }, + "com.unity.modules.wind": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": {} + }, + "com.unity.modules.xr": { + "version": "1.0.0", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.modules.physics": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0", + "com.unity.modules.subsystems": "1.0.0" + } + } + } +} diff --git a/ProjectSettings/EditorSettings.asset b/ProjectSettings/EditorSettings.asset index b269790..d491e5f 100644 --- a/ProjectSettings/EditorSettings.asset +++ b/ProjectSettings/EditorSettings.asset @@ -3,7 +3,7 @@ --- !u!159 &1 EditorSettings: m_ObjectHideFlags: 0 - serializedVersion: 8 + serializedVersion: 9 m_ExternalVersionControlSupport: Hidden Meta Files m_SerializationMode: 2 m_LineEndingsForNewScripts: 1 @@ -23,4 +23,13 @@ EditorSettings: m_EnableTextureStreamingInEditMode: 1 m_EnableTextureStreamingInPlayMode: 1 m_AsyncShaderCompilation: 1 + m_EnterPlayModeOptionsEnabled: 0 + m_EnterPlayModeOptions: 3 m_ShowLightmapResolutionOverlay: 1 + m_UseLegacyProbeSampleCount: 1 + m_AssetPipelineMode: 1 + m_CacheServerMode: 0 + m_CacheServerEndpoint: + m_CacheServerNamespacePrefix: default + m_CacheServerEnableDownload: 1 + m_CacheServerEnableUpload: 1 diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset new file mode 100644 index 0000000..7681fdf --- /dev/null +++ b/ProjectSettings/PackageManagerSettings.asset @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_EnablePreviewPackages: 0 + m_EnablePackageDependencies: 0 + m_AdvancedSettingsExpanded: 1 + m_ScopedRegistriesSettingsExpanded: 1 + oneTimeWarningShown: 0 + m_Registries: + - m_Id: main + m_Name: + m_Url: https://packages.unity.com + m_Scopes: [] + m_IsDefault: 1 + m_Capabilities: 7 + - m_Id: scoped:Unofficial Unity Package Manager Registry + m_Name: Unofficial Unity Package Manager Registry + m_Url: https://upm-packages.dev + m_Scopes: + - com.unity.simpleanimation + - com.stevevermeulen + - jp.cysharp + - dev.monry + - dev.upm-packages + m_IsDefault: 0 + m_Capabilities: 0 + m_UserSelectedRegistryName: + m_UserAddingNewScopedRegistry: 0 + m_RegistryInfoDraft: + m_ErrorMessage: + m_Original: + m_Id: scoped:Unofficial Unity Package Manager Registry + m_Name: Unofficial Unity Package Manager Registry + m_Url: https://upm-packages.dev + m_Scopes: + - com.unity.simpleanimation + - com.stevevermeulen + - jp.cysharp + - dev.monry + - dev.upm-packages + m_IsDefault: 0 + m_Capabilities: 0 + m_Modified: 0 + m_Name: Unofficial Unity Package Manager Registry + m_Url: https://upm-packages.dev + m_Scopes: + - com.unity.simpleanimation + - com.stevevermeulen + - jp.cysharp + - dev.monry + - dev.upm-packages + m_SelectedScopeIndex: 0 diff --git a/ProjectSettings/VersionControlSettings.asset b/ProjectSettings/VersionControlSettings.asset new file mode 100644 index 0000000..dca2881 --- /dev/null +++ b/ProjectSettings/VersionControlSettings.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!890905787 &1 +VersionControlSettings: + m_ObjectHideFlags: 0 + m_Mode: Visible Meta Files + m_CollabEditorSettings: + inProgressEnabled: 1 diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset new file mode 100644 index 0000000..4681d1d --- /dev/null +++ b/UserSettings/EditorUserSettings.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!162 &1 +EditorUserSettings: + m_ObjectHideFlags: 0 + serializedVersion: 4 + m_ConfigSettings: + vcSharedLogLevel: + value: 0d5e400f0650 + flags: 0 + m_VCAutomaticAdd: 1 + m_VCDebugCom: 0 + m_VCDebugCmd: 0 + m_VCDebugOut: 0 + m_SemanticMergeMode: 2 + m_VCShowFailedCheckout: 1 + m_VCOverwriteFailedCheckoutAssets: 1 + m_VCOverlayIcons: 1 + m_VCAllowAsyncUpdate: 0 From 2651cf388dc302ced8a1bfb13a090baa0bf21ca8 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 6 Oct 2020 15:25:48 +0900 Subject: [PATCH 445/453] :clipboard: Fix Zenject version --- Assets/package.json | 4 ++-- Packages/manifest.json | 2 +- Packages/packages-lock.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Assets/package.json b/Assets/package.json index eddf15c..8b00fbc 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -14,11 +14,11 @@ "category": "", "dependencies": { "com.unity.simpleanimation": "1.0.0", - "com.stevevermeulen.extenject": "9.1.0-5", + "com.stevevermeulen.extenject": "9.1.2", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.3" + "dev.upm-packages.keyeventhandler": "1.0.0-preview.4" }, "repository": { "type": "git", diff --git a/Packages/manifest.json b/Packages/manifest.json index 9085e4d..00b5027 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -32,7 +32,7 @@ "com.unity.ugui": "1.0.0", "com.unity.xr.legacyinputhelpers": "2.1.4", "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.3", + "dev.upm-packages.keyeventhandler": "1.0.0-preview.4", "jp.cysharp.unirx": "7.1.0", "jp.cysharp.unitask": "1.0.0", "com.unity.modules.ai": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 94dc878..75885a6 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -156,11 +156,11 @@ "url": "https://upm-packages.dev" }, "dev.upm-packages.keyeventhandler": { - "version": "1.0.0-preview.3", + "version": "1.0.0-preview.4", "depth": 0, "source": "registry", "dependencies": { - "com.stevevermeulen.extenject": "9.1.0-5", + "com.stevevermeulen.extenject": "9.1.2", "jp.cysharp.unirx": "7.1.0" }, "url": "https://upm-packages.dev" From 9b14e70e18d3213c7e14fd8a8a62414ad7f9f3ff Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Tue, 6 Oct 2020 15:31:13 +0900 Subject: [PATCH 446/453] :clipboard: Add GitHub Actions to deploy upm package --- .github/workflows/publish-upm-package.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/publish-upm-package.yml diff --git a/.github/workflows/publish-upm-package.yml b/.github/workflows/publish-upm-package.yml new file mode 100644 index 0000000..c5ba031 --- /dev/null +++ b/.github/workflows/publish-upm-package.yml @@ -0,0 +1,17 @@ +name: Publish UPM Package + +on: + release: + types: [published] + +jobs: + publish: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: monry/actions-upm-publish@v1 + with: + npm_registry_url: ${{ secrets.NPM_REGISTRY_URL }} + npm_auth_token: ${{ secrets.NPM_AUTH_TOKEN }} From 78ffbfba85be2194417f5428ef414c33cb894936 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 6 Oct 2020 06:46:13 +0000 Subject: [PATCH 447/453] :up: Bump up version: v0.1.0-preview.43 --- Assets/CHANGELOG.md | 8 ++++++++ Assets/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index c6eb034..d6236dc 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.1.0-preview.43] - 2020-10-06 + +Fix upm dependencies + +### Fixes + +- #219 Fix Zenject dependencies + ## [0.1.0-preview.24] - 2019-10-04 ### Implementations diff --git a/Assets/package.json b/Assets/package.json index 8b00fbc..394d513 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.42", + "version": "0.1.0-preview.43", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 3b11894a19a70728c89e268e8fd147d12e2d2ab7 Mon Sep 17 00:00:00 2001 From: Shu Masuda Date: Wed, 18 Nov 2020 17:41:06 +0900 Subject: [PATCH 448/453] :wrench: RuntimePlatformProvider didn't work --- .../CurrentRuntimePlatformProvider.cs | 26 +++++++++++++++++++ ...=> CurrentRuntimePlatformProvider.cs.meta} | 0 .../ValueProvider/RuntimePlatformProvider.cs | 9 ------- Assets/Scripts/ConnectorType.cs | 2 +- 4 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 Assets/Scripts/Connector/ValueProvider/CurrentRuntimePlatformProvider.cs rename Assets/Scripts/Connector/ValueProvider/{RuntimePlatformProvider.cs.meta => CurrentRuntimePlatformProvider.cs.meta} (100%) delete mode 100644 Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs diff --git a/Assets/Scripts/Connector/ValueProvider/CurrentRuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/CurrentRuntimePlatformProvider.cs new file mode 100644 index 0000000..1f18513 --- /dev/null +++ b/Assets/Scripts/Connector/ValueProvider/CurrentRuntimePlatformProvider.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using UniFlow.Utility; +using UnityEngine; + +namespace UniFlow.Connector.ValueProvider +{ + [AddComponentMenu("UniFlow/ValueProvider/CurrentRuntimePlatformProvider", (int) ConnectorType.ValueProviderCurrentRuntimePlatform)] + public class CurrentRuntimePlatformProvider : ConnectorBase, IMessageComposable + { + private const string MessageParameterKey = "Value"; + + private RuntimePlatform Value => Application.platform; + + public override IObservable OnConnectAsObservable() + { + return ObservableFactory.ReturnMessage(this, MessageParameterKey, Value); + } + + IEnumerable IMessageComposable.GetMessageComposableAnnotations() => + new[] + { + ComposableMessageAnnotationFactory.Create(() => Value, MessageParameterKey), + }; + } +} diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs.meta b/Assets/Scripts/Connector/ValueProvider/CurrentRuntimePlatformProvider.cs.meta similarity index 100% rename from Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs.meta rename to Assets/Scripts/Connector/ValueProvider/CurrentRuntimePlatformProvider.cs.meta diff --git a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs b/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs deleted file mode 100644 index d53b4e3..0000000 --- a/Assets/Scripts/Connector/ValueProvider/RuntimePlatformProvider.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace UniFlow.Connector.ValueProvider -{ - [AddComponentMenu("UniFlow/ValueProvider/RuntimePlatformProvider", (int) ConnectorType.ValueProviderRuntimePlatform)] - public class RuntimePlatformProvider : ProviderBase - { - } -} diff --git a/Assets/Scripts/ConnectorType.cs b/Assets/Scripts/ConnectorType.cs index ae0f409..e930ee1 100644 --- a/Assets/Scripts/ConnectorType.cs +++ b/Assets/Scripts/ConnectorType.cs @@ -64,7 +64,7 @@ public enum ConnectorType ValueProviderVector3Int, ValueProviderColor, ValueProviderColor32, - ValueProviderRuntimePlatform, + ValueProviderCurrentRuntimePlatform, CustomValueProvider, ObjectListSelector = 1500, From b51f36c08fa06c859acfa460e6bc60a74b200c14 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Wed, 18 Nov 2020 09:04:09 +0000 Subject: [PATCH 449/453] :up: Bump up version: v0.1.0-preview.44 --- Assets/CHANGELOG.md | 8 ++++++++ Assets/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index d6236dc..184ac80 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.1.0-preview.44] - 2020-11-18 + +Add CurrentRuntimePlatformProvider + +### Features + +- #221 Add CurrentRuntimePlatformProvider / Thanks @milkcocoa !! + ## [0.1.0-preview.43] - 2020-10-06 Fix upm dependencies diff --git a/Assets/package.json b/Assets/package.json index 394d513..a07ce33 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.43", + "version": "0.1.0-preview.44", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { From 72a93a7d3dd4cea2829dcb067af9bec2e9300a1e Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 21 Jan 2021 17:39:44 +0900 Subject: [PATCH 450/453] :clipboard: Open with Unity 2020.2 --- ProjectSettings/PackageManagerSettings.asset | 9 +++------ ProjectSettings/ProjectVersion.txt | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset index 7681fdf..b379555 100644 --- a/ProjectSettings/PackageManagerSettings.asset +++ b/ProjectSettings/PackageManagerSettings.asset @@ -28,9 +28,8 @@ MonoBehaviour: m_Name: Unofficial Unity Package Manager Registry m_Url: https://upm-packages.dev m_Scopes: + - com.stevevermeulen.extenject - com.unity.simpleanimation - - com.stevevermeulen - - jp.cysharp - dev.monry - dev.upm-packages m_IsDefault: 0 @@ -44,9 +43,8 @@ MonoBehaviour: m_Name: Unofficial Unity Package Manager Registry m_Url: https://upm-packages.dev m_Scopes: + - com.stevevermeulen.extenject - com.unity.simpleanimation - - com.stevevermeulen - - jp.cysharp - dev.monry - dev.upm-packages m_IsDefault: 0 @@ -55,9 +53,8 @@ MonoBehaviour: m_Name: Unofficial Unity Package Manager Registry m_Url: https://upm-packages.dev m_Scopes: + - com.stevevermeulen.extenject - com.unity.simpleanimation - - com.stevevermeulen - - jp.cysharp - dev.monry - dev.upm-packages m_SelectedScopeIndex: 0 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 402c0e3..a328ffd 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2020.1.7f1 -m_EditorVersionWithRevision: 2020.1.7f1 (064ffcdb64ad) +m_EditorVersion: 2020.2.1f1 +m_EditorVersionWithRevision: 2020.2.1f1 (270dd8c3da1c) From e8c0a385317c270f68fa9acaca83e40b7da357ab Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 21 Jan 2021 17:40:51 +0900 Subject: [PATCH 451/453] :clipboard: Use GitHub version --- Assets/package.json | 10 +++---- Packages/manifest.json | 29 +++++++++--------- Packages/packages-lock.json | 60 +++++++++++++++++-------------------- 3 files changed, 46 insertions(+), 53 deletions(-) diff --git a/Assets/package.json b/Assets/package.json index a07ce33..0816a94 100644 --- a/Assets/package.json +++ b/Assets/package.json @@ -1,7 +1,7 @@ { "name": "dev.monry.uniflow", "displayName": "UniFlow", - "version": "0.1.0-preview.44", + "version": "0.1.0-preview.45", "unity": "2019.2", "description": "UniFlow is a library that can connect various Unity events including user interaction without writing any C# script. Processes such as \"Tutorial that accepts user interaction\" and \"Waiting for the end of playback of Animation, Audio, Timeline, etc.\" can be implemented easily.", "author": { @@ -14,11 +14,9 @@ "category": "", "dependencies": { "com.unity.simpleanimation": "1.0.0", - "com.stevevermeulen.extenject": "9.1.2", - "jp.cysharp.unirx": "7.1.0", - "jp.cysharp.unitask": "1.0.0", - "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.4" + "com.stevevermeulen.extenject": "9.1.3", + "dev.monry.unirx-observabletween": "0.1.0", + "dev.upm-packages.keyeventhandler": "1.1.1" }, "repository": { "type": "git", diff --git a/Packages/manifest.json b/Packages/manifest.json index 00b5027..0c892b8 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -4,37 +4,36 @@ "name": "Unofficial Unity Package Manager Registry", "url": "https://upm-packages.dev", "scopes": [ + "com.stevevermeulen.extenject", "com.unity.simpleanimation", - "com.stevevermeulen", - "jp.cysharp", "dev.monry", "dev.upm-packages" ] } ], "dependencies": { - "com.stevevermeulen.extenject": "9.1.2", + "com.cysharp.unitask": "git+ssh://git@github.com/cysharp/UniTask.git?path=/src/UniTask/Assets/Plugins/UniTask/", + "com.neuecc.unirx": "git+ssh://git@github.com/neuecc/UniRx.git?path=Assets/Plugins/UniRx/Scripts/", + "com.stevevermeulen.extenject": "9.1.3", "com.unity.2d.sprite": "1.0.0", "com.unity.2d.tilemap": "1.0.0", - "com.unity.ads": "3.4.9", - "com.unity.analytics": "3.3.5", + "com.unity.ads": "3.5.2", + "com.unity.analytics": "3.5.3", "com.unity.collab-proxy": "1.3.9", - "com.unity.ext.nunit": "1.0.0", - "com.unity.ide.rider": "1.2.1", - "com.unity.ide.visualstudio": "2.0.3", - "com.unity.ide.vscode": "1.2.2", + "com.unity.ext.nunit": "1.0.5", + "com.unity.ide.rider": "2.0.7", + "com.unity.ide.visualstudio": "2.0.5", + "com.unity.ide.vscode": "1.2.3", "com.unity.multiplayer-hlapi": "1.0.6", "com.unity.purchasing": "2.1.1", "com.unity.simpleanimation": "1.0.0", - "com.unity.test-framework": "1.1.16", + "com.unity.test-framework": "1.1.19", "com.unity.textmeshpro": "3.0.1", "com.unity.timeline": "1.3.6", "com.unity.ugui": "1.0.0", - "com.unity.xr.legacyinputhelpers": "2.1.4", - "dev.monry.unirx-observabletween": "0.0.1-preview.6", - "dev.upm-packages.keyeventhandler": "1.0.0-preview.4", - "jp.cysharp.unirx": "7.1.0", - "jp.cysharp.unitask": "1.0.0", + "com.unity.xr.legacyinputhelpers": "2.1.6", + "dev.monry.unirx-observabletween": "0.1.0", + "dev.upm-packages.keyeventhandler": "1.1.1", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 75885a6..8eef657 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,11 +1,24 @@ { "dependencies": { + "com.cysharp.unitask": { + "version": "git+ssh://git@github.com/cysharp/UniTask.git?path=/src/UniTask/Assets/Plugins/UniTask/", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "7d21a75ea8abbc3ed43afedeb450c8d44f244ece" + }, + "com.neuecc.unirx": { + "version": "git+ssh://git@github.com/neuecc/UniRx.git?path=Assets/Plugins/UniRx/Scripts/", + "depth": 0, + "source": "git", + "dependencies": {}, + "hash": "284d5c50d3f1ddd9fa7df3d382ea904732a9c2ff" + }, "com.stevevermeulen.extenject": { - "version": "9.1.2", + "version": "9.1.3", "depth": 0, "source": "registry", "dependencies": { - "jp.cysharp.unirx": "7.1.0", "dev.upm-packages.moq": "4.13.3", "dev.upm-packages.nsubstitute": "2.0.4" }, @@ -24,7 +37,7 @@ "dependencies": {} }, "com.unity.ads": { - "version": "3.4.9", + "version": "3.5.2", "depth": 0, "source": "registry", "dependencies": { @@ -33,7 +46,7 @@ "url": "https://packages.unity.com" }, "com.unity.analytics": { - "version": "3.3.5", + "version": "3.5.3", "depth": 0, "source": "registry", "dependencies": { @@ -49,14 +62,14 @@ "url": "https://packages.unity.com" }, "com.unity.ext.nunit": { - "version": "1.0.0", + "version": "1.0.5", "depth": 0, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "com.unity.ide.rider": { - "version": "1.2.1", + "version": "2.0.7", "depth": 0, "source": "registry", "dependencies": { @@ -65,14 +78,14 @@ "url": "https://packages.unity.com" }, "com.unity.ide.visualstudio": { - "version": "2.0.3", + "version": "2.0.5", "depth": 0, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "com.unity.ide.vscode": { - "version": "1.2.2", + "version": "1.2.3", "depth": 0, "source": "registry", "dependencies": {}, @@ -104,11 +117,11 @@ "url": "https://upm-packages.dev" }, "com.unity.test-framework": { - "version": "1.1.16", + "version": "1.1.19", "depth": 0, "source": "registry", "dependencies": { - "com.unity.ext.nunit": "1.0.0", + "com.unity.ext.nunit": "1.0.5", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, @@ -140,28 +153,25 @@ } }, "com.unity.xr.legacyinputhelpers": { - "version": "2.1.4", + "version": "2.1.6", "depth": 0, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "dev.monry.unirx-observabletween": { - "version": "0.0.1-preview.6", + "version": "0.1.0", "depth": 0, "source": "registry", - "dependencies": { - "jp.cysharp.unirx": "7.1.0" - }, + "dependencies": {}, "url": "https://upm-packages.dev" }, "dev.upm-packages.keyeventhandler": { - "version": "1.0.0-preview.4", + "version": "1.1.1", "depth": 0, "source": "registry", "dependencies": { - "com.stevevermeulen.extenject": "9.1.2", - "jp.cysharp.unirx": "7.1.0" + "com.stevevermeulen.extenject": "9.1.3" }, "url": "https://upm-packages.dev" }, @@ -179,20 +189,6 @@ "dependencies": {}, "url": "https://upm-packages.dev" }, - "jp.cysharp.unirx": { - "version": "7.1.0", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://upm-packages.dev" - }, - "jp.cysharp.unitask": { - "version": "1.0.0", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://upm-packages.dev" - }, "nuget.mono-cecil": { "version": "0.1.6-preview", "depth": 1, From 59237a9cd9df6a32f3a9ac779488f0e6ff69cd78 Mon Sep 17 00:00:00 2001 From: Tetsuya Mori Date: Thu, 21 Jan 2021 17:41:03 +0900 Subject: [PATCH 452/453] :beetle: Follow breaking changes in UniTask --- Assets/Scripts/Connector/Complex/NumberImageRenderer.cs | 2 +- Assets/Scripts/Connector/Controller/LoadSceneBase.cs | 2 +- Assets/Scripts/Connector/Controller/UnloadSceneBase.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs index 6952d6e..580b4ae 100644 --- a/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs +++ b/Assets/Scripts/Connector/Complex/NumberImageRenderer.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using Cysharp.Threading.Tasks; using UniRx; -using UniRx.Async; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.UI; diff --git a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs index e5ceb6d..ad03f77 100644 --- a/Assets/Scripts/Connector/Controller/LoadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/LoadSceneBase.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; +using Cysharp.Threading.Tasks; using JetBrains.Annotations; using UniRx; -using UniRx.Async; using UnityEngine.SceneManagement; using Zenject; diff --git a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs index 9b10ded..42a303e 100644 --- a/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs +++ b/Assets/Scripts/Connector/Controller/UnloadSceneBase.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; +using Cysharp.Threading.Tasks; using JetBrains.Annotations; using UniRx; -using UniRx.Async; using UnityEngine.SceneManagement; using Zenject; From 0dec7e223c35bf63a3d921c1d88a71051508662d Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 21 Jan 2021 08:45:19 +0000 Subject: [PATCH 453/453] :up: Bump up version: v0.1.0-preview.45 --- Assets/CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Assets/CHANGELOG.md b/Assets/CHANGELOG.md index 184ac80..8d6e00f 100644 --- a/Assets/CHANGELOG.md +++ b/Assets/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.1.0-preview.45] - 2021-01-21 + +Reference UniRx on GitHub instead of Self-hosted registry + +### Changes + +- Reference UniRx on GitHub instead of Self-hosted registry + ## [0.1.0-preview.44] - 2020-11-18 Add CurrentRuntimePlatformProvider