Skip to content

Commit

Permalink
✨ feat: FloatMultiDriver
Browse files Browse the repository at this point in the history
  • Loading branch information
esnya committed Aug 19, 2021
1 parent 6b59ef6 commit 6151af9
Show file tree
Hide file tree
Showing 12 changed files with 1,854 additions and 122 deletions.
1,075 changes: 1,075 additions & 0 deletions Assets/InariUdon/Driver/FloatMultiValueDriver.asset

Large diffs are not rendered by default.

8 changes: 8 additions & 0 deletions Assets/InariUdon/Driver/FloatMultiValueDriver.asset.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

96 changes: 96 additions & 0 deletions Assets/InariUdon/Driver/FloatMultiValueDriver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#pragma warning disable IDE1006

using UdonSharp;
using UdonToolkit;
using UnityEngine;
using VRC.Udon;

namespace InariUdon.Driver
{
[UdonBehaviourSyncMode(BehaviourSyncMode.NoVariableSync)]
public class FloatMultiValueDriver : UdonSharpBehaviour
{
public float value;
public bool castToInt = false;

[SectionHeader("Write UdonBehaviour ProgramVariables")]
public bool writeProgramVariables = false;
[HideIf("@!writeProgramVariables")] public bool sendEvent = false;
[HideIf("@!writeProgramVariables"), HideIf("@!sendEvent")] public bool ignoreFirstEvent = false;
[HideIf("@!writeProgramVariables")] public bool findTargetFromChildren = false;
[HideIf("@!writeProgramVariables"), HideIf("@findTargetFromChildren"), ListView("ProgramVariable Targets")] public UdonSharpBehaviour[] behaviours = {};
[HideIf("@!writeProgramVariables"), HideIf("@findTargetFromChildren"), ListView("ProgramVariable Targets"), Popup("programVariable", "@behaviours", true)] public string[] variableNames = {};
[HideIf("@!writeProgramVariables"), HideIf("@findTargetFromChildren"), HideIf("@!sendEvent"), ListView("ProgramVariable Targets"), Popup("behaviour", "@behaviours", true)] public string[] eventNames = {};
[HideIf("@!writeProgramVariables"), HideIf("@!findTargetFromChildren")] public Transform behaviourParent;
[HideIf("@!writeProgramVariables"), HideIf("@!findTargetFromChildren")] public string variableName;
[HideIf("@!writeProgramVariables"), HideIf("@!findTargetFromChildren"), HideIf("@!sendEvent")] public string eventName;

private bool isFirst = true;

private void Start()
{
if (writeProgramVariables && findTargetFromChildren)
{
var targetCount = 0;
for (int i = 0; i < behaviourParent.childCount; i++)
{
var udon = (UdonSharpBehaviour)behaviourParent.GetChild(i).GetComponent(typeof(UdonBehaviour));
if (udon != null) targetCount++;
}

behaviours = new UdonSharpBehaviour[targetCount];
variableNames = new string[targetCount];
eventNames = new string[targetCount];
for (int i = 0; i < targetCount; i++)
{
behaviours[i] = (UdonSharpBehaviour)behaviourParent.GetChild(i).GetComponent(typeof(UdonBehaviour));
variableNames[i] = variableName;
eventNames[i] = eventName;
}
}
}

private void WriteProgramVariables()
{
if (!writeProgramVariables) return;

var variableLength = Mathf.Min(behaviours.Length, variableNames.Length);
for (int i = 0; i < variableLength; i++)
{
var target = behaviours[i];
if (target == null) continue;

if (castToInt) target.SetProgramVariable(variableNames[i], (int)value);
else target.SetProgramVariable(variableNames[i], value);
}

if (!sendEvent) return;

if (ignoreFirstEvent && isFirst)
{
isFirst = false;
return;
}

var eventLength = Mathf.Min(variableLength, eventNames.Length);
for (int i = 0; i < eventLength; i++)
{
var target = behaviours[i];
if (target == null) continue;
target.SendCustomEvent(eventNames[i]);
}
}

public void _ValueChanged()
{
WriteProgramVariables();
}

public void _SetValue(float value)
{
this.value = value;
_ValueChanged();
}

}
}
11 changes: 11 additions & 0 deletions Assets/InariUdon/Driver/FloatMultiValueDriver.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

216 changes: 213 additions & 3 deletions Assets/InariUdon/Sync/ObjectSyncRespawner.asset
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,13 @@ MonoBehaviour:
Data:
- Name:
Entry: 12
Data: 1
Data: 4
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: targets
Data: findObjectSyncFromChildren
- Name: $v
Entry: 7
Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
Expand All @@ -59,6 +59,69 @@ MonoBehaviour:
- Name: internalType
Entry: 7
Data: 4|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: System.Boolean, mscorlib
- Name:
Entry: 8
Data:
- Name: declarationType
Entry: 3
Data: 1
- Name: syncMode
Entry: 3
Data: 0
- Name: symbolResolvedTypeName
Entry: 1
Data: SystemBoolean
- Name: symbolOriginalName
Entry: 1
Data: findObjectSyncFromChildren
- Name: symbolUniqueName
Entry: 1
Data: findObjectSyncFromChildren
- Name: symbolDefaultValue
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: fieldAttributes
Entry: 7
Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 0
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name: userBehaviourSource
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: targets
- Name: $v
Entry: 7
Data: 6|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: fieldSymbol
Entry: 7
Data: 7|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor
- Name: internalType
Entry: 7
Data: 8|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: VRC.SDK3.Components.VRCObjectSync[], VRCSDK3
Expand Down Expand Up @@ -88,10 +151,157 @@ MonoBehaviour:
Data:
- Name: fieldAttributes
Entry: 7
Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
Data: 9|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 10|UdonToolkit.HideIfAttribute, UdonToolkitRuntime
- Name: methodName
Entry: 1
Data: '@findObjectSyncFromChildren'
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name: userBehaviourSource
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: targetsParent
- Name: $v
Entry: 7
Data: 11|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: fieldSymbol
Entry: 7
Data: 12|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor
- Name: internalType
Entry: 7
Data: 13|System.RuntimeType, mscorlib
- Name:
Entry: 1
Data: UnityEngine.GameObject, UnityEngine.CoreModule
- Name:
Entry: 8
Data:
- Name: declarationType
Entry: 3
Data: 1
- Name: syncMode
Entry: 3
Data: 0
- Name: symbolResolvedTypeName
Entry: 1
Data: UnityEngineGameObject
- Name: symbolOriginalName
Entry: 1
Data: targetsParent
- Name: symbolUniqueName
Entry: 1
Data: targetsParent
- Name: symbolDefaultValue
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: fieldAttributes
Entry: 7
Data: 14|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 15|UdonToolkit.HideIfAttribute, UdonToolkitRuntime
- Name: methodName
Entry: 1
Data: '@!findObjectSyncFromChildren'
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
- Name:
Entry: 8
Data:
- Name: userBehaviourSource
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 8
Data:
- Name:
Entry: 7
Data:
- Name: $k
Entry: 1
Data: includeDisabled
- Name: $v
Entry: 7
Data: 16|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
- Name: fieldSymbol
Entry: 7
Data: 17|UdonSharp.Compiler.SymbolDefinition, UdonSharp.Editor
- Name: internalType
Entry: 9
Data: 4
- Name: declarationType
Entry: 3
Data: 1
- Name: syncMode
Entry: 3
Data: 0
- Name: symbolResolvedTypeName
Entry: 1
Data: SystemBoolean
- Name: symbolOriginalName
Entry: 1
Data: includeDisabled
- Name: symbolUniqueName
Entry: 1
Data: includeDisabled
- Name: symbolDefaultValue
Entry: 6
Data:
- Name:
Entry: 8
Data:
- Name: fieldAttributes
Entry: 7
Data: 18|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
- Name:
Entry: 12
Data: 1
- Name:
Entry: 7
Data: 19|UdonToolkit.HideIfAttribute, UdonToolkitRuntime
- Name: methodName
Entry: 1
Data: '@!findObjectSyncFromChildren'
- Name:
Entry: 8
Data:
- Name:
Entry: 13
Data:
Expand Down
13 changes: 9 additions & 4 deletions Assets/InariUdon/Sync/ObjectSyncRespawner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@
using VRC.SDKBase;
using VRC.Udon;
using VRC.SDK3.Components;
using UdonToolkit;

namespace InariUdon.Sync
{
[
UdonBehaviourSyncMode(BehaviourSyncMode.NoVariableSync),
]
[UdonBehaviourSyncMode(BehaviourSyncMode.NoVariableSync)]
public class ObjectSyncRespawner : UdonSharpBehaviour
{
public VRCObjectSync[] targets = {};
public bool findObjectSyncFromChildren = false;
[HideIf("@findObjectSyncFromChildren")] public VRCObjectSync[] targets = {};
[HideIf("@!findObjectSyncFromChildren")] public GameObject targetsParent;
[HideIf("@!findObjectSyncFromChildren")] public bool includeDisabled;

public override void Interact() => _Trigger();

Expand All @@ -22,8 +24,11 @@ public void _Trigger()
if (targets == null) return;

var localPlayer = Networking.LocalPlayer;

if (findObjectSyncFromChildren) targets = (VRCObjectSync[])targetsParent.GetComponentsInChildren(typeof(VRCObjectSync), includeDisabled);
foreach (var target in targets)
{
if (target == null) continue;
Networking.SetOwner(localPlayer, target.gameObject);
target.Respawn();
}
Expand Down
Loading

0 comments on commit 6151af9

Please sign in to comment.