Skip to content

Commit

Permalink
add view extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
tiagoschenkel committed Sep 19, 2016
1 parent f35c393 commit 6c75ffc
Show file tree
Hide file tree
Showing 42 changed files with 2,720 additions and 36 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"dependencies": {
"eventemitter3": "^2.0.0",
"pixi.js": "^4.0.1",
"robotlegs": "^1.0.0-alpha.4"
"robotlegs": "1.0.0-alpha.5"
},
"devDependencies": {
"awesome-typescript-loader": "^2.2.4",
Expand Down
26 changes: 25 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,29 @@
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

// ContextView
export { IContextView } from "./robotlegs/bender/extensions/contextView/api/IContextView";
export { ContextView } from "./robotlegs/bender/extensions/contextView/impl/ContextView";
export { PixiExtension } from "./robotlegs/bender/extensions/contextView/PixiExtension";
export { ContextViewListenerConfig } from "./robotlegs/bender/extensions/contextView/impl/ContextViewListenerConfig";
export { ContextViewExtension } from "./robotlegs/bender/extensions/contextView/ContextViewExtension";
export { StageSyncExtension } from "./robotlegs/bender/extensions/contextView/StageSyncExtension";

// MediatorMap
export { IMediator } from "./robotlegs/bender/extensions/mediatorMap/api/IMediator";
export { IMediatorMap } from "./robotlegs/bender/extensions/mediatorMap/api/IMediatorMap";
export { IMediatorMapping } from "./robotlegs/bender/extensions/mediatorMap/api/IMediatorMapping";
export { Mediator } from "./robotlegs/bender/extensions/mediatorMap/impl/Mediator";
export { MediatorMapExtension } from "./robotlegs/bender/extensions/mediatorMap/MediatorMapExtension";

// ViewManager
export { IViewHandler } from "./robotlegs/bender/extensions/viewManager/api/IViewHandler";
export { IViewManager } from "./robotlegs/bender/extensions/viewManager/api/IViewManager";
export { ManualStageObserverExtension } from "./robotlegs/bender/extensions/viewManager/ManualStageObserverExtension";
export { StageCrawlerExtension } from "./robotlegs/bender/extensions/viewManager/StageCrawlerExtension";
export { StageObserverExtension } from "./robotlegs/bender/extensions/viewManager/StageObserverExtension";
export { ViewManagerExtension } from "./robotlegs/bender/extensions/viewManager/ViewManagerExtension";

/**
* Bundles
*/
export { PixiBundle } from "./robotlegs/bender/bundles/pixi/PixiBundle";
51 changes: 51 additions & 0 deletions src/robotlegs/bender/bundles/pixi/PixiBundle.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// ------------------------------------------------------------------------------
// Copyright (c) 2016 Goodgame Studios. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

import {
IBundle,
IContext,
LogLevel
} from "robotlegs";

import { ContextViewExtension } from "../../extensions/contextView/ContextViewExtension";
import { ContextViewListenerConfig } from "../../extensions/contextView/impl/ContextViewListenerConfig";
import { StageSyncExtension } from "../../extensions/contextView/StageSyncExtension";
import { MediatorMapExtension } from "../../extensions/mediatorMap/MediatorMapExtension";
import { StageCrawlerExtension } from "../../extensions/viewManager/StageCrawlerExtension";
import { StageObserverExtension } from "../../extensions/viewManager/StageObserverExtension";
import { ViewManagerExtension } from "../../extensions/viewManager/ViewManagerExtension";

/**
* For that Classic Robotlegs flavour
*
* <p>This bundle installs a number of extensions commonly used
* in typical Robotlegs applications and modules.</p>
*/
export class PixiBundle implements IBundle {

/*============================================================================*/
/* Public Functions */
/*============================================================================*/

/**
* @inheritDoc
*/
public extend(context: IContext): void {
context.logLevel = LogLevel.DEBUG;

context.install(
ContextViewExtension,
ViewManagerExtension,
StageObserverExtension,
MediatorMapExtension,
StageCrawlerExtension,
StageSyncExtension
);

context.configure(ContextViewListenerConfig);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ import {
IContext,
IExtension,
IInjector,
ILogger,
IContextView
ILogger
} from "robotlegs";

import { IContextView } from "./api/IContextView";
import { ContextView } from "./impl/ContextView";

import { applyPixiPatch } from "./pixiPatch";

/**
Expand Down Expand Up @@ -51,24 +52,20 @@ export class ContextViewExtension implements IExtension {
/* Private Functions */
/*============================================================================*/

private handleContextView(contextView: ContextView): void {
if (this._injector.isBound(ContextView)) {
this._logger.warn('A contextView has already been installed, ignoring {0}', [contextView.view]);
}
else {
private handleContextView(contextView: IContextView): void {
if (this._injector.isBound(IContextView)) {
this._logger.warn("A contextView has already been installed, ignoring {0}", [contextView.view]);
} else {
this._logger.debug("Mapping {0} as contextView", [contextView.view]);

applyPixiPatch(contextView.view);

console.log("Register ContextView to", contextView);

// this._injector.map(ContextView).toValue(contextView);
this._injector.bind(IContextView).toConstantValue(contextView);
}
}

private beforeInitializing(): void {
if (!this._injector.isBound(ContextView)) {
if (!this._injector.isBound(IContextView)) {
this._logger.error("A ContextView must be installed if you install the ContextViewExtension.");
}
}
Expand Down
11 changes: 0 additions & 11 deletions src/robotlegs/bender/extensions/contextView/PixiExtension.ts

This file was deleted.

82 changes: 82 additions & 0 deletions src/robotlegs/bender/extensions/contextView/StageSyncExtension.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// ------------------------------------------------------------------------------
// Copyright (c) 2016 Goodgame Studios. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

import {
instanceOfType,
IContext,
IExtension,
ILogger
} from "robotlegs";

import { ContextView } from "./impl/ContextView";

/**
* <p>This Extension waits for a ContextView to be added as a configuration,
* and initializes and destroys the context based on the contextView's stage presence.</p>
*
* <p>It should be installed before context initialization.</p>
*/
export class StageSyncExtension implements IExtension {

/*============================================================================*/
/* Private Properties */
/*============================================================================*/

private _context: IContext;

private _contextView: any;

private _logger: ILogger;

/*============================================================================*/
/* Public Functions */
/*============================================================================*/

/**
* @inheritDoc
*/
public extend(context: IContext): void {
this._context = context;
this._logger = context.getLogger(this);
this._context.addConfigHandler(instanceOfType(ContextView), this.handleContextView.bind(this));
}

/*============================================================================*/
/* Private Functions */
/*============================================================================*/

private handleContextView(contextView: ContextView): void {
if (this._contextView) {
this._logger.warn("A contextView has already been installed, ignoring {0}", [contextView.view]);
return;
}
this._contextView = contextView.view;
if (this._contextView.stage) {
this.initializeContext();
} else {
this._logger.debug("Context view is not yet on stage. Waiting...");
// this._contextView.addEventListener(Event.ADDED_TO_STAGE, this.onAddedToStage);
}
}

private onAddedToStage(event: Event): void {
// this._contextView.removeEventListener(Event.ADDED_TO_STAGE, this.onAddedToStage);
this.initializeContext();
}

private initializeContext(): void {
this._logger.debug("Context view is now on stage. Initializing context...");
this._context.initialize();
// this._contextView.addEventListener(Event.REMOVED_FROM_STAGE, this.onRemovedFromStage);
}

private onRemovedFromStage(event: Event): void {
this._logger.debug("Context view has left the stage. Destroying context...");
// this._contextView.removeEventListener(Event.REMOVED_FROM_STAGE, this.onRemovedFromStage);
this._context.destroy();
}
}
11 changes: 11 additions & 0 deletions src/robotlegs/bender/extensions/contextView/api/IContextView.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// ------------------------------------------------------------------------------
// Copyright (c) 2016 Goodgame Studios. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

export let IContextView = Symbol("IContextView");
export interface IContextView {
view: any;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

import { IContextView } from "robotlegs";
import { IContextView } from "../api/IContextView";

/**
* The Context View represents the root any for a Context
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
// ------------------------------------------------------------------------------
// Copyright (c) 2016 Goodgame Studios. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

import { injectable, inject } from "inversify";

import { IConfig } from "robotlegs";

import { IContextView } from "../api/IContextView";
import { IViewManager } from "../../viewManager/api/IViewManager";

/**
* This configuration file adds the ContextView to the viewManager.
*
* It requires that the ViewManagerExtension, ContextViewExtension
* and a ContextView have been installed.
*/
@injectable()
export class ContextViewListenerConfig implements IConfig {

/*============================================================================*/
/* Public Properties */
/*============================================================================*/

private _contextView: IContextView;

private _viewManager: IViewManager;

/*============================================================================*/
/* Public Functions */
/*============================================================================*/

constructor(
@inject(IContextView) contextView: IContextView,
@inject(IViewManager) viewManager: IViewManager
) {
this._contextView = contextView;
this._viewManager = viewManager;
}

/**
* @inheritDoc
*/
public configure(): void {
// Adds the Context View to the View Manager at startup
this._viewManager.addContainer(this._contextView.view);
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
// ------------------------------------------------------------------------------
// Copyright (c) 2016 Goodgame Studios. All Rights Reserved.
//
// NOTICE: You are permitted to use, modify, and distribute this file
// in accordance with the terms of the license agreement accompanying it.
// ------------------------------------------------------------------------------

/**
* Patch PIXI event handling.
*
* - Proxy PIXI events to be compatible with EventDispatcher
* - Implements event bubbling on `dispatchEvent` when `bubbles` is true.
*/

import { IEvent } from "robotlegs";
import EventEmitter = require("eventemitter3");

import { DisplayObject } from "pixi.js";
import { IEvent } from "robotlegs";

const EventDispatcherMixin = {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
//
// Patch PIXI to emit "added" / "removed" events on global event dispatcher
// Patch PIXI to emit "added"/"removed" events on global event dispatcher
//

import PIXI = require('pixi.js');
import "./eventemitter3-patch";
import PIXI = require('pixi.js');

export function applyPixiPatch(interaction: any) {

Expand Down
Loading

0 comments on commit 6c75ffc

Please sign in to comment.