-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCustomerQueue.js
74 lines (62 loc) · 2.32 KB
/
CustomerQueue.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
export class CustomerQueue {
constructor(scene) {
if (CustomerQueue.instance) {
return CustomerQueue.instance; // Gibt die bestehende Instanz zurück
}
this.scene = scene;
this.centerX = scene.scale.width / 2;
this.centerY = scene.scale.height / 2;
this.queue = []; // Array zur Speicherung der Kunden
this.spacing = 120; // Abstand zwischen den Kunden
CustomerQueue.instance = this; // Speichere die Instanz
}
static getInstance(scene) {
if (!CustomerQueue.instance) {
CustomerQueue.instance = new CustomerQueue(scene);
}
return CustomerQueue.instance;
}
// Füge einen neuen Kunden zur Schlange hinzu
enqueue(character) {
const positionX = this.centerX - this.queue.length * this.spacing; // Berechne die Position des neuen Kunden
character.setTargetX(positionX);
this.queue.push(character); // Füge den Kunden zur Schlange hinzu
console.log(`Neuer Kunde ${character.character.firstName} in der Schlange.`);
}
dequeue(character) {
const index = this.queue.indexOf(character); // Finde den Index des Charakters
if (index !== -1) {
this.queue.splice(index, 1); // Entferne den Charakter aus der Queue
console.log(`${character.character.firstName} wurde aus der Schlange entfernt.`);
} else {
console.log(`${character.character.firstName} befindet sich nicht in der Schlange.`);
}
this.updateQueuePositions();
}
contains(character) {
return this.queue.includes(character);
}
// Aktuelle Länge der Queue
size() {
return this.queue.length;
}
isFirst(character) {
const index = this.queue.indexOf(character);
return (index == 0)
}
// Aktualisiere die Positionen der verbleibenden Kunden
updateQueuePositions() {
for (let i = 0; i < this.queue.length; i++) {
const newX = this.calcPositionX(i);
const customer = this.queue[i];
customer.setTargetX(newX);
}
console.log("Schlange aktualisiert.");
}
calcPositionX(queueIndex) {
return this.centerX - queueIndex * this.spacing;
}
calcLastPositionX() {
return this.calcPositionX(this.queue.length - 1)
}
}