Skip to content

Commit

Permalink
Added DayDream controls (WIP)
Browse files Browse the repository at this point in the history
  • Loading branch information
devpaul committed Oct 11, 2017
1 parent 1cd6251 commit 3e4a7f7
Show file tree
Hide file tree
Showing 10 changed files with 113 additions and 27 deletions.
2 changes: 1 addition & 1 deletion src/App.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export default class App extends WidgetBase<WidgetProperties> {
w(Outside, {
monster: this.monster,
monsterDistance: this.distance
})
}),
]);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Box3 } from 'three';
const AFrame = require('aframe');

export const ObjHeight = 'objheight';
export const objHeight = 'objheight';

export const enum Event {
HeightScale = 'heightScale'
Expand All @@ -9,8 +10,8 @@ export const enum Event {
// Avoids triggering a zero-determinant which makes object3D matrix non-invertible.
const zeroScale = 0.00001;

export function register() {
AFRAME.registerComponent(ObjHeight, {
export default function register() {
AFrame.registerComponent(objHeight, {
schema: {
type: 'int',
'default': '0'
Expand Down
39 changes: 39 additions & 0 deletions src/components/trackPosition.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
const AFrame = require('aframe');

export const trackPosition = 'track-position';

interface TrackPositionProperties extends AFrame.Component {
controllerBody: THREE.Object3D;
}

export default function register() {
AFrame.registerComponent(trackPosition, {
schema: {
type: 'string'
},

init() {

},

update() {
const targetName = this.data;
const target = document.querySelector(targetName);
// TODO used with Daydream controller models
this.controllerBody = target.getObjectByName('Body_Body_Cylinder');
},

tick(this: TrackPositionProperties) {
if (!this.controllerBody) {
return;
}
const controllerObj = this.controllerBody.geometry;
this.el!.setAttribute('position', position);
},

getBoundingSphere() {

}
});
}

19 changes: 19 additions & 0 deletions src/createDerpymonElement.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { CustomElementDescriptor } from '@dojo/widget-core/customElements';
import App from './App';
import initialize from './initialize';

// Require globals
require('aframe');
require('aframe-environment-component');

export default function createDerpymonElement(): CustomElementDescriptor {
return {
tagName: 'go-derpy',
widgetConstructor: App,
events: [],
properties: [],
initialization() {
return initialize();
}
}
}
7 changes: 0 additions & 7 deletions src/definitions/initialize.ts

This file was deleted.

23 changes: 16 additions & 7 deletions src/framework/Controls.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,24 @@
import { v } from '@dojo/widget-core/d';
import { DNode, WidgetProperties } from '@dojo/widget-core/interfaces';
import { DNode, EventHandler, WidgetProperties } from '@dojo/widget-core/interfaces';
import { WidgetBase } from '@dojo/widget-core/WidgetBase';

export default class Controls extends WidgetBase<WidgetProperties> {
export interface ControlsProperties {
onActionButtonPressed?: EventHandler,
onActionButtonReleased?: EventHandler
}

function logEvent(name: string) {
return (event: Event) => {
console.log(name, event);
}
}

export default class Controls extends WidgetBase<ControlsProperties> {
protected render(): DNode[] {
return [
v('a-entity', {
'vive-controls': 'hand: left'
}),
v('a-entity', {
'vive-controls': 'hand: right'
v('a-entity', <any> {
id: 'controls',
'daydream-controls': ''
})
];
}
Expand Down
2 changes: 0 additions & 2 deletions src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
<html>
<head>
<title>Derpymon Go</title>
<script src="../node_modules/aframe/dist/aframe-master.js"></script>
<script src="../node_modules/aframe-environment-component/dist/aframe-environment-component.js"></script>
</head>
<body>
<go-derpy></go-derpy>
Expand Down
16 changes: 16 additions & 0 deletions src/initialize.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { initialize as initCharacters } from './definitions/characters';
import registerHeightComponent from './components/heightComponent';
import registerTrackPosition from './components/trackPosition';

let initialized = false;

export default function initialize() {
if (initialized) {
console.error('Application already initialized');
}

initCharacters();
registerHeightComponent();
registerTrackPosition();
initialized = true;
}
6 changes: 5 additions & 1 deletion src/main.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import { ProjectorMixin } from '@dojo/widget-core/mixins/Projector';
import App from './App';
import initialize from './definitions/initialize';
import initialize from './initialize';

// Require globals
require('aframe');
require('aframe-environment-component');

const root = document.querySelector('go-derpy') || undefined;

Expand Down
19 changes: 13 additions & 6 deletions src/stages/Outside.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,32 @@ import { Container } from '@dojo/widget-core/Container';
import ObjModel from '../framework/ObjModel';
import { MonsterName } from '../definitions/characters';
import genericMapper from '../framework/util/genericMapper';
import { ObjHeight } from '../definitions/heightComponent';
import { objHeight } from '../components/heightComponent';
import { trackPosition } from '../components/trackPosition';

export interface OutsideProperties extends WidgetProperties {
monster: MonsterName;
monsterDistance?: number;
}

export default class Outside extends WidgetBase<OutsideProperties> {
protected render(): DNode {
protected render() {
const { monster, monsterDistance = 5 } = this.properties;
const Derpymon = Container(ObjModel, monster, genericMapper());

return v('a-entity', {
return [
v('a-entity', {
environment: 'preset: forest'
}, [
}),
w(Derpymon, {
position: `0 0 -${ monsterDistance }`,
[ObjHeight]: '2'
[objHeight]: '2'
}),
v('a-sphere', {
[trackPosition]: '#controls',
radius: '0.15',
color: 'red'
})
]);
];
}
}

0 comments on commit 3e4a7f7

Please sign in to comment.