-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtypes.ts
More file actions
75 lines (64 loc) · 1.26 KB
/
types.ts
File metadata and controls
75 lines (64 loc) · 1.26 KB
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
75
export enum GameState {
MENU,
PLAYING,
GAME_OVER
}
export interface Vector2 {
x: number;
y: number;
}
export interface Pellet {
id: string;
x: number;
y: number;
value: number;
color: string;
radius: number;
consumed?: boolean; // New flag to handle frame-sync eating
}
export enum BotType {
GRAZER = 'Grazer',
AGGRESSIVE = 'Aggressive',
CAUTIOUS = 'Cautious',
OPPORTUNIST = 'Opportunist'
}
export interface Snake {
id: string;
name: string;
isBot: boolean;
botType?: BotType;
// Physics
head: Vector2;
path: Vector2[]; // History of positions
angle: number;
targetAngle: number;
speed: number;
radius: number;
// Game logic
length: number; // Current visual length (not array length, but logical length)
targetLength: number; // Length snake wants to be (grows towards this)
score: number;
// Visuals
color: string;
hue: number;
// State
dead: boolean;
boosting: boolean;
boostEnergy: number;
// AI State
wanderAngle: number;
lastWanderChange: number;
}
export interface GameConfig {
arenaSize: number;
baseSpeed: number;
boostSpeed: number;
turnSpeed: number;
startLength: number;
pelletValue: number;
}
export interface Camera {
x: number;
y: number;
zoom: number;
}