webxoss-core/Timming.js

86 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2016-10-23 07:56:45 +02:00
'use strict';
// Timming 拼写错误...
// 应该是 Timing ...
// 嘛,改起来挺麻烦,不改了喵
function Timming (game) {
this.game = game;
// this.subTimmings = [];
// this.conditions = [];
this.funcs = [];
this.onceFlags = [];
this.effects = [];
this.constEffects = [];
this.constEffectsDestroy = [];
}
// Timming.prototype.if = function (condition) {
// var timming = new Timming();
// this.subTimmings.push(timming);
// this.conditions.push(condition);
// return timming;
// };
Timming.prototype.addFunction = function (func,once) {
this.funcs.push(func);
this.onceFlags.push(!!once);
};
Timming.prototype.addConstEffect = function (constEffect) {
this.constEffects.push(constEffect);
};
Timming.prototype.removeConstEffect = function (constEffect) {
removeFromArr(constEffect,this.constEffects);
};
Timming.prototype.addConstEffectDestroy = function (constEffect) {
this.constEffectsDestroy.push(constEffect);
};
Timming.prototype.removeConstEffectDestroy = function (constEffect) {
removeFromArr(constEffect,this.constEffectsDestroy);
};
Timming.prototype.trigger = function (event,dontHandleFrameEnd) {
for (var i = 0; i < this.funcs.length; i++) {
var func = this.funcs[i];
var once = this.onceFlags[i];
func();
if (once) {
this.funcs.splice(i,1);
this.onceFlags.splice(i,1);
i--;
}
}
// this.funcs.forEach(function (func) {
// func();
// },this);
this.constEffectsDestroy.slice().forEach(function (constEffect) {
constEffect.destroy();
},this);
// this.constEffects.forEach(function (constEffect) {
// constEffect.trigger();
// },this);
// 注:
// 关于创建/销毁常时效果和触发触发效果的顺序:
// 某时点触发时,会创建/销毁常时效果,但此时不计算,
// 效果触发之后,才计算常时效果.
// 这与WIXOSS中"場から移動したことによって発動する常時能力は、
// 移動する直前の状態を参照して発動の有無を確認します."的规则相符.
this.effects.forEach(function (effect) {
this.game.pushTriggeringEffect(effect,event);
},this);
// this.subTimmings.forEach(function (timming,idx) {
// if (this.conditions[idx](event)) {
// timming.trigger(event);
// }
// },this);
if (!dontHandleFrameEnd) {
this.game.handleFrameEnd();
}
};
global.Timming = Timming;