Skip to content

Commit

Permalink
First Commit
Browse files Browse the repository at this point in the history
  • Loading branch information
TamakiRuri committed Sep 17, 2024
1 parent 4445bb5 commit b5b5408
Show file tree
Hide file tree
Showing 31 changed files with 2,345 additions and 0 deletions.
104 changes: 104 additions & 0 deletions AdvancedItemLockCenter.prefab
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3394370328938809256
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1709774894883452568}
- component: {fileID: -915721515001447248}
- component: {fileID: 1783315646382086675}
- component: {fileID: 4337697488659145992}
m_Layer: 0
m_Name: AdvancedItemLockCenter
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1709774894883452568
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3394370328938809256}
serializedVersion: 2
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_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &-915721515001447248
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3394370328938809256}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4bd7b1428e86e8a4f9d804259a7e2e6f, type: 3}
m_Name:
m_EditorClassIdentifier:
usernames: []
targetObjects: []
controlCenter: {fileID: 3394370328938809256}
--- !u!114 &1783315646382086675
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3394370328938809256}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f5d456cddfa27a24493f9a3f2989a632, type: 3}
m_Name:
m_EditorClassIdentifier:
serializationData:
SerializedFormat: 2
SerializedBytes:
ReferencedUnityObjects: []
SerializedBytesString:
Prefab: {fileID: 0}
PrefabModificationsReferencedUnityObjects: []
PrefabModifications: []
SerializationNodes: []
_udonSharpBackingUdonBehaviour: {fileID: 4337697488659145992}
userName: []
targetObjects: []
actionMode:
allowInstanceOwner:
wallModes:
--- !u!114 &4337697488659145992
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3394370328938809256}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3}
m_Name:
m_EditorClassIdentifier:
interactTextPlacement: {fileID: 0}
interactText: Use
interactTextGO: {fileID: 0}
proximity: 2
SynchronizePosition: 0
AllowCollisionOwnershipTransfer: 0
Reliable: 0
_syncMethod: 2
serializedProgramAsset: {fileID: 11400000, guid: 011be8dc9b48e9142b5c18f25683c2b7,
type: 2}
programSource: {fileID: 11400000, guid: 74a0fdf0535c78c409fd5833f3d4ba1d, type: 2}
serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgYAAAAAAAAAAi8CAAAAAUwAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwBbAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAQgAAAB1AHMAZQByAE4AYQBtAGUAJwEEAAAAdAB5AHAAZQABGQAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcAWwBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEFAAAAVgBhAGwAdQBlAC8DAAAAARkAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnAFsAXQAsACAAbQBzAGMAbwByAGwAaQBiAAMAAAAGAAAAAAAAAAAHBQcFAi8EAAAAAWMAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4ARwBhAG0AZQBPAGIAagBlAGMAdABbAF0ALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAEAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAENAAAAdABhAHIAZwBlAHQATwBiAGoAZQBjAHQAcwAnAQQAAAB0AHkAcABlAAEwAAAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4ARwBhAG0AZQBPAGIAagBlAGMAdABbAF0ALAAgAFUAbgBpAHQAeQBFAG4AZwBpAG4AZQAuAEMAbwByAGUATQBvAGQAdQBsAGUAAQEFAAAAVgBhAGwAdQBlAC8FAAAAATAAAABVAG4AaQB0AHkARQBuAGcAaQBuAGUALgBHAGEAbQBlAE8AYgBqAGUAYwB0AFsAXQAsACAAVQBuAGkAdAB5AEUAbgBnAGkAbgBlAC4AQwBvAHIAZQBNAG8AZAB1AGwAZQAFAAAABgAAAAAAAAAABwUHBQIvBgAAAAFJAAAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQBgADEAWwBbAFMAeQBzAHQAZQBtAC4ASQBuAHQAMwAyACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAGAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEKAAAAYQBjAHQAaQBvAG4ATQBvAGQAZQAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAAAAAAcFAi8HAAAAAUsAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBCAG8AbwBsAGUAYQBuACwAIABtAHMAYwBvAHIAbABpAGIAXQBdACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAHAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAESAAAAYQBsAGwAbwB3AEkAbgBzAHQAYQBuAGMAZQBPAHcAbgBlAHIAJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQAABwUCMAYAAAAIAAAABgIAAAAAAAAAJwEEAAAAdAB5AHAAZQABFwAAAFMAeQBzAHQAZQBtAC4AUwB0AHIAaQBuAGcALAAgAG0AcwBjAG8AcgBsAGkAYgAnAQoAAABTAHkAbQBiAG8AbABOAGEAbQBlAAEfAAAAXwBfAF8AVQBkAG8AbgBTAGgAYQByAHAAQgBlAGgAYQB2AGkAbwB1AHIAVgBlAHIAcwBpAG8AbgBfAF8AXwAnAQQAAAB0AHkAcABlAAEWAAAAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgAXAQUAAABWAGEAbAB1AGUAAgAAAAcFAjAHAAAACQAAAAYCAAAAAAAAACcBBAAAAHQAeQBwAGUAARcAAABTAHkAcwB0AGUAbQAuAFMAdAByAGkAbgBnACwAIABtAHMAYwBvAHIAbABpAGIAJwEKAAAAUwB5AG0AYgBvAGwATgBhAG0AZQABKwAAAF8AXwBfAFUAZABvAG4AUwBoAGEAcgBwAEIAZQBoAGEAdgBpAG8AdQByAEgAYQBzAEQAbwBuAGUAUwBjAGUAbgBlAFUAcABnAHIAYQBkAGUAXwBfAF8AJwEEAAAAdAB5AHAAZQABGAAAAFMAeQBzAHQAZQBtAC4AQgBvAG8AbABlAGEAbgAsACAAbQBzAGMAbwByAGwAaQBiACsBBQAAAFYAYQBsAHUAZQABBwUHBQcF
publicVariablesUnityEngineObjects: []
publicVariablesSerializationDataFormat: 0
7 changes: 7 additions & 0 deletions AdvancedItemLockCenter.prefab.meta

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

8 changes: 8 additions & 0 deletions EditorOnly.meta

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

200 changes: 200 additions & 0 deletions EditorOnly/ImportSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
#if UNITY_EDITOR
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using UnityEditor;
using UnityEditor.UIElements;


using VRC.Udon;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UIElements;

public class ImportSettings : EditorWindow
{
[SerializeField]
private VisualTreeAsset m_VisualTreeAsset = default;
[SerializeField]private VisualTreeAsset itemListTemplate;

[SerializeField]private GameObject LockCenterPrefab;

[MenuItem("Studio Saphir/Item Lock Settings")]
public static void ShowExample()
{
ImportSettings wnd = GetWindow<ImportSettings>();
wnd.titleContent = new GUIContent("Item Lock Settings");
}
List<String> userLists=new List<String>();
List<ItemList> itemLists=new List<ItemList>();

List<String> userListFinal=new List<String>();
List<GameObject> targetItemFinal = new List<GameObject>();
List<int> actionModeFinal = new List<int>();
List<bool> allowOwnerFinal = new List<bool>();

GameObject controlCenter;

public void CreateGUI()
{
// Each editor window contains a root VisualElement object
VisualElement root = rootVisualElement;

// VisualElements objects can contain other VisualElement following a tree hierarchy.
VisualElement label = new Label("Import");
root.Add(label);

// Instantiate UXML
VisualElement labelFromUXML = m_VisualTreeAsset.Instantiate();
root.Add(labelFromUXML);

//setup target object (NOT user prefabs)
controlCenter = GameObject.Find("ItemLockCenter(Managed)");
if (controlCenter != null){
ReloadItemData();
}

//add Username
var userList = root.Q<ListView>("username");
userList.makeItem = () => new TextField();
userList.bindItem = (e,i)=>{
(e as TextField).label = "Username";
(e as TextField).multiline = false;
(e as TextField).isDelayed = true;
(e as TextField).name = "user";
};
userList.itemsSource = userLists;

//add items

var targetList = root.Q<ListView>("item-list");
targetList.makeItem = itemListTemplate.CloneTree;
targetList.bindItem = (e,i)=>{};
targetList.itemsSource = itemLists;

// Load Userdata if possible
if (controlCenter != null){
ReloadItemData();
}

SetupButtonHandler();
}
[Serializable]private struct ItemList{
public ItemList(GameObject target=null, int action=0, bool allow=false){
targetObject = target;
actionMode = action;
allowInstanceOwner = allow;
}
public GameObject targetObject;
public int actionMode;
public bool allowInstanceOwner;
}
private void ReloadItemData(){
VisualElement root = rootVisualElement;
root.Q<Label>("result").text = "Wait";
String[] l_usernames = controlCenter.GetComponent<ItemLockDatabase>().exportUserData();
GameObject[] l_objects = controlCenter.GetComponent<ItemLockDatabase>().exportObjectData();
int[] l_modes = controlCenter.GetComponent<ItemLockDatabase>().exportModeData();
bool[] l_allowOwner = controlCenter.GetComponent<ItemLockDatabase>().exportAllowOwnerData();
ItemList[] l_list = new ItemList[l_objects.Length];
for (int i = 0; i < l_objects.Length; i++){
l_list[i] = new ItemList(l_objects[i], l_modes[i], l_allowOwner[i]);
}
itemLists = l_list.ToList();
userLists = l_usernames.ToList();
foreach (ItemList ll_list in itemLists){
Debug.Log("Game Object " + ll_list.targetObject + " Mode " + ll_list.actionMode + " Allow Owner " + ll_list.allowInstanceOwner + " Loaded");
}
//add users
var userList = root.Q<ListView>("username");
userList.bindItem = (e,i)=>{
(e as TextField).label = "Username";
(e as TextField).multiline = false;
(e as TextField).isDelayed = true;
(e as TextField).name = "user";
(e as TextField).value = userLists[i];
};
//add items
var targetList = root.Q<ListView>("item-list");
targetList.itemsSource = itemLists;
targetList.bindItem = (e,i)=>{
(e.ElementAt(0).ElementAt(0) as ObjectField).value = itemLists[i].targetObject;
(e.ElementAt(0).ElementAt(1) as IntegerField).value = itemLists[i].actionMode;
(e.ElementAt(0).ElementAt(2) as BaseBoolField).value = itemLists[i].allowInstanceOwner;
};
root.Q<Label>("result").text = "Data Loaded from Local Database";
}
private void SetupButtonHandler(){
VisualElement root = rootVisualElement;

var buttons = root.Query<Button>();
buttons.ForEach(RegisterHandler);
}
private void RegisterHandler(Button button){
if (button.name == "generate-data")
button.RegisterCallback<ClickEvent>(GenerateLockData);

else if (button.name == "delete-data")
button.RegisterCallback<ClickEvent>(DeleteLockData);
}

private void UsernameHandler(TextField text){
userListFinal.Add(text.value);
}
private void TargetObjectHandler(VisualElement obj){
targetItemFinal.Add((GameObject)obj.Q<ObjectField>().value);
actionModeFinal.Add(obj.Q<IntegerField>().value);
allowOwnerFinal.Add(obj.Q<BaseBoolField>().value);
}
//data related functions not implemented
private void GenerateLockData(ClickEvent _event){
VisualElement root = rootVisualElement;
root.Q<Label>("result").text = "Wait";

userListFinal.Clear();
targetItemFinal.Clear();
actionModeFinal.Clear();
allowOwnerFinal.Clear();

try {
root.Query<TextField>("user").ForEach(UsernameHandler);
root.Query<VisualElement>("iltemplate").ForEach(TargetObjectHandler);
}
catch (Exception e){
throw e;
}
if (controlCenter != null) DestroyImmediate(controlCenter);
controlCenter = Instantiate(LockCenterPrefab);
controlCenter.name = "ItemLockCenter(Managed)";
generateDatatoCenter();
root.Q<Label>("result").text = "Finished";
Debug.Log("Generate Finished. \"Should Run Behavior\" Errors are safe to ignore.");
}
private void generateDatatoCenter(){
var controlCenterUdon = (UdonBehaviour)controlCenter.GetComponent(typeof(UdonBehaviour));
String[] users = userListFinal.ToArray();
controlCenterUdon.SendMessage("importUsernames", users);
controlCenter.GetComponent<ItemLockDatabase>().importUsernames(users);
GameObject[] gameobjs = targetItemFinal.ToArray();
controlCenterUdon.SendMessage("importTargets", gameobjs);
int[] modes = actionModeFinal.ToArray();
controlCenterUdon.SendMessage("importModes", modes);
bool[] allowowners = allowOwnerFinal.ToArray();
controlCenterUdon.SendMessage("importAllowOwner", allowowners);
controlCenter.GetComponent<ItemLockDatabase>().importObjectData(gameobjs, modes, allowowners);
}
//data related functions not implemented
private void DeleteLockData(ClickEvent _event){
VisualElement root = rootVisualElement;
root.Q<Label>("result").text = "Wait";
if (controlCenter != null){
DestroyImmediate(controlCenter);
root.Q<Label>("result").text = "Finished";
}
else {root.Q<Label>("result").text = "No Control Center Found";}

}

}
#endif
18 changes: 18 additions & 0 deletions EditorOnly/ImportSettings.cs.meta

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

7 changes: 7 additions & 0 deletions EditorOnly/ImportSettings.uxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<ui:Button text="Generate Data" parse-escape-sequences="true" display-tooltip-when-elided="true" name="generate-data" />
<ui:Button text="Delete All Data" parse-escape-sequences="true" display-tooltip-when-elided="true" name="delete-data" />
<ui:ListView name="username" show-border="true" virtualization-method="DynamicHeight" reorderable="true" show-add-remove-footer="true" header-title="Username" show-foldout-header="true" selection-type="Multiple" reorder-mode="Animated" />
<ui:ListView name="item-list" show-border="true" virtualization-method="DynamicHeight" reorderable="true" show-add-remove-footer="true" header-title="Item List" show-foldout-header="true" fixed-item-height="66" selection-type="Multiple" reorder-mode="Animated" />
<ui:Label tabindex="-1" parse-escape-sequences="true" display-tooltip-when-elided="true" name="result" />
</ui:UXML>
10 changes: 10 additions & 0 deletions EditorOnly/ImportSettings.uxml.meta

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

7 changes: 7 additions & 0 deletions EditorOnly/ItemListTemplate.uxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<ui:VisualElement name="iltemplate" style="flex-grow: 1;">
<uie:ObjectField name="target-object" label="Target Object" type="UnityEngine.GameObject, UnityEngine.CoreModule" />
<ui:IntegerField name="action-mode" label="Action Mode" value="0" />
<ui:Toggle name="allow-owner" label="Allow Instance Owner" />
</ui:VisualElement>
</ui:UXML>
10 changes: 10 additions & 0 deletions EditorOnly/ItemListTemplate.uxml.meta

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

Loading

0 comments on commit b5b5408

Please sign in to comment.