forked from mirrors/webxoss-core
86 lines
2.3 KiB
JavaScript
86 lines
2.3 KiB
JavaScript
|
'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;
|