refactor: behavior builders
This commit is contained in:
parent
c4d731a739
commit
fc7777a1fe
|
@ -1,4 +1,10 @@
|
||||||
import {behaviorItemFromJSON, createContext} from '@avocado/behavior';
|
import {
|
||||||
|
behaviorItemFromJSON,
|
||||||
|
buildCondition,
|
||||||
|
buildInvoke,
|
||||||
|
buildTraversal,
|
||||||
|
createContext,
|
||||||
|
} from '@avocado/behavior';
|
||||||
import {compose} from '@avocado/core';
|
import {compose} from '@avocado/core';
|
||||||
import {StateProperty, Trait} from '@avocado/entity';
|
import {StateProperty, Trait} from '@avocado/entity';
|
||||||
|
|
||||||
|
@ -14,97 +20,30 @@ const decorate = compose(
|
||||||
export class Alive extends decorate(Trait) {
|
export class Alive extends decorate(Trait) {
|
||||||
|
|
||||||
static defaultParams() {
|
static defaultParams() {
|
||||||
|
const playDeathSound = buildInvoke(['entity', 'playSound'], [
|
||||||
|
buildTraversal(['entity', 'deathSound']),
|
||||||
|
]);
|
||||||
|
const squeeze = buildInvoke(['entity', 'transition'], [
|
||||||
|
{
|
||||||
|
opacity: 0,
|
||||||
|
visibleScaleX: .3,
|
||||||
|
visibleScaleY: 3,
|
||||||
|
},
|
||||||
|
0.2,
|
||||||
|
]);
|
||||||
|
const isLifeGone = buildCondition('<=', [
|
||||||
|
buildTraversal(['entity', 'life']),
|
||||||
|
0,
|
||||||
|
]);
|
||||||
return {
|
return {
|
||||||
deathActions: {
|
deathActions: {
|
||||||
type: 'actions',
|
type: 'actions',
|
||||||
traversals: [
|
traversals: [
|
||||||
{
|
playDeathSound,
|
||||||
type: 'traversal',
|
squeeze,
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'entity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'playSound',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'invoke',
|
|
||||||
args: [
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'entity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'deathSound',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'entity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'transition',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'invoke',
|
|
||||||
args: [
|
|
||||||
{
|
|
||||||
type: 'literal',
|
|
||||||
value: {
|
|
||||||
opacity: 0,
|
|
||||||
visibleScaleX: .3,
|
|
||||||
visibleScaleY: 3,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'literal',
|
|
||||||
value: 0.2,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
// By default, die when life <= 0.
|
|
||||||
deathCondition: {
|
|
||||||
type: 'condition',
|
|
||||||
operator: '<=',
|
|
||||||
operands: [
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'entity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'life',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'literal',
|
|
||||||
value: 0,
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
deathCondition: isLifeGone,
|
||||||
deathSound: 'deathSound',
|
deathSound: 'deathSound',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,12 @@
|
||||||
import * as I from 'immutable';
|
import * as I from 'immutable';
|
||||||
|
|
||||||
import {Trait} from '@avocado/entity';
|
import {Trait} from '@avocado/entity';
|
||||||
import {behaviorItemFromJSON, createContext} from '@avocado/behavior';
|
import {
|
||||||
|
behaviorItemFromJSON,
|
||||||
|
buildInvoke,
|
||||||
|
buildTraversal,
|
||||||
|
createContext,
|
||||||
|
} from '@avocado/behavior';
|
||||||
import {hasGraphics, TextNodeRenderer} from '@avocado/graphics';
|
import {hasGraphics, TextNodeRenderer} from '@avocado/graphics';
|
||||||
|
|
||||||
import {DamageEmitter} from './emitter';
|
import {DamageEmitter} from './emitter';
|
||||||
|
@ -9,93 +14,20 @@ import {DamageEmitter} from './emitter';
|
||||||
export class Vulnerable extends Trait {
|
export class Vulnerable extends Trait {
|
||||||
|
|
||||||
static defaultParams() {
|
static defaultParams() {
|
||||||
|
const emitDamage = buildInvoke(['entity', 'emitParticle'], [
|
||||||
|
'damage',
|
||||||
|
buildTraversal(['entity', 'position']),
|
||||||
|
buildTraversal(['damage']),
|
||||||
|
]);
|
||||||
|
const playDamagingSound = buildInvoke(['damage', 'from', 'playSound'], [
|
||||||
|
buildTraversal(['damage', 'from', 'damagingSound']),
|
||||||
|
]);
|
||||||
return {
|
return {
|
||||||
tookDamageActions: {
|
tookDamageActions: {
|
||||||
type: 'actions',
|
type: 'actions',
|
||||||
traversals: [
|
traversals: [
|
||||||
{
|
emitDamage,
|
||||||
type: 'traversal',
|
playDamagingSound,
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'entity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'emitParticle',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'invoke',
|
|
||||||
args: [
|
|
||||||
{
|
|
||||||
type: 'literal',
|
|
||||||
value: 'damage',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'entity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'position',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'damage',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'damage',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'from',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'playSound',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'invoke',
|
|
||||||
args: [
|
|
||||||
{
|
|
||||||
type: 'traversal',
|
|
||||||
steps: [
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'damage',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'from',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'key',
|
|
||||||
key: 'damagingSound',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user