Skip to content

Commit 8de59d2

Browse files
authored
Merge pull request #36 from dmitriypereverza/lights-feature
Add LightSystem feature
2 parents e7de915 + f40cf8f commit 8de59d2

39 files changed

+2160
-831
lines changed

index.html

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020
#app {
2121
position: absolute;
2222
width: 100vw;
23+
height: 100vh;
2324
min-width: 1024px;
24-
min-height: 768px;
25+
/*min-height: 768px;*/
2526
display: flex;
2627
justify-content: center;
2728
align-items: center;
@@ -32,18 +33,13 @@
3233
z-index: 2;
3334
}
3435

35-
#minimap {
36-
position: absolute;
37-
right: 20px;
38-
z-index: 3;
39-
}
4036

4137
#weapon {
4238
position: absolute;
4339
z-index: 4;
4440
}
4541

46-
#ui,
42+
#ui,
4743
#camera,
4844
#weapon {
4945
min-width: 50%;
@@ -54,4 +50,4 @@
5450
<div id="app">Loading..</div>
5551
<script type="module" src="/src/main.ts"></script>
5652
</body>
57-
</html>
53+
</html>

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"eslint": "^9.12.0",
1616
"globals": "^15.11.0",
1717
"husky": "^9.1.6",
18+
"prettier": "^3.4.2",
1819
"typescript": "^5.6.3",
1920
"typescript-eslint": "^8.8.1",
2021
"vite": "^5.4.8",

src/global.d.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,11 @@ type MapEntityDoor = {
5656
type: 'door',
5757
texture: string
5858
}
59+
type MapEntityLight = {
60+
type: 'light',
61+
}
5962

60-
type MapEntity = MapEntityEmpty | MapEntityWall | MapEntityDoor;
63+
type MapEntity = MapEntityEmpty | MapEntityWall | MapEntityDoor | MapEntityLight;
6164

6265
interface ExitEndingScenario {
6366
name: 'exit';

src/levels/generators/characters.ts

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,42 @@
1-
import { degreeToRadians } from "src/lib/utils";
1+
import { degreeToRadians } from "src/lib/utils/angle";
22

33
const random = (from: number, to: number) => {
44
return from + Math.random() * (to - from);
55
};
66

77
export const generateEntities =
88
<T>(generator: (x: number, y: number, ai: number) => T) =>
9-
(limit: number, x: number, y: number, dx: number, dy: number, ai: number = 0) => {
9+
(
10+
limit: number,
11+
x: number,
12+
y: number,
13+
dx: number,
14+
dy: number,
15+
ai: number = 0,
16+
) => {
1017
return new Array(limit)
1118
.fill(0)
12-
.map(() => generator(
13-
random(x - dx, x + dx),
14-
random(y - dy, y + dy),
15-
ai
16-
));
19+
.map(() => generator(random(x - dx, x + dx), random(y - dy, y + dy), ai));
1720
};
1821

19-
export const generateCircle = (x: number, y: number, radius: number, total: number): number[][] => {
22+
export const generateCircle = (
23+
x: number,
24+
y: number,
25+
radius: number,
26+
total: number,
27+
): number[][] => {
2028
const step = 360 / total;
2129
const coords = [];
2230

2331
for (let angle = 0; angle < 360; angle += step) {
2432
coords.push([
2533
x + radius * Math.cos(degreeToRadians(angle)),
26-
y + radius * Math.sin(degreeToRadians(angle))
34+
y + radius * Math.sin(degreeToRadians(angle)),
2735
]);
2836
}
2937

30-
return coords;
31-
}
38+
return coords;
39+
};
3240

3341
export const generateZombie = (x: number, y: number, aiDistance: number = 0) =>
3442
({
@@ -44,7 +52,6 @@ export const generateZombie = (x: number, y: number, aiDistance: number = 0) =>
4452
},
4553
}) as Enemy;
4654

47-
4855
export const generateFlyguy = (x: number, y: number, aiDistance: number = 0) =>
4956
({
5057
x,
@@ -54,7 +61,7 @@ export const generateFlyguy = (x: number, y: number, aiDistance: number = 0) =>
5461
health: 150,
5562
radius: 0.4,
5663
rangeWeapon: {
57-
bulletSprite: 'pistol_bullet',
64+
bulletSprite: "pistol_bullet",
5865
bulletDamage: 5,
5966
bulletSpeed: 8,
6067
attackDistance: 2,
@@ -71,15 +78,19 @@ export const generateSoldier = (x: number, y: number, aiDistance: number = 0) =>
7178
health: 200,
7279
radius: 0.4,
7380
rangeWeapon: {
74-
bulletSprite: 'shotgun_bullet',
81+
bulletSprite: "shotgun_bullet",
7582
bulletDamage: 10,
7683
bulletSpeed: 6,
7784
attackDistance: 2,
7885
attackFrequency: 1_500,
7986
},
8087
}) as Enemy;
8188

82-
export const generateCommando = (x: number, y: number, aiDistance: number = 0) =>
89+
export const generateCommando = (
90+
x: number,
91+
y: number,
92+
aiDistance: number = 0,
93+
) =>
8394
({
8495
x,
8596
y,
@@ -88,7 +99,7 @@ export const generateCommando = (x: number, y: number, aiDistance: number = 0) =
8899
health: 500,
89100
radius: 0.6,
90101
rangeWeapon: {
91-
bulletSprite: 'shotgun_bullet',
102+
bulletSprite: "shotgun_bullet",
92103
bulletDamage: 15,
93104
bulletSpeed: 7,
94105
attackDistance: 3,
@@ -105,13 +116,12 @@ export const generateTank = (x: number, y: number, aiDistance: number = 0) =>
105116
health: 2000,
106117
radius: 0.4,
107118
rangeWeapon: {
108-
bulletSprite: 'shotgun_bullet',
119+
bulletSprite: "shotgun_bullet",
109120
bulletDamage: 25,
110121
bulletSpeed: 5,
111122
attackDistance: 3,
112123
attackFrequency: 750,
113124
},
114-
115125
}) as Enemy;
116126

117127
export const generateZombies = generateEntities(generateZombie);

src/levels/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import level_1 from "./level_1";
22
import level_2 from "./level_2";
33
import level_final from "./level_final";
44

5+
// prettier-ignore
56
export default [
67
level_1,
78
level_2,
89
level_final,
10+
911
];

src/levels/level_1.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,25 @@ const level: Level = {
88
bottom: { r: 84, g: 98, b: 92, a: 255 },
99
},
1010
},
11-
music: 'shocking-red-abbynoise',
11+
music: "shocking-red-abbynoise",
12+
// prettier-ignore
1213
map: [
1314
['#', '#', '#', '#', '&', '#', '#', '#', '#', '#', '#', '&', '#', '#', '#', '#', '#', '#', '#', '#'],
14-
['#', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'],
15+
['#', ' ', ' ', ' ', '&', ' ', '*', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '#'],
1516
['5', ' ', ' ', ' ', '|', ' ', ' ', '&', ' ', ' ', ' ', '&', ' ', ' ', '&', ' ', ' ', ' ', ' ', '4'],
16-
['#', ' ', ' ', ' ', '&', '|', '&', '&', ' ', ' ', ' ', '&', ' ', ' ', '&', ' ', ' ', ' ', ' ', '#'],
17-
['#', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', '#'],
17+
['#', ' ', ' ', ' ', '&', ' ', '&', '&', ' ', ' ', ' ', '&', ' ', ' ', '&', ' ', ' ', ' ', ' ', '#'],
1818
['#', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', '#'],
19+
['#', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', ' ', ' ', ' ', '&', ' ', ' ', ' ', '*', '#'],
1920
['#', '#', '#', '#', '#', '#', '#', '&', '#', '#', '#', '#', '#', '#', '&', '#', '#', '#', '#', '#'],
2021
],
2122
mapEntities: {
22-
' ': { type: 'empty' },
23-
'#': { type: 'wall', texture: "TECH_1C" },
24-
'&': { type: 'wall', texture: "TECH_1E" },
25-
'4': { type: 'wall', texture: "DOOR_1A" },
26-
'5': { type: 'wall', texture: "DOOR_1E" },
27-
'|': { type: 'door', texture: "DOOR_1A" },
23+
" ": { type: "empty" },
24+
"#": { type: "wall", texture: "TECH_1C" },
25+
"&": { type: "wall", texture: "TECH_1E" },
26+
"4": { type: "wall", texture: "DOOR_1A" },
27+
"5": { type: "wall", texture: "DOOR_1E" },
28+
"|": { type: "door", texture: "DOOR_1A" },
29+
"*": { type: "light" },
2830
},
2931
player: {
3032
x: 1.5,
@@ -48,8 +50,8 @@ const level: Level = {
4850
...generateZombies(10, 13, 2.5, 0.75, 0.75, 2),
4951
],
5052
endingScenario: {
51-
name:'exit',
52-
position: { x: 18, y: 2 }
53+
name: "exit",
54+
position: { x: 18, y: 2 },
5355
},
5456
};
5557

src/levels/level_2.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { generateSoldier, generateZombie, generateZombies } from "./generators/characters";
1+
import {
2+
generateSoldier,
3+
generateZombie,
4+
generateZombies,
5+
} from "./generators/characters";
26
import { generatePistolAmmo, generateHealthPack } from "./generators/items";
37

48
const level: Level = {
@@ -8,7 +12,8 @@ const level: Level = {
812
bottom: { r: 84, g: 98, b: 92, a: 255 },
913
},
1014
},
11-
music: 'heavy-duty-zoo',
15+
music: "heavy-duty-zoo",
16+
// prettier-ignore
1217
map: [
1318
[1, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
1419
[1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4],
@@ -23,12 +28,12 @@ const level: Level = {
2328
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1],
2429
],
2530
mapEntities: {
26-
0: {type:'empty'},
27-
1: {type:'wall', texture: "TECH_1C" },
28-
2: {type:'wall', texture: "TECH_1E" },
29-
3: {type:'wall', texture: "TECH_2F" },
30-
4: {type:'wall', texture: "DOOR_1A" },
31-
5: {type:'wall', texture: "DOOR_1E" },
31+
0: { type: "empty" },
32+
1: { type: "wall", texture: "TECH_1C" },
33+
2: { type: "wall", texture: "TECH_1E" },
34+
3: { type: "wall", texture: "TECH_2F" },
35+
4: { type: "wall", texture: "DOOR_1A" },
36+
5: { type: "wall", texture: "DOOR_1E" },
3237
},
3338
player: {
3439
x: 1.5,
@@ -86,11 +91,11 @@ const level: Level = {
8691
...generateZombies(50, 17, 2, 1, 1, 2),
8792
],
8893
endingScenario: {
89-
name:'exit',
94+
name: "exit",
9095
position: {
9196
x: 22,
9297
y: 1,
93-
}
98+
},
9499
},
95100
};
96101

src/levels/level_3.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { generateFlygies, generateSoldiers, generateZombies } from "./generators/characters";
1+
import {
2+
generateFlygies,
3+
generateSoldiers,
4+
generateZombies,
5+
} from "./generators/characters";
26
import { generatePistolAmmo } from "./generators/items";
37

48
const level: Level = {
@@ -8,7 +12,8 @@ const level: Level = {
812
bottom: { r: 84, g: 98, b: 92, a: 255 },
913
},
1014
},
11-
music: 'heavy-duty-zoo',
15+
music: "heavy-duty-zoo",
16+
// prettier-ignore
1217
map: [
1318
[1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1],
1419
[1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1],
@@ -21,12 +26,12 @@ const level: Level = {
2126
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1],
2227
],
2328
mapEntities: {
24-
0: {type:'empty'},
25-
1: {type:'wall', texture: "TECH_1C" },
26-
2: {type:'wall', texture: "TECH_1E" },
27-
3: {type:'wall', texture: "TECH_2F" },
28-
4: {type:'wall', texture: "DOOR_1A" },
29-
5: {type:'wall', texture: "DOOR_1E" },
29+
0: { type: "empty" },
30+
1: { type: "wall", texture: "TECH_1C" },
31+
2: { type: "wall", texture: "TECH_1E" },
32+
3: { type: "wall", texture: "TECH_2F" },
33+
4: { type: "wall", texture: "DOOR_1A" },
34+
5: { type: "wall", texture: "DOOR_1E" },
3035
},
3136
player: {
3237
x: 2,
@@ -45,11 +50,11 @@ const level: Level = {
4550
...generateSoldiers(20, 8, 8, 1, 1, 5),
4651
],
4752
endingScenario: {
48-
name:'exit',
53+
name: "exit",
4954
position: {
5055
x: 18,
5156
y: 2,
52-
}
57+
},
5358
},
5459
};
5560

0 commit comments

Comments
 (0)