Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
76f5a34
feat: add background wall resource with collision support for the las…
Rosh7887epitech Jan 18, 2026
ef9e4b1
feat: add level configurations for jungle levels 1, 2, and 3 with ene…
Rosh7887epitech Jan 18, 2026
2ab4a04
feat: add Level 2 and Level 3 configurations with enemy and obstacle …
Rosh7887epitech Jan 18, 2026
8f763dd
feat: add Level 1, Level 2, and Level 3 configurations with enemy and…
Rosh7887epitech Jan 18, 2026
5f51d24
fix: adjust spawn position range and boss damage multiplier for balance
Rosh7887epitech Jan 18, 2026
0881098
Merge remote-tracking branch 'origin/main' into 327-add-wall-with-col…
Rosh7887epitech Jan 18, 2026
32bcba2
feat: add wall spawning functionality with collision for the last world
Rosh7887epitech Jan 18, 2026
79c3b2e
feat: add wall layers with collision box parsing to LevelManager
Rosh7887epitech Jan 18, 2026
13e8171
feat: add PixelCollision component for pixel-perfect collision detection
Rosh7887epitech Jan 18, 2026
d8aa667
feat: implement pixel collision handling in damage events
Rosh7887epitech Jan 18, 2026
d703eac
feat: add collision-enabled wall to Level 3 with defined properties
Rosh7887epitech Jan 18, 2026
9259873
Merge remote-tracking branch 'origin/main' into 327-add-wall-with-col…
Rosh7887epitech Jan 18, 2026
e318c4a
fix: correct formatting and include PixelCollision in relevant files
Rosh7887epitech Jan 18, 2026
ccee41b
refactor: remove unnecessary includes from RenderSystem and World files
Rosh7887epitech Jan 18, 2026
8ad4ab2
Merge remote-tracking branch 'origin/main' into 327-add-wall-with-col…
Rosh7887epitech Jan 18, 2026
9529984
Merge remote-tracking branch 'origin/main' into 327-add-wall-with-col…
Rosh7887epitech Jan 18, 2026
053e351
fix: improve collision damage registration logic in World.cpp
Rosh7887epitech Jan 18, 2026
af118eb
fix: remove unnecessary blank line in collision damage registration l…
Rosh7887epitech Jan 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions client/assets/json/background_wall.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"sprite": "background_wall",
"spriteId": 103,
"texture": "sprites/background_wall.png",
"default_animation": "static",
"animations": {
"static": {
"loop": false,
"frames": [
{ "x": 0, "y": 0, "w": 2540, "h": 207, "duration": 1.0 }
]
}
}
}
Binary file added client/assets/sprites/background_wall.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion client/src/engine/system/render/RenderSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ namespace Engine
cmd.position = {pos.x * scalePosX, pos.y * scalePosY, pos.z};
cmd.scale = {SCALE_FACTOR, SCALE_FACTOR};

if (drawable.spriteId >= 100 && drawable.spriteId < 103) {
if (drawable.spriteId >= 100 && drawable.spriteId <= 103) {
const auto viewportWidth = static_cast<float>(viewportSize.width);
const auto viewportHeight = static_cast<float>(viewportSize.height);
const auto frameWidth = static_cast<float>(cmd.frame.w);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ namespace EmbeddedResources
extern const unsigned int sprites_background_jungle_png_size;
extern const unsigned char sprites_background_ruin_png[];
extern const unsigned int sprites_background_ruin_png_size;
extern const unsigned char sprites_background_wall_png[];
extern const unsigned int sprites_background_wall_png_size;
extern const unsigned char sprites_bg_preview_png[];
extern const unsigned int sprites_bg_preview_png_size;
extern const unsigned char sprites_background_space_png[];
Expand Down Expand Up @@ -155,6 +157,8 @@ void EmbeddedResourceManager::registerResources()
EmbeddedResources::sprites_background_jungle_png, EmbeddedResources::sprites_background_jungle_png_size};
_resources["sprites/background_ruin.png"] = {
EmbeddedResources::sprites_background_ruin_png, EmbeddedResources::sprites_background_ruin_png_size};
_resources["sprites/background_wall.png"] = {
EmbeddedResources::sprites_background_wall_png, EmbeddedResources::sprites_background_wall_png_size};
_resources["sprites/menu_logo.png"] = {
EmbeddedResources::sprites_menu_logo_png, EmbeddedResources::sprites_menu_logo_png_size};
_resources["sprites/game_over.png"] = {
Expand Down
1 change: 1 addition & 0 deletions client/src/utils/assetLoader/AssetLoader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ namespace Utils
Engine::SpriteLoader::loadFromFile("client/assets/json/background_space.json", *spriteRegistry);
Engine::SpriteLoader::loadFromFile("client/assets/json/background_jungle.json", *spriteRegistry);
Engine::SpriteLoader::loadFromFile("client/assets/json/background_ruin.json", *spriteRegistry);
Engine::SpriteLoader::loadFromFile("client/assets/json/background_wall.json", *spriteRegistry);

Engine::SpriteLoader::loadFromFile("client/assets/json/boss.json", *spriteRegistry);
Engine::SpriteLoader::loadFromFile("client/assets/json/boss2.json", *spriteRegistry);
Expand Down
223 changes: 223 additions & 0 deletions levels/jungle_level1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
{
"name": "Level 1",
"background": {
"spriteId": 101,
"scrollSpeed": -50.0,
"tileWidth": 2584.0,
"tileHeight": 720.0
},
"enemies": {
"smallEnemy": {
"hp": 15,
"speed": -100,
"size": { "w": 65, "h": 66 },
"killScore": 30,
"sprite": "enemy",
"spriteId": 2,
"shoot": {
"type": "straight",
"cooldown": 2.0,
"projectileSpeed": 130,
"damage": 50,
"muzzle": { "x": -20, "y": 50 },
"projectileSpriteId": 9
}
},
"mediumEnemy": {
"hp": 40,
"speed": -70,
"size": { "w": 65, "h": 49 },
"killScore": 50,
"sprite": "enemy2",
"spriteId": 3,
"shoot": {
"type": "diagonal",
"angles": [-15, 15],
"cooldown": 2.0,
"projectileSpeed": 100,
"damage": 50,
"muzzle": { "x": -20, "y": 35 },
"projectileSpriteId": 9
}
},
"mediumEnemyTriple": {
"hp": 40,
"speed": -70,
"size": { "w": 65, "h": 49 },
"killScore": 65,
"sprite": "enemy2",
"spriteId": 3,
"shoot": {
"type": "diagonal",
"angles": [-25, 0, 25],
"cooldown": 2.2,
"projectileSpeed": 110,
"damage": 50,
"muzzle": { "x": -20, "y": 35 },
"projectileSpriteId": 12
}
},
"groupEnemy": {
"type": "group",
"members": [
{
"enemyType": "mediumEnemy",
"offset": { "x": 0, "y": 0 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": 0, "y": -130 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": 0, "y": 130 }
}
]
},
"groupEnemy2": {
"type": "group",
"members": [
{
"enemyType": "mediumEnemy",
"offset": { "x": -90, "y": 110 }
},
{
"enemyType": "mediumEnemy",
"offset": { "x": -90, "y": -110 }
},
{
"enemyType": "mediumEnemy",
"offset": { "x": 90, "y": 110 }
},
{
"enemyType": "mediumEnemy",
"offset": { "x": 90, "y": -110 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": 0, "y": 0 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": 150, "y": 0 }
}
]
},
"groupEnemy3": {
"type": "group",
"members": [
{
"enemyType": "mediumEnemy",
"offset": { "x": 0, "y": 0 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": -160, "y": -120 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": -160, "y": 120 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": 160, "y": -120 }
},
{
"enemyType": "smallEnemy",
"offset": { "x": 160, "y": 120 }
}
]
}
},
"obstacles": {
"gravityWell": {
"spriteId": 15,
"size": { "w": 34, "h": 34 },
"pullStrength": 250,
"damagePerSecond": 10,
"radius": 140,
"innerRadius": 50
}
},
"duration": 95,
"waves": [
{
"time": 1,
"enemies": { "smallEnemy": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 6,
"enemies": { "smallEnemy": 2 },
"spawnPattern": "spread"
},
{
"time": 9,
"enemies": { "smallEnemy": 3 },
"spawnPattern": "spread"
},
{
"time": 15,
"enemies": {},
"obstacleType": "gravityWell",
"obstacleY": 360,
"obstacleX": 500
},
{
"time": 16,
"enemies": { "smallEnemy": 2 },
"spawnPattern": "spread"
},
{
"time": 19,
"enemies": { "mediumEnemy": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 24,
"enemies": { "groupEnemy": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 29,
"obstacleType": "gravityWell",
"obstacleY": 100,
"obstacleX": 250,
"enemies": { "groupEnemy2": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 37,
"enemies": { "groupEnemy3": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 50,
"enemies": { "mediumEnemyTriple": 3 },
"spawnPattern": "spread"
},
{
"time": 65,
"enemies": { "groupEnemy3": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 80,
"enemies": { "groupEnemy3": 1 },
"spawnPattern": "line",
"spawnY": 360
},
{
"time": 83,
"enemies": { "groupEnemy3": 1 },
"spawnPattern": "line",
"spawnY": 360
}
]
}
Loading
Loading