1
1
import { InjectorBase } from '../framework/InjectorBase' ;
2
+ import { assign } from '@dojo/core/lang' ;
2
3
3
4
interface Monster {
4
5
distance : number ;
@@ -12,6 +13,16 @@ export const enum Environment {
12
13
Forest = 'forest'
13
14
}
14
15
16
+ declare type Dimension3 = [ number , number , number ] ;
17
+
18
+ export interface Throw {
19
+ direction : Dimension3 ;
20
+ initialTime : number ;
21
+ position : Dimension3 ;
22
+ speed : number ;
23
+ thrownTime ?: number ;
24
+ }
25
+
15
26
/**
16
27
* Defines a monster's traits
17
28
*/
@@ -28,12 +39,14 @@ export interface MonsterDefinition {
28
39
}
29
40
30
41
export default class OutsideContext extends InjectorBase {
31
- private _environment : Environment = Environment . Forest ;
42
+ environment : Environment = Environment . Forest ;
43
+
44
+ private _derpyball ?: Throw ;
32
45
private _monster ?: Monster ;
33
46
private _monsterDefinitions : Map < string , MonsterDefinition > = new Map ( ) ;
34
47
35
- get environment ( ) : Environment {
36
- return this . _environment ;
48
+ get derpyball ( ) : Throw | undefined {
49
+ return this . _derpyball ;
37
50
}
38
51
39
52
get monster ( ) : Monster | undefined {
@@ -44,39 +57,34 @@ export default class OutsideContext extends InjectorBase {
44
57
this . _monsterDefinitions . set ( definitions . name , definitions ) ;
45
58
}
46
59
47
- randomizeEncounter ( ) {
48
- const {
49
- heights,
50
- name,
51
- } = this . randomMonster ( ) ;
52
- const distance = Math . random ( ) * 8 + 2 ;
53
- const height = Math . random ( ) * ( heights . max - heights . min ) + heights . min ;
60
+ ballThrown ( ) {
61
+ if ( this . _derpyball && ! this . _derpyball . thrownTime ) {
62
+ this . _derpyball . thrownTime = performance . now ( ) ;
63
+ }
64
+ }
54
65
55
- this . setMonster ( {
56
- name,
57
- height,
58
- distance
59
- } ) ;
66
+ getMonsterDefinitions ( ) : MonsterDefinition [ ] {
67
+ return Array . from ( this . _monsterDefinitions . values ( ) ) ;
60
68
}
61
69
62
- setEnvironment ( name : Environment ) {
63
- if ( this . _environment !== name ) {
64
- this . _environment = name ;
65
- this . emitInvalidate ( ) ;
70
+ removeBall ( ) {
71
+ if ( this . _derpyball ) {
72
+ this . _derpyball = undefined ;
66
73
}
67
74
}
68
75
69
- setMonster ( monster : Monster | undefined ) {
70
- if ( this . _monster !== monster ) {
71
- this . _monster = monster ;
72
- this . emitInvalidate ( ) ;
76
+ throwBall ( value : Throw ) {
77
+ if ( ! this . _derpyball && value ) {
78
+ this . _derpyball = {
79
+ direction : < Dimension3 > Array . from ( value . direction ) ,
80
+ initialTime : value . initialTime || performance . now ( ) ,
81
+ position : < Dimension3 > Array . from ( value . position ) ,
82
+ speed : value . speed
83
+ }
73
84
}
74
85
}
75
86
76
- private randomMonster ( ) {
77
- const max = this . _monsterDefinitions . size ;
78
- const num = Math . floor ( Math . random ( ) * max ) ;
79
- const definitions = Array . from ( this . _monsterDefinitions . values ( ) ) ;
80
- return definitions [ num ] ;
87
+ setMonster ( monster : Monster | undefined ) {
88
+ this . _monster = assign ( { } , monster ) ;
81
89
}
82
90
}
0 commit comments