protected override void RegisterEventListeners() { eventManager.AddListener <SelectKey <EntityHandle> >(SelectKey); eventManager.AddListener <SelectKey <ProvenceComponent> >(SelectKey); eventManager.AddListener <DrawColumnEventArgs <ProvenceComponent> >(DrawColumn); eventManager.AddListener <SceneSavedEvent>(SaveEntity); if (root == null) { return; } DropDownMenu archetypeMenu = root.Q <DropDownMenu>("archetype-menu"); root.Q <ListItemText>("select-menu-button").eventManager.AddListener <MouseClickEvent>(e => { if (e.button != 0) { return; } }); root.Q <ListItemText>("archetype-menu-button").eventManager.AddListener <MouseClickEvent>(e => { if (e.button != 0) { return; } archetypeMenu.Show(root, e); }); root.Q <ListItem>("add-component-button").eventManager.AddListener <MouseClickEvent>(AddComponentButtonClicked); root.Q <ListItemTextInput>("entity-name").eventManager.AddListener <ListItemInputChange>(e => { if (chosenKeyNameHandle != null) { string newName = ((ListItemTextInput)e.input).text; if (chosenKeyNameHandle.component.name.Equals(newName)) { return; } chosenKeyNameHandle.component.name = newName; eventManager.Raise <SetSceneDirtyEvent>(new SetSceneDirtyEvent(SceneManager.GetActiveScene())); } }); root.Q <ListItemText>("add-gameobject-button").eventManager.AddListener <MouseClickEvent>(AddGameObject); root.Q <ListItemText>("select-gameobject-button").eventManager.AddListener <MouseClickEvent>(e => { if (chosenGameObject != null) { Selection.objects = new Object[] { chosenGameObject } } ; }); root.Q <ListItemText>("remove-gameobject-button").eventManager.AddListener <MouseClickEvent>(RemoveGameObject); }
protected override void InitializeWindow() { if (root == null) { return; } keyListScroller = root.Q <ColumnScroller>("key-list-scroller"); entryEditorScroller = root.Q <ColumnScroller>("entry-editor-scroller"); root.Q <ListItemSearchBar>("entry-editor-search-bar").container = entryEditorScroller; tagListScroller = root.Q <ColumnScroller>("entry-editor-tag-scroller"); keyListContextMenu = root.Q <DropDownMenu>("key-list-context-menu"); entryEditorComponentContextMenu = root.Q <DropDownMenu>("entry-editor-component-context-menu"); entryEditorTagContextMenu = root.Q <DropDownMenu>("entry-editor-tag-context-menu"); keyIcon = UnityEditor.AssetDatabase.LoadAssetAtPath <Texture>("Assets/Icons/bookmark-open.png"); selectedKeyIcon = UnityEditor.AssetDatabase.LoadAssetAtPath <Texture>("Assets/Icons/bookmark.png"); eventManager.Raise <DrawColumnEventArgs <string> >(new DrawColumnEventArgs <string>(0)); }
protected void DrawComponentList() { if (componentListScroller == null) { return; } componentListScroller.Clear(); editorScroller.Clear(); if (chosenKey != null) { DropDownMenu contextMenu = root.Q <DropDownMenu>("component-list-context-menu"); bool alternate = false; foreach (ComponentHandle <ProvenceComponent> handle in chosenKey.GetAllComponents()) { if (handle == null || handle.component == null || handle.component.GetType().IsDefined(typeof(DontDisplayInEditor), false)) { continue; } DrawComponentListItem(handle, contextMenu, alternate); alternate = !alternate; } } }
protected void DrawComponentListItem(ComponentHandle <ProvenceComponent> handle, DropDownMenu contextMenu, bool alternate) { ListItem item = new ListItem(alternate, true); string componentName = System.Text.RegularExpressions.Regex.Replace(handle.component.GetType().Name, @"((?<=\p{Ll})\p{Lu})|((?!\A)\p{Lu}(?>\p{Ll}))", " $0"); item.AddButton(componentName, false, false, true); item.eventManager.AddListener <MouseClickEvent>(e => { if (e.element != item) { return; } switch (e.button) { case 0: if (item.ClassListContains("selected")) { item.RemoveFromClassList("selected"); } else { item.AddToClassList("selected"); } eventManager.Raise <SelectKey <ProvenceComponent> >(new SelectKey <ProvenceComponent>(handle.component)); break; case 1: contextMenu.Show(root, e, true); ListItemText removeButton = root.Q <ListItemText>("component-list-context-menu-remove-button"); removeButton.eventManager.ClearListeners(); removeButton.eventManager.AddListener <MouseClickEvent>(ev => { if (ev.button != 0) { return; } if (chosenComponents.Contains(handle.component)) { chosenComponents.Remove(handle.component); } Helpers.InvokeGenericMethod(this, "RemoveComponent", handle.component.GetType()); contextMenu.style.display = DisplayStyle.None; }); break; } }); componentListScroller.Add(item); }
protected void DrawSystemList() { ColumnScroller scroller = root.Q <ColumnScroller>("world-editor-system-scroller"); scroller.Clear(); bool alternate = false; DropDownMenu contextMenu = root.Q <DropDownMenu>("system-list-context-menu"); foreach (string package in chosenKey.systemManager.systemPackages) { ListItem item = new ListItem(alternate, true, true); item.AddIndent(); item.AddImage(packageIcon).AddToClassList("icon"); item.AddTextDisplay(package); scroller.Add(item); item.eventManager.AddListener <MouseClickEvent>(e => { switch (e.button) { case 0: ListItem selected = scroller.Q <ListItem>(null, "selected"); if (selected != null) { selected.RemoveFromClassList("selected"); } item.AddToClassList("selected"); break; case 1: contextMenu.Show(root, e, true); ListItemText removeButton = root.Q <ListItemText>("system-list-context-menu-remove-button"); removeButton.eventManager.ClearListeners(); removeButton.eventManager.AddListener <MouseClickEvent>(ev => { if (ev.button != 0) { return; } chosenKey.systemManager.systemPackages.Remove(package); eventManager.Raise <SetSceneDirtyEvent>(new SetSceneDirtyEvent(EditorSceneManager.GetActiveScene())); eventManager.Raise <DrawColumnEventArgs <World> >(new DrawColumnEventArgs <World>(1)); }); break; } }); alternate = !alternate; } foreach (System.Type systemType in chosenKey.systemManager.GetCurrentSystemTypes()) { ListItem item = new ListItem(alternate, true, true); item.AddIndent(); item.AddImage(systemIcon).AddToClassList("icon"); item.AddTextDisplay(Regex.Replace(systemType.Name, @"((?<=\p{Ll})\p{Lu})|((?!\A)\p{Lu}(?>\p{Ll}))", " $0")); item.eventManager.AddListener <MouseClickEvent>(e => { switch (e.button) { case 0: if (item.ClassListContains("selected")) { Helpers.InvokeGenericMethod(this, "OpenSystemEditor", systemType); } else { ListItem selected = scroller.Q <ListItem>(null, "selected"); if (selected != null) { selected.RemoveFromClassList("selected"); } item.AddToClassList("selected"); } break; case 1: contextMenu.Show(root, e, true); ListItemText removeButton = root.Q <ListItemText>("system-list-context-menu-remove-button"); removeButton.eventManager.ClearListeners(); removeButton.eventManager.AddListener <MouseClickEvent>(ev => { if (ev.button != 0) { return; } Helpers.InvokeGenericMethod(this, "RemoveSystem", systemType); contextMenu.style.display = DisplayStyle.None; }); break; } }); scroller.Add(item); alternate = !alternate; } }
protected void DrawEntityList() { ColumnScroller scroller = root.Q <ColumnScroller>("world-editor-entity-scroller"); scroller.Clear(); bool alternate = false; DropDownMenu contextMenu = root.Q <DropDownMenu>("entity-list-context-menu"); foreach (EntityHandle entityHandle in chosenKey.LookUpAllEntities()) { ListItem item = new ListItem(alternate, true, true); item.AddIndent(); item.AddImage(entityIcon).AddToClassList("icon"); ComponentHandle <Name> nameHandle = entityHandle.GetComponent <Name>(); if (nameHandle != null) { item.AddTextDisplay(nameHandle.component.name); } else { item.AddTextDisplay(entityHandle.entity.ToString()); } item.eventManager.AddListener <MouseClickEvent>(e => { switch (e.button) { case 0: ComponentHandle <UnityGameObject> objectHandle = entityHandle.GetComponent <UnityGameObject>(); GameObject entityGO = objectHandle != null ? objectHandle.component.gameObject : null; if (entityGO != null) { Selection.objects = new Object[] { entityGO }; } if (item.ClassListContains("selected")) { EntityEditor.Show(entityHandle); } else { ListItem selected = scroller.Q <ListItem>(null, "selected"); if (selected != null) { selected.RemoveFromClassList("selected"); } item.AddToClassList("selected"); } break; case 1: contextMenu.Show(root, e, true); ListItemText duplicateButton = root.Q <ListItemText>("entity-list-context-menu-duplicate-button"); duplicateButton.eventManager.ClearListeners(); duplicateButton.eventManager.AddListener <MouseClickEvent>(ev => { if (ev.button != 0) { return; } DuplicateEntity(entityHandle); contextMenu.style.display = DisplayStyle.None; }); ListItemText removeButton = root.Q <ListItemText>("entity-list-context-menu-remove-button"); removeButton.eventManager.ClearListeners(); removeButton.eventManager.AddListener <MouseClickEvent>(ev => { if (ev.button != 0) { return; } RemoveEntity(entityHandle); contextMenu.style.display = DisplayStyle.None; }); break; } }); scroller.Add(item); alternate = !alternate; } }