Skip to content

Instantly share code, notes, and snippets.

@mattbenic
Created September 1, 2016 13:20
Show Gist options
  • Save mattbenic/4baf90242eccc1fc8d72f220cd70de82 to your computer and use it in GitHub Desktop.
Save mattbenic/4baf90242eccc1fc8d72f220cd70de82 to your computer and use it in GitHub Desktop.
Atomic Editor Plugin that accesses the scene
/// <reference path="../Scripts/Generated/AtomicWork.d.ts" />
/// <reference path="../Scripts/Generated/Editor.d.ts" />
/// <reference path="../Scripts/Generated/EditorWork.d.ts" />
const FooBuilderServiceUILabel = "Foo Builder";
const FooBuilderServiceTBPath = "EditorData/FooBuilder.tb.txt";
class FooBuilderService implements
Editor.HostExtensions.HostEditorService,
Editor.HostExtensions.ProjectServicesEventListener,
Editor.HostExtensions.SceneServicesEventListener,
Editor.HostExtensions.ResourceServicesEventListener,
Editor.HostExtensions.UIServicesEventListener {
name: string = "FooBuilderService";
description: string = "This service provides Foo builder functionality.";
private serviceLocator: Editor.HostExtensions.HostServiceLocator = null;
private extensionWindow: Editor.Modal.ExtensionWindow = null;
private scene: Atomic.Scene;
initialize(serviceLoader: Editor.Extensions.ServiceLoader) {
Atomic.print("FooBuilderService.initialize");
this.serviceLocator = <Editor.HostExtensions.HostServiceLocator>(serviceLoader);
if (this.serviceLocator) {
this.serviceLocator.projectServices.register(this);
this.serviceLocator.sceneServices.register(this);
this.serviceLocator.resourceServices.register(this);
this.serviceLocator.uiServices.register(this);
}
}
projectUnloaded() {
this.serviceLocator.uiServices.removePluginMenuItemSource(FooBuilderServiceUILabel);
Atomic.print("FooBuilderService.projectUnloaded");
if (this.serviceLocator) {
this.serviceLocator.projectServices.unregister(this);
this.serviceLocator.sceneServices.unregister(this);
this.serviceLocator.resourceServices.unregister(this);
this.serviceLocator.uiServices.unregister(this);
}
}
projectLoaded(ev: Editor.EditorEvents.LoadProjectEvent) {
Atomic.print("FooBuilderService.projectLoaded");
let menu = this.serviceLocator.uiServices.createPluginMenuItemSource(FooBuilderServiceUILabel, { "Open": ["Foobuilder open"] });
}
activeSceneEditorChanged(ev: Editor.EditorEvents.ActiveSceneEditorChangeEvent) {
this.scene = ev.sceneEditor.scene;
}
editorSceneClosed(ev: Editor.EditorEvents.SceneClosedEvent) {
this.scene = null;
}
menuItemClicked(refId: string): boolean {
Atomic.print("FooBuilderService.menuItemClicked: " + refId);
if (refId == "Foobuilder open") {
this.extensionWindow = this.serviceLocator.uiServices.showModalWindow(
FooBuilderServiceUILabel, FooBuilderServiceTBPath, this.handleWidgetEvent);
this.getWidgets();
return true;
}
return false;
}
getWidgets() {
if (!this.extensionWindow)
return;
// Censored :p
}
handleWidgetEvent = (ev: Atomic.UIWidgetEvent): boolean => { // => notation used to bind "this" to the method
if (!this.extensionWindow)
return;
if (ev.type == Atomic.UI_EVENT_TYPE_CLICK) {
if (ev.target.id == "cancel") {
this.extensionWindow.hide();
return true;
}
}
return false;
}
}
const FooBuilderService = new FooBuilderService();
export default FooBuilderService;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment