1
0
Fork 0
spacetac/src/app/game/BattleLog.ts

78 lines
2 KiB
TypeScript
Raw Normal View History

2015-03-03 00:00:00 +00:00
/// <reference path="Serializable.ts"/>
2014-12-31 00:00:00 +00:00
module SpaceTac.Game {
2015-01-07 00:00:00 +00:00
"use strict";
2014-12-31 00:00:00 +00:00
// Log of a battle
// This keeps track of all events in a battle
// It also allows to register a callback to receive these events
2015-03-03 00:00:00 +00:00
export class BattleLog extends Serializable {
2014-12-31 00:00:00 +00:00
// Full list of battle events
events: BaseLogEvent[];
2014-12-31 00:00:00 +00:00
2014-12-31 00:00:00 +00:00
// List of subscribers
private subscribers: Function[];
// List of event codes to ignore
private filters: string[];
2014-12-31 00:00:00 +00:00
// Create an initially empty log
constructor() {
2015-03-03 00:00:00 +00:00
super();
2014-12-31 00:00:00 +00:00
this.events = [];
2014-12-31 00:00:00 +00:00
this.subscribers = [];
this.filters = [];
}
postSerialize(fields: any): void {
fields.subscribers = [];
}
// Clear the stored events
clear(): void {
this.events = [];
2014-12-31 00:00:00 +00:00
}
// Add a battle event to the log
add(event: BaseLogEvent): void {
// Apply filters
var filtered = false;
this.filters.forEach((code: string) => {
if (event.code === code) {
filtered = true;
}
});
if (filtered) {
return;
}
2014-12-31 00:00:00 +00:00
this.events.push(event);
2014-12-31 00:00:00 +00:00
2015-01-07 00:00:00 +00:00
this.subscribers.forEach((subscriber: Function) => {
2014-12-31 00:00:00 +00:00
subscriber(event);
});
}
// Filter out a type of event
addFilter(event_code: string): void {
this.filters.push(event_code);
}
2014-12-31 00:00:00 +00:00
// Subscribe a callback to receive further events
subscribe(callback: (event: BaseLogEvent) => void): Function {
2014-12-31 00:00:00 +00:00
this.subscribers.push(callback);
return callback;
}
// Unsubscribe a callback
// Pass the value returned by 'subscribe' as argument
unsubscribe(callback: Function): void {
var index = this.subscribers.indexOf(callback);
if (index >= 0) {
this.subscribers.splice(index, 1);
}
2014-12-31 00:00:00 +00:00
}
}
2015-01-07 00:00:00 +00:00
}