game_logic 정의
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import { BaseGeneralTrigger } from "../Trigger/BaseGeneralTrigger.js";
|
||||
import type { ObjectTrigger } from "../Trigger/ObjectTrigger.js";
|
||||
import { TriggerCaller } from "./TriggerCaller.js";
|
||||
|
||||
export class GeneralTriggerCaller extends TriggerCaller<BaseGeneralTrigger> {
|
||||
checkValidTrigger(trigger: ObjectTrigger<object>): boolean {
|
||||
return trigger instanceof BaseGeneralTrigger;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import { ObjectTrigger, PRIORITY } from "../Trigger/ObjectTrigger.js";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
export abstract class TriggerCaller<T extends ObjectTrigger<any>> {
|
||||
protected triggerListByPriority: Map<number, Map<string, T>>;
|
||||
|
||||
|
||||
abstract checkValidTrigger(trigger: T): boolean;
|
||||
|
||||
isEmpty(): boolean {
|
||||
return this.triggerListByPriority.size === 0;
|
||||
}
|
||||
|
||||
constructor(...triggerList: T[]) {
|
||||
if(triggerList.length === 0){
|
||||
this.triggerListByPriority = new Map();
|
||||
return;
|
||||
}
|
||||
|
||||
this.triggerListByPriority = new Map();
|
||||
let sorted = true;
|
||||
let maxPriority: number = PRIORITY.MIN;
|
||||
|
||||
for (const trigger of triggerList) {
|
||||
const priority = trigger.getPriority();
|
||||
const uniqueID = trigger.getUniqueID();
|
||||
|
||||
if(sorted){
|
||||
if(maxPriority < priority){
|
||||
maxPriority = priority;
|
||||
}
|
||||
else if(maxPriority > priority){
|
||||
sorted = false;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.triggerListByPriority.has(priority)){
|
||||
const subTriggerList = this.triggerListByPriority.get(priority) as Map<string, T>;
|
||||
if(subTriggerList.has(uniqueID)){
|
||||
//TODO: 완성되기 전까진..
|
||||
throw `Duplicated trigger: ${uniqueID}`;
|
||||
}
|
||||
subTriggerList.set(uniqueID, trigger);
|
||||
}
|
||||
else {
|
||||
this.triggerListByPriority.set(priority, new Map([[uniqueID, trigger]]));
|
||||
}
|
||||
}
|
||||
|
||||
if(!sorted){
|
||||
this.triggerListByPriority = new Map([...this.triggerListByPriority.entries()].sort((a, b) => b[0] - a[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { BaseGeneralTrigger } from "../Trigger/BaseGeneralTrigger.js";
|
||||
import type { ObjectTrigger } from "../Trigger/ObjectTrigger.js";
|
||||
import { TriggerCaller } from "./TriggerCaller.js";
|
||||
|
||||
export class WarUnitTriggerCaller extends TriggerCaller<BaseGeneralTrigger> {
|
||||
checkValidTrigger(trigger: ObjectTrigger<object>): boolean {
|
||||
return trigger instanceof BaseGeneralTrigger;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user