Compare commits
No commits in common. "c7afabd4c49c518b1e2f2311b7129b1d45c8ec88" and "53194e3fc7c82f92b4c4b9cc117cd76bfb2a16f9" have entirely different histories.
c7afabd4c4
...
53194e3fc7
9
.ccls
9
.ccls
|
|
@ -1 +1,10 @@
|
||||||
gcc
|
gcc
|
||||||
|
# Headers
|
||||||
|
-Isrc/components/headers
|
||||||
|
-ISDL3_Core/src/headers
|
||||||
|
#-INCurses_Core/src/headers
|
||||||
|
-Iassets/asset_builder/src/headers
|
||||||
|
|
||||||
|
# Macros
|
||||||
|
-DASSET_FILE_NAME="$(make print-ASSET_OUTPUT)"
|
||||||
|
-DDEBUG=2
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
.vscode/ccls-cache
|
.ccls-cache
|
||||||
build
|
build
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit c71af2e8036c0e8dbed88f986df448b065d93f9b
|
Subproject commit ea7f7453133cb3ce231db074986820cbba86c0a6
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
ASSETS := \
|
ASSETS := \
|
||||||
|
misc/dummy_sheet.png \
|
||||||
player_sheets/player_idle_sheet.png \
|
player_sheets/player_idle_sheet.png \
|
||||||
player_sheets/player_walk_sheet.png \
|
player_sheets/player_walk_sheet.png \
|
||||||
player_sheets/player_run_sheet.png \
|
player_sheets/player_run_sheet.png \
|
||||||
|
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
gcc
|
|
||||||
# Headers
|
|
||||||
-Iassets/asset_builder/src/headers
|
|
||||||
|
|
||||||
# Macros
|
|
||||||
-DDEBUG=2
|
|
||||||
|
|
@ -206,27 +206,25 @@ int parse_png_for_content_and_write(const char *input_file_name, FILE *output_fi
|
||||||
}
|
}
|
||||||
|
|
||||||
// Prepare storage.
|
// Prepare storage.
|
||||||
png_byte src_pixels[height * row_length];
|
png_byte pixels[height * row_length];
|
||||||
png_bytep src_row_ptrs[height];
|
png_bytep row_ptrs[height];
|
||||||
for(png_uint_32 i = 0; i < height; i++)
|
for(png_uint_32 i = 0; i < height; i++)
|
||||||
src_row_ptrs[i] = &src_pixels[i * row_length];
|
row_ptrs[i] = &pixels[i * row_length];
|
||||||
|
|
||||||
// Read pixels.
|
// Read pixels.
|
||||||
png_read_image(png_ptr, src_row_ptrs);
|
png_read_image(png_ptr, row_ptrs);
|
||||||
|
|
||||||
uint16_t dst_pixels[width * height * sizeof(uint16_t)];
|
|
||||||
|
|
||||||
for(size_t i = 0; i < height; i++)
|
for(size_t i = 0; i < height; i++)
|
||||||
{
|
{
|
||||||
for(size_t j = 0; j < width; j += 1)
|
for(size_t j = 0; j < row_length; j += 4)
|
||||||
{
|
{
|
||||||
uint8_t r, g, b;
|
uint8_t r, g, b;
|
||||||
|
|
||||||
if(src_pixels[i * row_length + j * 4 + 3])
|
if(pixels[i * row_length + j + 3])
|
||||||
{
|
{
|
||||||
r = src_pixels[i * row_length + j * 4] >> 3;
|
r = pixels[i * row_length + j] >> 3;
|
||||||
g = src_pixels[i * row_length + j * 4 + 1] >> 2;
|
g = pixels[i * row_length + j + 1] >> 2;
|
||||||
b = src_pixels[i * row_length + j * 4 + 2] >> 3;
|
b = pixels[i * row_length + j + 2] >> 3;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -237,19 +235,17 @@ int parse_png_for_content_and_write(const char *input_file_name, FILE *output_fi
|
||||||
|
|
||||||
uint16_t pixel = ((r) << 11) | ((g) << 5) | b;
|
uint16_t pixel = ((r) << 11) | ((g) << 5) | b;
|
||||||
|
|
||||||
dst_pixels[i * width + j] = pixel;
|
|
||||||
|
|
||||||
// printf("\033[48;2;%d;%d;%dm ", r << 3, g << 2, b << 3);
|
// printf("\033[48;2;%d;%d;%dm ", r << 3, g << 2, b << 3);
|
||||||
}
|
|
||||||
// puts("\033[m");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(fwrite(&dst_pixels, width * height * sizeof(uint16_t), 1, output_file) != 1)
|
if(fwrite(&pixel, sizeof(uint16_t), 1, output_file) != 1)
|
||||||
{
|
{
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
fclose(input_file);
|
fclose(input_file);
|
||||||
return WRITE_FAILED;
|
return WRITE_FAILED;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
// puts("\033[m");
|
||||||
|
}
|
||||||
|
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
fclose(input_file);
|
fclose(input_file);
|
||||||
|
|
|
||||||
|
|
@ -106,7 +106,7 @@
|
||||||
0, 0, 0, 0, 0, 0, 0, 1821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323, 2324, 2325, 2326, 2327, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 1821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2323, 2324, 2325, 2326, 2327, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 1867, 0, 0, 1870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2372, 2373, 2374, 2375, 2376, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 1867, 0, 0, 1870, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2372, 2373, 2374, 2375, 2376, 0, 0, 0, 0, 0
|
||||||
],
|
],
|
||||||
"Hitboxes": [
|
"HitBoxes": [
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
|
@ -131,5 +131,5 @@
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
],
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<map version="1.10" tiledversion="1.12.1" orientation="orthogonal" renderorder="left-up" width="32" height="24" tilewidth="16" tileheight="16" infinite="0" nextlayerid="14" nextobjectid="17">
|
<map version="1.10" tiledversion="1.12.1" orientation="orthogonal" renderorder="left-up" width="32" height="24" tilewidth="16" tileheight="16" infinite="0" nextlayerid="13" nextobjectid="12">
|
||||||
<editorsettings>
|
<editorsettings>
|
||||||
<export target="dungeon_entry.json" format="custom"/>
|
<export target="dungeon_entry.json" format="custom"/>
|
||||||
</editorsettings>
|
</editorsettings>
|
||||||
|
|
@ -25,10 +25,18 @@
|
||||||
eJy9lr1Lw0AYh69JzIeTirZCQXDTxUlBdFKsVRDERfwbXEXQRakfrXbVQXAX7KDS+lHQSdDJQSdRBy212gpOnRQEfyEJvbZJTHK1w0NCkrvnzXt3752PEOKrAbcCIXcCez/9HCE7Dd7ach7bVTLLle5vatSnG3Yp/0+FP8jXN5YeUbtuwhsHAZMx3qpjjiIyIStgFayBdRAFMVl7L+vxNor/40/CkwLH4AScgjOQlkvfDMA9qPszHLvzEn0FFELaQRaeV5ADb+Ad5EFBNs9NUs9PVHbmovtQ2xfxsAj/GNzjirfcGPHFxepxM+ujk9P6MMutHXa5Ud+fw38hlsdmtN3mq/sw2k97GMMliZBlSc+pVP6Ojs14dgX/tcXajrn0H8B3CI4kd+2sSLv0P8P7AjK6P+swji7Ulm4QofKQh7vg0t+EvDaDFjDlcO7MVNS1FK/NU7q2OGUI3w+7aLNhsW/m+Or5z2MNCn+sQ5U5lzGb4RfK149KL9x9YNEiBrp+OPV8WPx/2OY8kaD8X7j/1mOia9AI8hdysF8GLfavBRP/AxyP4Mnk/xMV9Xne4V49YeHfd3GeMotpj+GsYNRKlvlzz3hW+WT0y4zn0Q6G+tmKsWgDfqW0dzuaC5RzksEfgm8UhBX7vfsXuP91rA==
|
eJy9lr1Lw0AYh69JzIeTirZCQXDTxUlBdFKsVRDERfwbXEXQRakfrXbVQXAX7KDS+lHQSdDJQSdRBy212gpOnRQEfyEJvbZJTHK1w0NCkrvnzXt3752PEOKrAbcCIXcCez/9HCE7Dd7ach7bVTLLle5vatSnG3Yp/0+FP8jXN5YeUbtuwhsHAZMx3qpjjiIyIStgFayBdRAFMVl7L+vxNor/40/CkwLH4AScgjOQlkvfDMA9qPszHLvzEn0FFELaQRaeV5ADb+Ad5EFBNs9NUs9PVHbmovtQ2xfxsAj/GNzjirfcGPHFxepxM+ujk9P6MMutHXa5Ud+fw38hlsdmtN3mq/sw2k97GMMliZBlSc+pVP6Ojs14dgX/tcXajrn0H8B3CI4kd+2sSLv0P8P7AjK6P+swji7Ulm4QofKQh7vg0t+EvDaDFjDlcO7MVNS1FK/NU7q2OGUI3w+7aLNhsW/m+Or5z2MNCn+sQ5U5lzGb4RfK149KL9x9YNEiBrp+OPV8WPx/2OY8kaD8X7j/1mOia9AI8hdysF8GLfavBRP/AxyP4Mnk/xMV9Xne4V49YeHfd3GeMotpj+GsYNRKlvlzz3hW+WT0y4zn0Q6G+tmKsWgDfqW0dzuaC5RzksEfgm8UhBX7vfsXuP91rA==
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<layer id="12" name="Hitboxes" width="32" height="24">
|
<layer id="12" name="HitBoxes" width="32" height="24" visible="0">
|
||||||
|
<properties>
|
||||||
|
<property name="2" type="list">
|
||||||
|
<item value="room_1"/>
|
||||||
|
<item type="list">
|
||||||
|
<item type="int" value="15"/>
|
||||||
|
<item type="int" value="22"/>
|
||||||
|
</item>
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
<data encoding="base64" compression="zlib">
|
<data encoding="base64" compression="zlib">
|
||||||
eJwL52JgCB/Fo3gUj+IhhiOhmB52RWDBxMhRy25S5anpBnL9Rg03kGsGLfw/EHaTmg5oZTeutECrND+KR/Eopj0GAGrPIzU=
|
eJwL52JgCB/Fo3gUj+IhhiOhmB52RWDBxMhRy25S5anpBnL9Rg03kGsGLfw/EHaTmg5oZTeutECrND+KR/Eopj0GAGrPIzU=
|
||||||
</data>
|
</data>
|
||||||
</layer>
|
</layer>
|
||||||
<objectgroup id="13" name="Entities"/>
|
|
||||||
</map>
|
</map>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"Entities": []
|
||||||
|
}
|
||||||
|
|
@ -1,203 +0,0 @@
|
||||||
{
|
|
||||||
"MapWidth": 14,
|
|
||||||
"MapHeight": 16,
|
|
||||||
|
|
||||||
"BackgroundLayer1": [
|
|
||||||
13, 157, 157, 157, 157, 157, 245, 247, 157, 157, 157, 157, 157, 14,
|
|
||||||
108, 1, 2, 2, 2, 2, 245, 247, 2, 2, 2, 2, 3, 156,
|
|
||||||
108, 50, 51, 51, 51, 51, 245, 247, 51, 51, 51, 51, 52, 156,
|
|
||||||
108, 196, 197, 197, 197, 197, 151, 150, 197, 197, 197, 197, 198, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 245, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 247, 156,
|
|
||||||
108, 294, 295, 295, 295, 295, 295, 295, 295, 295, 295, 295, 296, 156,
|
|
||||||
62, 107, 107, 107, 107, 107, 69, 70, 107, 107, 107, 107, 107, 63
|
|
||||||
],
|
|
||||||
"BackgroundLayer2": [
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 120, 121, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
],
|
|
||||||
"BackgroundLayer3": [
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
],
|
|
||||||
"Foreground": [
|
|
||||||
0, 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 71, 72, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 20, 21, 0, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
],
|
|
||||||
"Hitboxes": [
|
|
||||||
0, 0, 0, 0, 0, 1, 3, 3, 1, 0, 0, 0, 0, 0,
|
|
||||||
0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0,
|
|
||||||
1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
|
|
||||||
1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1
|
|
||||||
],
|
|
||||||
"Entities": [
|
|
||||||
{
|
|
||||||
"ID":1,
|
|
||||||
"Components": [
|
|
||||||
{
|
|
||||||
"Type": "TRANSFORM_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
96,
|
|
||||||
0,
|
|
||||||
32,
|
|
||||||
48
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "SPRITE_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
"barred_door_sheet"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "ANIMATION_SYSTEM",
|
|
||||||
"Attributes": [
|
|
||||||
8,
|
|
||||||
0,
|
|
||||||
30,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "HITBOX_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
0,
|
|
||||||
0.8333333333333334,
|
|
||||||
1,
|
|
||||||
0.16666666666666666
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "DOOR_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
"0",
|
|
||||||
false
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID":2,
|
|
||||||
"Components": [
|
|
||||||
{
|
|
||||||
"Type": "TRANSFORM_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
88,
|
|
||||||
112,
|
|
||||||
48,
|
|
||||||
32
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "SPRITE_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
"lever_sheet"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "ANIMATION_SYSTEM",
|
|
||||||
"Attributes": [
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
100,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "HITBOX_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
0.3333333333333333,
|
|
||||||
0.59375,
|
|
||||||
0.3333333333333333,
|
|
||||||
0.34375
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "INTERACT_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
0.16666666666666666,
|
|
||||||
0.34375,
|
|
||||||
0.6666666666666666,
|
|
||||||
0.84375,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Type": "LEVER_COMPONENT",
|
|
||||||
"Attributes": [
|
|
||||||
0,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
@ -1,182 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<map version="1.10" tiledversion="1.12.1" orientation="orthogonal" renderorder="right-down" width="14" height="16" tilewidth="16" tileheight="16" infinite="0" nextlayerid="9" nextobjectid="13">
|
|
||||||
<editorsettings>
|
|
||||||
<export target="dungeon_room_1.json" format="custom"/>
|
|
||||||
</editorsettings>
|
|
||||||
<tileset firstgid="1" source="../tileset/tileset.tsx"/>
|
|
||||||
<tileset firstgid="2647" source="hiitboxes.tsx"/>
|
|
||||||
<layer id="1" name="BackgroundLayer1" width="14" height="16">
|
|
||||||
<data encoding="csv">
|
|
||||||
14,158,158,158,158,158,246,248,158,158,158,158,158,15,
|
|
||||||
109,2,3,3,3,3,246,248,3,3,3,3,4,157,
|
|
||||||
109,51,52,52,52,52,246,248,52,52,52,52,53,157,
|
|
||||||
109,197,198,198,198,198,152,151,198,198,198,198,199,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,246,247,247,247,247,247,247,247,247,247,247,248,157,
|
|
||||||
109,295,296,296,296,296,296,296,296,296,296,296,297,157,
|
|
||||||
63,108,108,108,108,108,70,71,108,108,108,108,108,64
|
|
||||||
</data>
|
|
||||||
</layer>
|
|
||||||
<layer id="2" name="BackgroundLayer2" width="14" height="16">
|
|
||||||
<data encoding="csv">
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,121,122,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
|
||||||
</data>
|
|
||||||
</layer>
|
|
||||||
<layer id="3" name="BackgroundLayer3" width="14" height="16">
|
|
||||||
<data encoding="csv">
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
|
||||||
</data>
|
|
||||||
</layer>
|
|
||||||
<layer id="4" name="Foreground" width="14" height="16">
|
|
||||||
<data encoding="csv">
|
|
||||||
1,1,1,1,1,1,23,24,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,72,73,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,21,22,1,1,1,1,1,1,
|
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1
|
|
||||||
</data>
|
|
||||||
</layer>
|
|
||||||
<layer id="7" name="Hitboxes" width="14" height="16">
|
|
||||||
<data encoding="csv">
|
|
||||||
2647,2647,2647,2647,2647,2648,2650,2650,2648,2647,2647,2647,2647,2647,
|
|
||||||
2647,2647,2647,2647,2647,2648,2647,2647,2648,2647,2647,2647,2647,2647,
|
|
||||||
2648,2648,2648,2648,2648,2648,2647,2647,2648,2648,2648,2648,2648,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2647,2648,
|
|
||||||
2648,2648,2648,2648,2648,2648,2649,2649,2648,2648,2648,2648,2648,2648
|
|
||||||
</data>
|
|
||||||
</layer>
|
|
||||||
<objectgroup id="8" name="Entities">
|
|
||||||
<object id="4" name="1" x="96" y="0" width="32" height="48">
|
|
||||||
<properties>
|
|
||||||
<property name="components" type="list">
|
|
||||||
<item type="list">
|
|
||||||
<item value="TRANSFORM_COMPONENT"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="SPRITE_COMPONENT"/>
|
|
||||||
<item value="barred_door_sheet"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="ANIMATION_SYSTEM"/>
|
|
||||||
<item type="int" value="8"/>
|
|
||||||
<item type="int" value="0"/>
|
|
||||||
<item type="float" value="30"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="HITBOX_COMPONENT"/>
|
|
||||||
<item type="object" value="5"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="DOOR_COMPONENT"/>
|
|
||||||
<item value="0"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
</item>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
</object>
|
|
||||||
<object id="5" x="96" y="40" width="32" height="8"/>
|
|
||||||
<object id="8" name="2" x="88" y="112" width="48" height="32">
|
|
||||||
<properties>
|
|
||||||
<property name="components" type="list">
|
|
||||||
<item type="list">
|
|
||||||
<item value="TRANSFORM_COMPONENT"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="SPRITE_COMPONENT"/>
|
|
||||||
<item value="lever_sheet"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="ANIMATION_SYSTEM"/>
|
|
||||||
<item type="int" value="3"/>
|
|
||||||
<item type="int" value="0"/>
|
|
||||||
<item type="float" value="100"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="HITBOX_COMPONENT"/>
|
|
||||||
<item type="object" value="9"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="INTERACT_COMPONENT"/>
|
|
||||||
<item type="object" value="10"/>
|
|
||||||
<item type="int" value="0"/>
|
|
||||||
<item type="int" value="0"/>
|
|
||||||
<item type="int" value="0"/>
|
|
||||||
</item>
|
|
||||||
<item type="list">
|
|
||||||
<item value="LEVER_COMPONENT"/>
|
|
||||||
<item type="int" value="0"/>
|
|
||||||
<item type="bool" value="false"/>
|
|
||||||
</item>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
</object>
|
|
||||||
<object id="9" x="104" y="131" width="16" height="11"/>
|
|
||||||
<object id="10" x="96" y="123" width="32" height="27"/>
|
|
||||||
</objectgroup>
|
|
||||||
</map>
|
|
||||||
|
|
@ -1,15 +1,32 @@
|
||||||
function writeTileLayer(tileLayer, file)
|
var customMapFormat = {
|
||||||
{
|
name: "Custom map format",
|
||||||
file.writeLine(" \"" + tileLayer.name + "\": [");
|
extension: "custom",
|
||||||
|
|
||||||
for(let cell_y = 0; cell_y < tileLayer.height; ++cell_y)
|
write: function(map, fileName)
|
||||||
|
{
|
||||||
|
var file = new TextFile(fileName, TextFile.WriteOnly);
|
||||||
|
|
||||||
|
file.writeLine("{");
|
||||||
|
file.writeLine(" \"MapWidth\": " + map.width + ",");
|
||||||
|
file.writeLine(" \"MapHeight\": " + map.height + ",");
|
||||||
|
file.writeLine("");
|
||||||
|
|
||||||
|
for(var i = 0; i < map.layerCount; i++)
|
||||||
|
{
|
||||||
|
var layer = map.layerAt(i);
|
||||||
|
|
||||||
|
if(layer.isTileLayer)
|
||||||
|
{
|
||||||
|
file.writeLine(" \"" + layer.name + "\": [");
|
||||||
|
|
||||||
|
for(var cell_y = 0; cell_y < layer.height; ++cell_y)
|
||||||
{
|
{
|
||||||
file.write(" ");
|
file.write(" ");
|
||||||
|
|
||||||
for(let cell_x = 0; cell_x < tileLayer.width; ++cell_x)
|
for (var cell_x = 0; cell_x < layer.width; ++cell_x)
|
||||||
{
|
{
|
||||||
file.write(" " + tileLayer.cellAt(cell_x, cell_y).tileId)
|
file.write(" " + layer.cellAt(cell_x, cell_y).tileId)
|
||||||
if(cell_x < tileLayer.width - 1 || cell_y < tileLayer.height - 1)
|
if(cell_x < layer.width - 1 || cell_y < layer.height - 1)
|
||||||
file.write(",");
|
file.write(",");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -17,183 +34,6 @@ function writeTileLayer(tileLayer, file)
|
||||||
}
|
}
|
||||||
|
|
||||||
file.writeLine(" ],");
|
file.writeLine(" ],");
|
||||||
}
|
|
||||||
|
|
||||||
function writeEntities(objectLayer, file)
|
|
||||||
{
|
|
||||||
file.writeLine(" \"Entities\": [");
|
|
||||||
|
|
||||||
let entities = [];
|
|
||||||
|
|
||||||
for(let i = 0; i < objectLayer.objectCount; i++)
|
|
||||||
{
|
|
||||||
let entity = objectLayer.objectAt(i);
|
|
||||||
|
|
||||||
if(entity.name)
|
|
||||||
{
|
|
||||||
entities.push(entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(let i = 0; i < entities.length; i++)
|
|
||||||
{
|
|
||||||
let entity = entities[i];
|
|
||||||
|
|
||||||
file.writeLine(" {");
|
|
||||||
file.writeLine(" \"ID\":" + entity.name + ",");
|
|
||||||
file.writeLine(" \"Components\": [");
|
|
||||||
|
|
||||||
let components = entity.properties()["components"];
|
|
||||||
let nb_components = Object.keys(components).length;
|
|
||||||
|
|
||||||
for(let j = 0; j < nb_components; j++)
|
|
||||||
{
|
|
||||||
let component = components[j];
|
|
||||||
let component_type = component[0];
|
|
||||||
|
|
||||||
file.writeLine(" {");
|
|
||||||
|
|
||||||
file.write(" \"Type\": \"" + component_type + "\"");
|
|
||||||
|
|
||||||
if(component.length > 1)
|
|
||||||
{
|
|
||||||
file.writeLine(",");
|
|
||||||
file.writeLine(" \"Attributes\": [");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write atributes, speciale cases need speciale treatment.
|
|
||||||
if(component_type == "TRANSFORM_COMPONENT")
|
|
||||||
{
|
|
||||||
file.writeLine(",");
|
|
||||||
file.writeLine(" \"Attributes\": [");
|
|
||||||
file.writeLine(" " + entity.x + ",");
|
|
||||||
file.writeLine(" " + entity.y + ",");
|
|
||||||
file.writeLine(" " + entity.width + ",");
|
|
||||||
file.writeLine(" " + entity.height);
|
|
||||||
file.writeLine(" ]");
|
|
||||||
}
|
|
||||||
else if(component_type == "HITBOX_COMPONENT")
|
|
||||||
{
|
|
||||||
let hitbox;
|
|
||||||
|
|
||||||
for(let k = 0; k < objectLayer.objectCount; k++)
|
|
||||||
{
|
|
||||||
hitbox = objectLayer.objectAt(k);
|
|
||||||
if(hitbox.id === component[1].id)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let x = (hitbox.x - entity.x) / entity.width;
|
|
||||||
let y = (hitbox.y - entity.y) / entity.height;
|
|
||||||
let width = hitbox.width / entity.width;
|
|
||||||
let height = hitbox.height / entity.height;
|
|
||||||
|
|
||||||
file.writeLine(" " + x + ",");
|
|
||||||
file.writeLine(" " + y + ",");
|
|
||||||
file.writeLine(" " + width + ",");
|
|
||||||
file.writeLine(" " + height);
|
|
||||||
}
|
|
||||||
else if(component_type == "INTERACT_COMPONENT")
|
|
||||||
{
|
|
||||||
let interact_box;
|
|
||||||
|
|
||||||
for(let k = 0; k < objectLayer.objectCount; k++)
|
|
||||||
{
|
|
||||||
interact_box = objectLayer.objectAt(k);
|
|
||||||
if(interact_box.id === component[1].id)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let x = (interact_box.x - entity.x) / entity.width;
|
|
||||||
let y = (interact_box.y - entity.y) / entity.height;
|
|
||||||
let width = interact_box.width / entity.width;
|
|
||||||
let height = interact_box.height / entity.height;
|
|
||||||
|
|
||||||
file.writeLine(" " + x + ",");
|
|
||||||
file.writeLine(" " + y + ",");
|
|
||||||
file.writeLine(" " + width + ",");
|
|
||||||
file.writeLine(" " + height + ",");
|
|
||||||
|
|
||||||
file.writeLine(" " + component[2] + ",");
|
|
||||||
file.writeLine(" " + component[3] + ",");
|
|
||||||
file.writeLine(" " + component[4]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(component.length > 1)
|
|
||||||
{
|
|
||||||
for(let k = 1; k < component.length; k++)
|
|
||||||
{
|
|
||||||
file.write(" ");
|
|
||||||
switch(typeof(component[k]))
|
|
||||||
{
|
|
||||||
case typeof(Number()):
|
|
||||||
case typeof(Boolean()):
|
|
||||||
file.write(component[k]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case typeof(String()):
|
|
||||||
file.write("\"" + component[k] + "\"");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new Error("Attribute \"" + component[k] + "\", type not supported : " + typeof(component[k]));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(k == component.length - 1)
|
|
||||||
file.writeLine("");
|
|
||||||
else
|
|
||||||
file.writeLine(",");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
file.writeLine("");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(component.length > 1)
|
|
||||||
file.writeLine(" ]");
|
|
||||||
|
|
||||||
if(j == nb_components - 1)
|
|
||||||
file.writeLine(" }");
|
|
||||||
else
|
|
||||||
file.writeLine(" },");
|
|
||||||
}
|
|
||||||
|
|
||||||
file.writeLine(" ]");
|
|
||||||
|
|
||||||
if(i == entities.length - 1)
|
|
||||||
file.writeLine(" }");
|
|
||||||
else
|
|
||||||
file.writeLine(" },");
|
|
||||||
}
|
|
||||||
|
|
||||||
file.writeLine(" ]");
|
|
||||||
}
|
|
||||||
|
|
||||||
var customMapFormat = {
|
|
||||||
name: "Custom JSON map format",
|
|
||||||
extension: "json",
|
|
||||||
|
|
||||||
write: function(map, fileName)
|
|
||||||
{
|
|
||||||
let file = new TextFile(fileName, TextFile.WriteOnly);
|
|
||||||
|
|
||||||
file.writeLine("{");
|
|
||||||
file.writeLine(" \"MapWidth\": " + map.width + ",");
|
|
||||||
file.writeLine(" \"MapHeight\": " + map.height + ",");
|
|
||||||
file.writeLine("");
|
|
||||||
|
|
||||||
for(let i = 0; i < map.layerCount; i++)
|
|
||||||
{
|
|
||||||
let layer = map.layerAt(i);
|
|
||||||
|
|
||||||
if(layer.isTileLayer)
|
|
||||||
{
|
|
||||||
writeTileLayer(layer, file);
|
|
||||||
}
|
|
||||||
else if(layer.isObjectLayer)
|
|
||||||
{
|
|
||||||
writeEntities(layer, file);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 140 B |
|
|
@ -1,7 +0,0 @@
|
||||||
gcc
|
|
||||||
# Headers
|
|
||||||
-Isrc/components/headers
|
|
||||||
-ISDL3_Core/src/headers
|
|
||||||
|
|
||||||
# Macros
|
|
||||||
-DDEBUG=2
|
|
||||||
|
|
@ -15,10 +15,8 @@ SOURCES := \
|
||||||
SRC_CC = gcc
|
SRC_CC = gcc
|
||||||
ifeq ($(RELEASE), 1)
|
ifeq ($(RELEASE), 1)
|
||||||
SRC_CFLAGS = --std=c17 --pedantic -O3 # RELEASE
|
SRC_CFLAGS = --std=c17 --pedantic -O3 # RELEASE
|
||||||
|
|
||||||
SRC_LDFLAGS = -O3
|
|
||||||
else
|
else
|
||||||
SRC_CFLAGS = --std=c17 --pedantic -O1 -g -DDEBUG=2 \
|
SRC_CFLAGS = --std=c17 --pedantic -O0 -g -DDEBUG=2 \
|
||||||
-Wall -Wno-missing-braces -Wextra -Wno-missing-field-initializers \
|
-Wall -Wno-missing-braces -Wextra -Wno-missing-field-initializers \
|
||||||
-Wformat=2 -Wswitch-default -Wswitch-enum -Wcast-align \
|
-Wformat=2 -Wswitch-default -Wswitch-enum -Wcast-align \
|
||||||
-Wpointer-arith -Wbad-function-cast -Wstrict-overflow=5 \
|
-Wpointer-arith -Wbad-function-cast -Wstrict-overflow=5 \
|
||||||
|
|
@ -26,13 +24,13 @@ SRC_CFLAGS = --std=c17 --pedantic -O1 -g -DDEBUG=2 \
|
||||||
-Wcast-qual -Wshadow -Wunreachable-code -Wlogical-op \
|
-Wcast-qual -Wshadow -Wunreachable-code -Wlogical-op \
|
||||||
-Wfloat-equal -Wstrict-aliasing=2 -Wredundant-decls \
|
-Wfloat-equal -Wstrict-aliasing=2 -Wredundant-decls \
|
||||||
-Wold-style-definition # DEVELOPEMENT
|
-Wold-style-definition # DEVELOPEMENT
|
||||||
|
|
||||||
SRC_LDFLAGS = -O1
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SRC_INCLUDE_DIRS = $(SOURCE_DIR)/components/headers $(CORE_DIR)/headers
|
SRC_INCLUDE_DIRS = $(SOURCE_DIR)/components/headers $(CORE_DIR)/headers
|
||||||
SRC_INCLUDE_DIRS := $(addprefix -I, $(SRC_INCLUDE_DIRS))
|
SRC_INCLUDE_DIRS := $(addprefix -I, $(SRC_INCLUDE_DIRS))
|
||||||
|
|
||||||
|
SRC_LDFLAGS =
|
||||||
|
|
||||||
# Deduce objects
|
# Deduce objects
|
||||||
SOURCE_OBJECTS = $(SOURCES:%.c=$(BUILD_DIR)/$(SOURCE_DIR)/%.o)
|
SOURCE_OBJECTS = $(SOURCES:%.c=$(BUILD_DIR)/$(SOURCE_DIR)/%.o)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,18 @@ int animation_system_init(component_t *component)
|
||||||
}
|
}
|
||||||
system_data->sprite_component_data = sprite_component->data;
|
system_data->sprite_component_data = sprite_component->data;
|
||||||
|
|
||||||
|
system_data->nb_frames = 1;
|
||||||
|
system_data->current_frame_nb = 0;
|
||||||
linked_list_init(&system_data->frames, sizeof(rect_t), NULL, NULL);
|
linked_list_init(&system_data->frames, sizeof(rect_t), NULL, NULL);
|
||||||
|
animation_system_create_frames_clips(system_data);
|
||||||
|
|
||||||
|
system_data->frame_delay_ms = 0.0f;
|
||||||
system_data->frame_timer_ms = 0.0f;
|
system_data->frame_timer_ms = 0.0f;
|
||||||
|
|
||||||
|
system_data->play = false;
|
||||||
|
system_data->loop = false;
|
||||||
|
system_data->reverse = false;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -81,34 +89,45 @@ inline int animation_system_destroy(component_t *component)
|
||||||
{
|
{
|
||||||
animation_system_data_t *system_data = component->data;
|
animation_system_data_t *system_data = component->data;
|
||||||
|
|
||||||
if(linked_list_exit(&system_data->frames)) return_failure_int;
|
if(linked_list_exit(&system_data->frames)) return EXIT_FAILURE;
|
||||||
|
|
||||||
free(system_data);
|
free(system_data);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int animation_system_create_frames_clips(animation_system_data_t *system_data)
|
||||||
|
{
|
||||||
|
sprite_component_data_t *sprite_component_data = system_data->sprite_component_data;
|
||||||
|
|
||||||
|
if(linked_list_clear(&system_data->frames)) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
if(linked_list_reserve(&system_data->frames, system_data->nb_frames)) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
for(size_t current_frame_nb = 0; current_frame_nb < system_data->nb_frames; current_frame_nb++)
|
||||||
|
{
|
||||||
|
elem_t *frame = create_elem(&system_data->frames);
|
||||||
|
if(!frame) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
((rect_t *)frame->data)->x = sprite_component_data->src_rect.w * current_frame_nb;
|
||||||
|
((rect_t *)frame->data)->y = 0;
|
||||||
|
((rect_t *)frame->data)->w = sprite_component_data->src_rect.w;
|
||||||
|
((rect_t *)frame->data)->h = sprite_component_data->src_rect.h;
|
||||||
|
|
||||||
|
if(linked_list_push_back(&system_data->frames, frame)) return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
system_data->current_frame = linked_list_get(&system_data->frames, system_data->current_frame_nb);
|
||||||
|
if(!system_data->current_frame) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
inline int animation_system_apply_changes(animation_system_data_t *system_data)
|
inline int animation_system_apply_changes(animation_system_data_t *system_data)
|
||||||
{
|
{
|
||||||
sprite_component_data_t *sprite_component_data = system_data->sprite_component_data;
|
sprite_component_data_t *sprite_component_data = system_data->sprite_component_data;
|
||||||
|
|
||||||
if(linked_list_clear(&system_data->frames)) return_failure_int;
|
if(animation_system_create_frames_clips(system_data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
for(size_t current_frame_nb = 0; current_frame_nb < system_data->nb_frames; current_frame_nb++)
|
|
||||||
{
|
|
||||||
elem_t *frame = create_elem(&system_data->frames);
|
|
||||||
if(!frame) return_failure_int;
|
|
||||||
|
|
||||||
((rect_t *)frame->data)->x = sprite_component_data->src_rect.w * current_frame_nb;
|
|
||||||
((rect_t *)frame->data)->y = 0;
|
|
||||||
((rect_t *)frame->data)->w = sprite_component_data->src_rect.w;
|
|
||||||
((rect_t *)frame->data)->h = sprite_component_data->src_rect.h;
|
|
||||||
|
|
||||||
linked_list_push_back(&system_data->frames, frame);
|
|
||||||
}
|
|
||||||
|
|
||||||
system_data->current_frame = linked_list_get(&system_data->frames, system_data->current_frame_nb);
|
|
||||||
if(!system_data->current_frame) return_failure_int;
|
|
||||||
|
|
||||||
sprite_component_data->src_rect = *(rect_t *)system_data->current_frame->data;
|
sprite_component_data->src_rect = *(rect_t *)system_data->current_frame->data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,11 +14,7 @@ static inline int door_component_callback(va_list event_args, void *subscription
|
||||||
const entity_t *entity = subscription_data;
|
const entity_t *entity = subscription_data;
|
||||||
|
|
||||||
component_t *door_component = entity_get_component(entity, DOOR_COMPONENT);
|
component_t *door_component = entity_get_component(entity, DOOR_COMPONENT);
|
||||||
if(!door_component)
|
if(!door_component) return EXIT_FAILURE;
|
||||||
{
|
|
||||||
error_printf("Failed to get door component.");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
door_component_data_t *component_data = door_component->data;
|
door_component_data_t *component_data = door_component->data;
|
||||||
|
|
||||||
|
|
@ -47,6 +43,10 @@ inline int door_component_init(component_t *component)
|
||||||
}
|
}
|
||||||
component_data->hitbox_component_data = hitbox_component->data;
|
component_data->hitbox_component_data = hitbox_component->data;
|
||||||
|
|
||||||
|
component_data->topic_id = 0;
|
||||||
|
event_bus_subscribe(&game.event_bus, component_data->topic_id, door_component_callback, component->entity);
|
||||||
|
|
||||||
|
component_data->state = false;
|
||||||
component_data->last_state = false;
|
component_data->last_state = false;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
@ -79,10 +79,3 @@ inline int door_component_destroy(component_t *component)
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int door_component_subscribe(door_component_data_t *component_data, entity_t *entity)
|
|
||||||
{
|
|
||||||
if(event_bus_subscribe(&game.event_bus, component_data->topic_id, door_component_callback, entity)) return_failure_int;
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ int animation_system_update(component_t *component);
|
||||||
|
|
||||||
int animation_system_destroy(component_t *component);
|
int animation_system_destroy(component_t *component);
|
||||||
|
|
||||||
|
int animation_system_create_frames_clips(animation_system_data_t *system_data);
|
||||||
|
|
||||||
int animation_system_apply_changes(animation_system_data_t *system_data);
|
int animation_system_apply_changes(animation_system_data_t *system_data);
|
||||||
|
|
||||||
#endif // SPRITE_COMPONENT_H
|
#endif // SPRITE_COMPONENT_H
|
||||||
|
|
@ -24,6 +24,4 @@ int door_component_update(component_t *component);
|
||||||
|
|
||||||
int door_component_destroy(component_t *component);
|
int door_component_destroy(component_t *component);
|
||||||
|
|
||||||
int door_component_subscribe(door_component_data_t *component_data, entity_t *entity);
|
|
||||||
|
|
||||||
#endif // DOOR_COMPONENT_H
|
#endif // DOOR_COMPONENT_H
|
||||||
|
|
@ -36,6 +36,6 @@ int interact_component_destroy(component_t *component);
|
||||||
|
|
||||||
int interact_component_interact(interact_component_data_t *component_data);
|
int interact_component_interact(interact_component_data_t *component_data);
|
||||||
|
|
||||||
int interact_component_modify_topic_id(interact_component_data_t *component_data, size_t id);
|
int interact_component_modify_topic(interact_component_data_t *component_data, size_t id);
|
||||||
|
|
||||||
#endif // TRANSFORM_COMPONENT_H
|
#endif // TRANSFORM_COMPONENT_H
|
||||||
|
|
@ -22,6 +22,4 @@ int lever_component_update(component_t *component);
|
||||||
|
|
||||||
int lever_component_destroy(component_t *component);
|
int lever_component_destroy(component_t *component);
|
||||||
|
|
||||||
int lever_component_subscribe(lever_component_data_t *component_data, entity_t *entity);
|
|
||||||
|
|
||||||
#endif // LEVER_COMPONENT_H
|
#endif // LEVER_COMPONENT_H
|
||||||
|
|
@ -37,8 +37,8 @@ inline int hitbox_component_update(component_t *component)
|
||||||
hitbox_component_data_t *component_data = component->data;
|
hitbox_component_data_t *component_data = component->data;
|
||||||
const transform_component_data_t *transform_component_data = component_data->transform_component_data;
|
const transform_component_data_t *transform_component_data = component_data->transform_component_data;
|
||||||
|
|
||||||
component_data->bounds.x = transform_component_data->bounds.x + transform_component_data->bounds.w * component_data->position.x;
|
component_data->bounds.x = transform_component_data->bounds.x + (transform_component_data->bounds.w - component_data->bounds.w) * component_data->position.x;
|
||||||
component_data->bounds.y = transform_component_data->bounds.y + transform_component_data->bounds.h * component_data->position.y;
|
component_data->bounds.y = transform_component_data->bounds.y + (transform_component_data->bounds.h - component_data->bounds.h) * component_data->position.y;
|
||||||
component_data->bounds.w = transform_component_data->bounds.w * component_data->scale.x;
|
component_data->bounds.w = transform_component_data->bounds.w * component_data->scale.x;
|
||||||
component_data->bounds.h = transform_component_data->bounds.h * component_data->scale.y;
|
component_data->bounds.h = transform_component_data->bounds.h * component_data->scale.y;
|
||||||
|
|
||||||
|
|
@ -53,7 +53,7 @@ inline int hitbox_component_draw(const component_t *component)
|
||||||
const hitbox_component_data_t *component_data = component->data;
|
const hitbox_component_data_t *component_data = component->data;
|
||||||
|
|
||||||
if(component_data->activated)
|
if(component_data->activated)
|
||||||
if(display_draw_frect(&component_data->bounds, C_RED, 128)) return_failure_int;
|
if(display_draw_frect(&component_data->bounds, C_RED, 128)) return EXIT_FAILURE;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,21 +27,24 @@ inline int interact_component_init(component_t *component)
|
||||||
};
|
};
|
||||||
|
|
||||||
component_data->topic_id = 0;
|
component_data->topic_id = 0;
|
||||||
|
component_data->type = INTERACT_TOGGLE;
|
||||||
|
|
||||||
if(event_bus_new_topic(&game.event_bus, component_data->topic_id)) return_failure_int;
|
component_data->state = 0;
|
||||||
|
|
||||||
|
if(event_bus_new_topic(&game.event_bus, component_data->topic_id)) return EXIT_FAILURE;
|
||||||
|
|
||||||
component_data->activated = true;
|
component_data->activated = true;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int interact_component_update(component_t *component)
|
inline int interact_component_update(component_t *component __attribute__((unused)))
|
||||||
{
|
{
|
||||||
interact_component_data_t *component_data = component->data;
|
interact_component_data_t *component_data = component->data;
|
||||||
const transform_component_data_t *transform_component_data = component_data->transform_component_data;
|
const transform_component_data_t *transform_component_data = component_data->transform_component_data;
|
||||||
|
|
||||||
component_data->bounds.x = transform_component_data->bounds.x + transform_component_data->bounds.w * component_data->position.x;
|
component_data->bounds.x = transform_component_data->bounds.x + (transform_component_data->bounds.w - component_data->bounds.w) * component_data->position.x;
|
||||||
component_data->bounds.y = transform_component_data->bounds.y + transform_component_data->bounds.h * component_data->position.y;
|
component_data->bounds.y = transform_component_data->bounds.y + (transform_component_data->bounds.h - component_data->bounds.h) * component_data->position.y;
|
||||||
component_data->bounds.w = transform_component_data->bounds.w * component_data->scale.x;
|
component_data->bounds.w = transform_component_data->bounds.w * component_data->scale.x;
|
||||||
component_data->bounds.h = transform_component_data->bounds.h * component_data->scale.y;
|
component_data->bounds.h = transform_component_data->bounds.h * component_data->scale.y;
|
||||||
|
|
||||||
|
|
@ -55,7 +58,7 @@ inline int interact_component_draw(const component_t *component)
|
||||||
{
|
{
|
||||||
const interact_component_data_t *component_data = component->data;
|
const interact_component_data_t *component_data = component->data;
|
||||||
|
|
||||||
if(display_draw_frect(&component_data->bounds, C_GREEN, 128)) return_failure_int;
|
if(display_draw_frect(&component_data->bounds, C_GREEN, 128)) return EXIT_FAILURE;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -79,18 +82,17 @@ inline int interact_component_interact(interact_component_data_t *component_data
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
error_printf("Interaction type not valid : %d", component_data->type);
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event_bus_publish(&game.event_bus, component_data->topic_id, component_data->state)) return_failure_int;
|
if(event_bus_publish(&game.event_bus, component_data->topic_id, component_data->state)) return EXIT_FAILURE;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int interact_component_modify_topic_id(interact_component_data_t *component_data, size_t id)
|
inline int interact_component_modify_topic(interact_component_data_t *component_data, size_t id)
|
||||||
{
|
{
|
||||||
if(event_bus_change_topic_id(&game.event_bus, component_data->topic_id, id)) return_failure_int;
|
if(event_bus_change_topic_id(&game.event_bus, component_data->topic_id, id)) return EXIT_FAILURE;
|
||||||
|
|
||||||
component_data->topic_id = id;
|
component_data->topic_id = id;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,17 +8,15 @@
|
||||||
#include "memory_alloc.h"
|
#include "memory_alloc.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
|
#include "hitbox_component.h"
|
||||||
|
|
||||||
// Args = entity_t *entity, size_t state
|
// Args = entity_t *entity, size_t state
|
||||||
static inline int lever_component_callback(va_list args, void *subscription_data)
|
static inline int lever_component_callback(va_list args, void *subscription_data)
|
||||||
{
|
{
|
||||||
const entity_t *entity = subscription_data;
|
const entity_t *entity = subscription_data;
|
||||||
|
|
||||||
component_t *lever_component = entity_get_component(entity, LEVER_COMPONENT);
|
component_t *lever_component = entity_get_component(entity, LEVER_COMPONENT);
|
||||||
if(!lever_component)
|
if(!lever_component) return EXIT_FAILURE;
|
||||||
{
|
|
||||||
error_printf("Failed to get lever component.");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
lever_component_data_t *component_data = lever_component->data;
|
lever_component_data_t *component_data = lever_component->data;
|
||||||
|
|
||||||
|
|
@ -39,6 +37,10 @@ inline int lever_component_init(component_t *component)
|
||||||
}
|
}
|
||||||
component_data->animation_system_data = animation_system->data;
|
component_data->animation_system_data = animation_system->data;
|
||||||
|
|
||||||
|
component_data->topic_id = 0;
|
||||||
|
event_bus_subscribe(&game.event_bus, component_data->topic_id, lever_component_callback, component->entity);
|
||||||
|
|
||||||
|
component_data->state = false;
|
||||||
component_data->last_state = false;
|
component_data->last_state = false;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
@ -68,10 +70,3 @@ inline int lever_component_destroy(component_t *component)
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int lever_component_subscribe(lever_component_data_t *component_data, entity_t *entity)
|
|
||||||
{
|
|
||||||
if(event_bus_subscribe(&game.event_bus, component_data->topic_id, lever_component_callback, entity)) return_failure_int;
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -52,8 +52,8 @@ inline int player_system_update(component_t *component)
|
||||||
|
|
||||||
player_system_get_inputs(system_data);
|
player_system_get_inputs(system_data);
|
||||||
player_system_set_velocity(system_data);
|
player_system_set_velocity(system_data);
|
||||||
if(player_system_set_animation_and_speed(system_data)) return_failure_int;
|
if(player_system_set_animation_and_speed(system_data)) return EXIT_FAILURE;
|
||||||
if(player_system_process_interaction(system_data)) return_failure_int;
|
if(player_system_process_interaction(system_data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -123,33 +123,33 @@ static inline int player_system_set_animation_and_speed(player_system_data_t *sy
|
||||||
{
|
{
|
||||||
physics_system_data->speed = PLAYER_DEFAULT_RUN_SPEED;
|
physics_system_data->speed = PLAYER_DEFAULT_RUN_SPEED;
|
||||||
|
|
||||||
if(sprite_component_set_texture(sprite_component_data, "player_run_sheet")) return_failure_int;
|
if(sprite_component_set_texture(sprite_component_data, "player_run_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data->nb_frames = 8;
|
animation_system_data->nb_frames = 8;
|
||||||
animation_system_data->current_frame_nb = 0;
|
animation_system_data->current_frame_nb = 0;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_RUN_ANIMATION_SPEED;
|
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_RUN_ANIMATION_SPEED;
|
||||||
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
|
if(animation_system_apply_changes(animation_system_data)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
physics_system_data->speed = PLAYER_DEFAULT_WALK_SPEED;
|
physics_system_data->speed = PLAYER_DEFAULT_WALK_SPEED;
|
||||||
|
|
||||||
if(sprite_component_set_texture(sprite_component_data, "player_walk_sheet")) return_failure_int;
|
if(sprite_component_set_texture(sprite_component_data, "player_walk_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data->nb_frames = 4;
|
animation_system_data->nb_frames = 4;
|
||||||
animation_system_data->current_frame_nb = 0;
|
animation_system_data->current_frame_nb = 0;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_WALK_ANIMATION_SPEED;
|
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_WALK_ANIMATION_SPEED;
|
||||||
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
|
if(animation_system_apply_changes(animation_system_data)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(!(system_data->state & PLAYER_MOVING) && (system_data->last_state & PLAYER_MOVING))
|
else if(!(system_data->state & PLAYER_MOVING) && (system_data->last_state & PLAYER_MOVING))
|
||||||
{
|
{
|
||||||
if(sprite_component_set_texture(sprite_component_data, "player_idle_sheet")) return_failure_int;
|
if(sprite_component_set_texture(sprite_component_data, "player_idle_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data->nb_frames = 4;
|
animation_system_data->nb_frames = 4;
|
||||||
animation_system_data->current_frame_nb = 0;
|
animation_system_data->current_frame_nb = 0;
|
||||||
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_IDLE_ANIMATION_SPEED;
|
animation_system_data->frame_delay_ms = PLAYER_DEFAULT_IDLE_ANIMATION_SPEED;
|
||||||
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
|
if(animation_system_apply_changes(animation_system_data)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
@ -176,7 +176,7 @@ static inline int action_detect_activate_interact(elem_t *elem, va_list args)
|
||||||
|
|
||||||
if(fhas_intersection(hitbox_bounds, target_interact_bounds))
|
if(fhas_intersection(hitbox_bounds, target_interact_bounds))
|
||||||
{
|
{
|
||||||
if(interact_component_interact(target_interact_component_data)) return_failure_int;
|
if(interact_component_interact(target_interact_component_data)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
@ -188,7 +188,7 @@ static inline int player_system_process_interaction(player_system_data_t *system
|
||||||
|
|
||||||
if(game.events.keys[KEY_INTERACT] && !last_state)
|
if(game.events.keys[KEY_INTERACT] && !last_state)
|
||||||
{
|
{
|
||||||
if(linked_list_for_each(&game.entity_manager.entities, action_detect_activate_interact, system_data)) return_failure_int;
|
if(linked_list_for_each(&game.entity_manager.entities, action_detect_activate_interact, system_data)) return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
last_state = game.events.keys[KEY_INTERACT];
|
last_state = game.events.keys[KEY_INTERACT];
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ inline int sprite_component_init(component_t *component)
|
||||||
|
|
||||||
transform_component_data_t *transform_component_data = component_data->transform_component_data;
|
transform_component_data_t *transform_component_data = component_data->transform_component_data;
|
||||||
|
|
||||||
|
if(sprite_component_set_texture(component_data, "dummy_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
frect_to_rect(&transform_component_data->bounds, &component_data->src_rect);
|
frect_to_rect(&transform_component_data->bounds, &component_data->src_rect);
|
||||||
component_data->src_rect.x = 0;
|
component_data->src_rect.x = 0;
|
||||||
component_data->src_rect.y = 0;
|
component_data->src_rect.y = 0;
|
||||||
|
|
@ -42,7 +44,7 @@ inline int sprite_component_draw(const component_t *component)
|
||||||
{
|
{
|
||||||
const sprite_component_data_t *component_data = component->data;
|
const sprite_component_data_t *component_data = component->data;
|
||||||
|
|
||||||
if(display_draw_texture(component_data->texture, &component_data->src_rect, &component_data->dst_rect, component_data->flip)) return_failure_int;
|
if(display_draw_texture(component_data->texture, &component_data->src_rect, &component_data->dst_rect, component_data->flip)) return EXIT_FAILURE;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
@ -59,7 +61,7 @@ inline int sprite_component_destroy(component_t *component)
|
||||||
inline int sprite_component_set_texture(sprite_component_data_t *component_data, const char *texture_name)
|
inline int sprite_component_set_texture(sprite_component_data_t *component_data, const char *texture_name)
|
||||||
{
|
{
|
||||||
asset_t *texture_asset = asset_manager_get(&game.asset_manager, texture_name);
|
asset_t *texture_asset = asset_manager_get(&game.asset_manager, texture_name);
|
||||||
if(!texture_asset) return_failure_int;
|
if(!texture_asset) return EXIT_FAILURE;
|
||||||
|
|
||||||
component_data->texture = texture_asset->data;
|
component_data->texture = texture_asset->data;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ inline int transform_component_draw(const component_t *component)
|
||||||
{
|
{
|
||||||
const transform_component_data_t *component_data = component->data;
|
const transform_component_data_t *component_data = component->data;
|
||||||
|
|
||||||
if(display_draw_frect(&component_data->bounds, C_BLUE, 128)) return_failure_int;
|
if(display_draw_frect(&component_data->bounds, C_BLUE, 128)) return EXIT_FAILURE;
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
354
src/game.c
354
src/game.c
|
|
@ -3,342 +3,204 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "asset_manager.h"
|
#include "asset_manager.h"
|
||||||
#include "event_bus.h"
|
|
||||||
#include "ecs.h"
|
#include "ecs.h"
|
||||||
#include "components.h"
|
#include "event_bus.h"
|
||||||
#include "inputs.h"
|
#include "inputs.h"
|
||||||
|
#include "components.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
int game_init(void)
|
int game_init(void)
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
|
|
||||||
if(display_init()) return_failure_int;
|
if(display_init()) return EXIT_FAILURE;
|
||||||
if(asset_manager_init(&game.asset_manager)) return_failure_int;
|
if(asset_manager_init(&game.asset_manager)) return EXIT_FAILURE;
|
||||||
event_bus_init(&game.event_bus);
|
event_bus_init(&game.event_bus);
|
||||||
entity_manager_init(&game.entity_manager);
|
entity_manager_init(&game.entity_manager);
|
||||||
|
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "player_idle_sheet", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "dummy_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "player_walk_sheet", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "player_idle_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "player_run_sheet", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "player_walk_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "lever_sheet", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "player_run_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "barred_door_sheet", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "lever_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "wooden_door_sheet", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "barred_door_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
if(asset_manager_load_asset(&game.asset_manager, "tileset", ASSET_TEXTURE)) return_failure_int;
|
if(asset_manager_load_asset(&game.asset_manager, "wooden_door_sheet", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
|
if(asset_manager_load_asset(&game.asset_manager, "tileset", ASSET_TEXTURE)) return EXIT_FAILURE;
|
||||||
|
|
||||||
/* ======== Player ======== */
|
/* ======== Player ======== */
|
||||||
{
|
|
||||||
entity_t *player_entity = entity_manager_new_entity(&game.entity_manager, 0);
|
entity_t *player_entity = entity_manager_new_entity(&game.entity_manager, 0);
|
||||||
if(!player_entity) return_failure_int;
|
if(!player_entity) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
component_t *component = entity_new_component(player_entity, TRANSFORM_COMPONENT);
|
||||||
component_t *transform_component = entity_new_component(player_entity, TRANSFORM_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!transform_component) return_failure_int;
|
|
||||||
|
|
||||||
transform_component_data_t *transform_component_data = transform_component->data;
|
((transform_component_data_t *)component->data)->bounds = (frect_t) {
|
||||||
|
|
||||||
transform_component_data->bounds = (frect_t) {
|
|
||||||
.x = 10.0f,
|
.x = 10.0f,
|
||||||
.y = 10.0f,
|
.y = 10.0f,
|
||||||
.w = 32.0f,
|
.w = 32.0f,
|
||||||
.h = 32.0f
|
.h = 32.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
{
|
if(!entity_new_component(player_entity, SPRITE_COMPONENT)) return EXIT_FAILURE;
|
||||||
component_t *sprite_component = entity_new_component(player_entity, SPRITE_COMPONENT);
|
|
||||||
if(!sprite_component) return_failure_int;
|
|
||||||
|
|
||||||
sprite_component_data_t *sprite_component_data = sprite_component->data;
|
component = entity_new_component(player_entity, ANIMATION_SYSTEM);
|
||||||
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
sprite_component_set_texture(sprite_component_data, "player_idle_sheet");
|
((animation_system_data_t *)component->data)->loop = true;
|
||||||
}
|
((animation_system_data_t *)component->data)->play = true;
|
||||||
|
|
||||||
{
|
component = entity_new_component(player_entity, HITBOX_COMPONENT);
|
||||||
component_t *animation_system = entity_new_component(player_entity, ANIMATION_SYSTEM);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!animation_system) return_failure_int;
|
|
||||||
|
|
||||||
animation_system_data_t *animation_system_data = animation_system->data;
|
((hitbox_component_data_t *)component->data)->position = (fvector2d_t) {
|
||||||
|
|
||||||
if(linked_list_reserve(&animation_system_data->frames, 8)) return_failure_int;
|
|
||||||
|
|
||||||
animation_system_data->current_frame_nb = 0;
|
|
||||||
animation_system_data->nb_frames = 4;
|
|
||||||
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
|
|
||||||
|
|
||||||
animation_system_data->play = true;
|
|
||||||
animation_system_data->loop = true;
|
|
||||||
animation_system_data->reverse = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
component_t *hitbox_component = entity_new_component(player_entity, HITBOX_COMPONENT);
|
|
||||||
if(!hitbox_component) return_failure_int;
|
|
||||||
|
|
||||||
hitbox_component_data_t * hitbox_component_data = hitbox_component->data;
|
|
||||||
|
|
||||||
hitbox_component_data->position = (fvector2d_t) {
|
|
||||||
.x = 0.25f,
|
|
||||||
.y = 0.6875f
|
|
||||||
};
|
|
||||||
|
|
||||||
hitbox_component_data->scale = (fvector2d_t) {
|
|
||||||
.x = 0.5f,
|
.x = 0.5f,
|
||||||
.y = 0.3125f
|
.y = 1.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
if(!entity_new_component(player_entity, PHYSICS_SYSTEM)) return_failure_int;
|
((hitbox_component_data_t *)component->data)->scale = (fvector2d_t) {
|
||||||
|
.x = 0.5f,
|
||||||
|
.y = 1.0f / 3.0f
|
||||||
|
};
|
||||||
|
|
||||||
|
if(!entity_new_component(player_entity, PHYSICS_SYSTEM)) return EXIT_FAILURE;
|
||||||
|
|
||||||
|
if(!entity_new_component(player_entity, PLAYER_SYSTEM)) return EXIT_FAILURE;
|
||||||
|
|
||||||
if(!entity_new_component(player_entity, PLAYER_SYSTEM)) return_failure_int;
|
|
||||||
}
|
|
||||||
/* ======== Lever ========*/
|
/* ======== Lever ========*/
|
||||||
{
|
|
||||||
entity_t *lever_entity = entity_manager_new_entity(&game.entity_manager, 1);
|
entity_t *lever_entity = entity_manager_new_entity(&game.entity_manager, 1);
|
||||||
if(!lever_entity) return_failure_int;
|
if(!lever_entity) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
component = entity_new_component(lever_entity, TRANSFORM_COMPONENT);
|
||||||
component_t *transform_component = entity_new_component(lever_entity, TRANSFORM_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!transform_component) return_failure_int;
|
|
||||||
|
|
||||||
transform_component_data_t *transform_component_data = transform_component->data;
|
((transform_component_data_t *)component->data)->bounds = (frect_t) {
|
||||||
|
|
||||||
transform_component_data->bounds = (frect_t) {
|
|
||||||
.x = 30.0f,
|
.x = 30.0f,
|
||||||
.y = 120.0f,
|
.y = 120.0f,
|
||||||
.w = 48.0f,
|
.w = 48.0f,
|
||||||
.h = 32.0f
|
.h = 32.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
{
|
component = entity_new_component(lever_entity, SPRITE_COMPONENT);
|
||||||
component_t *sprite_component = entity_new_component(lever_entity, SPRITE_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!sprite_component) return_failure_int;
|
|
||||||
|
|
||||||
sprite_component_data_t *sprite_component_data = sprite_component->data;
|
if(sprite_component_set_texture(component->data, "lever_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
if(sprite_component_set_texture(sprite_component_data, "lever_sheet")) return_failure_int;
|
component = entity_new_component(lever_entity, ANIMATION_SYSTEM);
|
||||||
}
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
((animation_system_data_t *)component->data)->nb_frames = 3;
|
||||||
component_t *animation_system = entity_new_component(lever_entity, ANIMATION_SYSTEM);
|
((animation_system_data_t *)component->data)->frame_delay_ms = LEVER_DEFAULT_ANIMATION_SPEED;
|
||||||
if(!animation_system) return_failure_int;
|
if(animation_system_create_frames_clips(component->data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data_t *animation_system_data = animation_system->data;
|
component = entity_new_component(lever_entity, HITBOX_COMPONENT);
|
||||||
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data->nb_frames = 3;
|
((hitbox_component_data_t *)component->data)->position = (fvector2d_t) {
|
||||||
animation_system_data->current_frame_nb = 0;
|
.x = 0.5f,
|
||||||
animation_system_data->frame_delay_ms = LEVER_DEFAULT_ANIMATION_SPEED;
|
.y = 0.9f
|
||||||
|
|
||||||
animation_system_data->play = false;
|
|
||||||
animation_system_data->loop = false;
|
|
||||||
animation_system_data->reverse = false;
|
|
||||||
|
|
||||||
if(animation_system_apply_changes(animation_system_data)) return_failure_int;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
component_t *hitbox_component = entity_new_component(lever_entity, HITBOX_COMPONENT);
|
|
||||||
if(!hitbox_component) return_failure_int;
|
|
||||||
|
|
||||||
hitbox_component_data_t *hitbox_component_data = hitbox_component->data;
|
|
||||||
|
|
||||||
hitbox_component_data->position = (fvector2d_t) {
|
|
||||||
.x = 0.3333333333333333f,
|
|
||||||
.y = 0.59375
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hitbox_component_data->scale = (fvector2d_t) {
|
((hitbox_component_data_t *)component->data)->scale = (fvector2d_t) {
|
||||||
.x = 0.3333333333333333f,
|
.x = 1.0f / 3.0f,
|
||||||
.y = 0.34375f
|
.y = 0.3f
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
component_t *interact_component = entity_new_component(lever_entity, INTERACT_COMPONENT);
|
|
||||||
if(!interact_component) return_failure_int;
|
|
||||||
|
|
||||||
interact_component_data_t *interact_component_data = interact_component->data;
|
|
||||||
|
|
||||||
interact_component_data->position = (fvector2d_t) {
|
|
||||||
.x = 0.16666666666666666f,
|
|
||||||
.y = 0.34375f
|
|
||||||
};
|
};
|
||||||
|
|
||||||
interact_component_data->scale = (fvector2d_t) {
|
component = entity_new_component(lever_entity, INTERACT_COMPONENT);
|
||||||
.x = 0.6666666666666666f,
|
if(!component) return EXIT_FAILURE;
|
||||||
.y = 0.84375f
|
|
||||||
|
((interact_component_data_t *)component->data)->position = (fvector2d_t) {
|
||||||
|
.x = 0.5f,
|
||||||
|
.y = 1.9f
|
||||||
};
|
};
|
||||||
|
|
||||||
interact_component_data->type = INTERACT_TOGGLE;
|
((interact_component_data_t *)component->data)->scale = (fvector2d_t) {
|
||||||
interact_component_data->state = 0;
|
.x = 2.0f / 3.0f,
|
||||||
|
.y = 0.8f
|
||||||
|
};
|
||||||
|
|
||||||
interact_component_modify_topic_id(interact_component_data, 0);
|
if(!entity_new_component(lever_entity, LEVER_COMPONENT)) return EXIT_FAILURE;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
component_t *lever_component = entity_new_component(lever_entity, LEVER_COMPONENT);
|
|
||||||
if(!lever_component) return_failure_int;
|
|
||||||
|
|
||||||
lever_component_data_t * lever_component_data = lever_component->data;
|
|
||||||
|
|
||||||
lever_component_data->topic_id = 0;
|
|
||||||
lever_component_data->state = false;
|
|
||||||
|
|
||||||
lever_component_subscribe(lever_component_data, lever_entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ======== Door ======== */
|
/* ======== Door ======== */
|
||||||
{
|
|
||||||
entity_t *door_entity = entity_manager_new_entity(&game.entity_manager, 1);
|
entity_t *door_entity = entity_manager_new_entity(&game.entity_manager, 1);
|
||||||
if(!door_entity) return_failure_int;
|
if(!lever_entity) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
component = entity_new_component(door_entity, TRANSFORM_COMPONENT);
|
||||||
component_t *transform_component = entity_new_component(door_entity, TRANSFORM_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!transform_component) return_failure_int;
|
|
||||||
|
|
||||||
transform_component_data_t *transform_component_data = transform_component->data;
|
((transform_component_data_t *)component->data)->bounds = (frect_t) {
|
||||||
|
|
||||||
transform_component_data->bounds = (frect_t) {
|
|
||||||
.x = 120.0f,
|
.x = 120.0f,
|
||||||
.y = 30.0f,
|
.y = 30.0f,
|
||||||
.w = 32.0f,
|
.w = 32.0f,
|
||||||
.h = 48.0f
|
.h = 48.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
{
|
component = entity_new_component(door_entity, SPRITE_COMPONENT);
|
||||||
component_t *sprite_component = entity_new_component(door_entity, SPRITE_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!sprite_component) return_failure_int;
|
|
||||||
|
|
||||||
sprite_component_data_t * sprite_component_data = sprite_component->data;
|
if(sprite_component_set_texture(component->data, "barred_door_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
if(sprite_component_set_texture(sprite_component_data, "barred_door_sheet")) return_failure_int;
|
component = entity_new_component(door_entity, ANIMATION_SYSTEM);
|
||||||
}
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
((animation_system_data_t *)component->data)->nb_frames = 8;
|
||||||
component_t *animation_system = entity_new_component(door_entity, ANIMATION_SYSTEM);
|
((animation_system_data_t *)component->data)->frame_delay_ms = BARRED_DOOR_DEFAULT_ANIMATION_SPEED;
|
||||||
if(!animation_system) return_failure_int;
|
if(animation_system_create_frames_clips(component->data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data_t *animation_system_data = animation_system->data;
|
component = entity_new_component(door_entity, HITBOX_COMPONENT);
|
||||||
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data->nb_frames = 8;
|
((hitbox_component_data_t *)component->data)->position = (fvector2d_t) {
|
||||||
animation_system_data->current_frame_nb = 0;
|
.x = 0.5f,
|
||||||
animation_system_data->frame_delay_ms = BARRED_DOOR_DEFAULT_ANIMATION_SPEED;
|
.y = 1.0f
|
||||||
|
|
||||||
animation_system_data->play = false;
|
|
||||||
animation_system_data->loop = false;
|
|
||||||
animation_system_data->reverse = false;
|
|
||||||
|
|
||||||
if(animation_system_apply_changes(animation_system->data)) return_failure_int;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
component_t *hitbox_component = entity_new_component(door_entity, HITBOX_COMPONENT);
|
|
||||||
if(!hitbox_component) return_failure_int;
|
|
||||||
|
|
||||||
hitbox_component_data_t * hitbox_component_data = hitbox_component->data;
|
|
||||||
|
|
||||||
hitbox_component_data->position = (fvector2d_t) {
|
|
||||||
.x = 0.0f,
|
|
||||||
.y = 0.8333333333333334f
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hitbox_component_data->scale = (fvector2d_t) {
|
((hitbox_component_data_t *)component->data)->scale = (fvector2d_t) {
|
||||||
.x = 1.0f,
|
.x = 1.0f,
|
||||||
.y = 0.16666666666666666f
|
.y = 1.0f / 7.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
{
|
if(!entity_new_component(door_entity, DOOR_COMPONENT)) return EXIT_FAILURE;
|
||||||
component_t *door_component = entity_new_component(door_entity, DOOR_COMPONENT);
|
|
||||||
if(!door_component) return_failure_int;
|
|
||||||
|
|
||||||
door_component_data_t * door_component_data = door_component->data;
|
|
||||||
|
|
||||||
door_component_data->topic_id = 0;
|
|
||||||
door_component_data->state = false;
|
|
||||||
|
|
||||||
door_component_subscribe(door_component_data, door_entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ======== Door 2 ======== */
|
/* ======== Door 2 ======== */
|
||||||
{
|
|
||||||
entity_t *door2_entity = entity_manager_new_entity(&game.entity_manager, 1);
|
entity_t *door2_entity = entity_manager_new_entity(&game.entity_manager, 1);
|
||||||
if(!door2_entity) return_failure_int;
|
if(!lever_entity) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
component = entity_new_component(door2_entity, TRANSFORM_COMPONENT);
|
||||||
component_t *transform_component = entity_new_component(door2_entity, TRANSFORM_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!transform_component) return_failure_int;
|
|
||||||
|
|
||||||
transform_component_data_t *transform_component_data = transform_component->data;
|
((transform_component_data_t *)component->data)->bounds = (frect_t) {
|
||||||
|
|
||||||
transform_component_data->bounds = (frect_t) {
|
|
||||||
.x = 240.0f,
|
.x = 240.0f,
|
||||||
.y = 30.0f,
|
.y = 30.0f,
|
||||||
.w = 32.0f,
|
.w = 32.0f,
|
||||||
.h = 48.0f
|
.h = 48.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
{
|
component = entity_new_component(door2_entity, SPRITE_COMPONENT);
|
||||||
component_t *sprite_component = entity_new_component(door2_entity, SPRITE_COMPONENT);
|
if(!component) return EXIT_FAILURE;
|
||||||
if(!sprite_component) return_failure_int;
|
|
||||||
|
|
||||||
sprite_component_data_t *sprite_component_data = sprite_component->data;
|
if(sprite_component_set_texture(component->data, "wooden_door_sheet")) return EXIT_FAILURE;
|
||||||
|
|
||||||
if(sprite_component_set_texture(sprite_component_data, "wooden_door_sheet")) return_failure_int;
|
component = entity_new_component(door2_entity, ANIMATION_SYSTEM);
|
||||||
}
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
{
|
((animation_system_data_t *)component->data)->nb_frames = 6;
|
||||||
component_t *animation_system = entity_new_component(door2_entity, ANIMATION_SYSTEM);
|
((animation_system_data_t *)component->data)->frame_delay_ms = WOODEN_DOOR_DEFAULT_ANIMATION_SPEED;
|
||||||
if(!animation_system) return_failure_int;
|
if(animation_system_create_frames_clips(component->data)) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data_t *animation_system_data = animation_system->data;
|
component = entity_new_component(door2_entity, HITBOX_COMPONENT);
|
||||||
|
if(!component) return EXIT_FAILURE;
|
||||||
|
|
||||||
animation_system_data->nb_frames = 6;
|
((hitbox_component_data_t *)component->data)->position = (fvector2d_t) {
|
||||||
animation_system_data->current_frame_nb = 0;
|
.x = 0.5f,
|
||||||
animation_system_data->frame_delay_ms = WOODEN_DOOR_DEFAULT_ANIMATION_SPEED;
|
.y = 1.0f
|
||||||
|
|
||||||
animation_system_data->play = false;
|
|
||||||
animation_system_data->loop = false;
|
|
||||||
animation_system_data->reverse = false;
|
|
||||||
|
|
||||||
if(animation_system_apply_changes(animation_system->data)) return_failure_int;
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
component_t *hitbox_component = entity_new_component(door2_entity, HITBOX_COMPONENT);
|
|
||||||
if(!hitbox_component) return_failure_int;
|
|
||||||
|
|
||||||
hitbox_component_data_t *hitbox_component_data = hitbox_component->data;
|
|
||||||
|
|
||||||
hitbox_component_data->position = (fvector2d_t) {
|
|
||||||
.x = 0.0f,
|
|
||||||
.y = 0.8333333333333334f
|
|
||||||
};
|
};
|
||||||
|
|
||||||
hitbox_component_data->scale = (fvector2d_t) {
|
((hitbox_component_data_t *)component->data)->scale = (fvector2d_t) {
|
||||||
.x = 1.0f,
|
.x = 1.0f,
|
||||||
.y = 0.16666666666666666f
|
.y = 1.0f / 7.0f
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
|
||||||
{
|
if(!entity_new_component(door2_entity, DOOR_COMPONENT)) return EXIT_FAILURE;
|
||||||
component_t *door_component = entity_new_component(door2_entity, DOOR_COMPONENT);
|
|
||||||
if(!door_component) return_failure_int;
|
|
||||||
|
|
||||||
door_component_data_t * door_component_data = door_component->data;
|
|
||||||
|
|
||||||
door_component_data->topic_id = 0;
|
|
||||||
door_component_data->state = false;
|
|
||||||
|
|
||||||
door_component_subscribe(door_component_data, door2_entity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
game.is_running = true;
|
game.is_running = true;
|
||||||
|
|
||||||
|
|
@ -366,7 +228,7 @@ int game_update(void)
|
||||||
if(entity_manager_update(&game.entity_manager))
|
if(entity_manager_update(&game.entity_manager))
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
return_failure_int;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
@ -377,13 +239,13 @@ int game_render(void)
|
||||||
if(display_clear())
|
if(display_clear())
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
return_failure_int;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(entity_manager_draw(&game.entity_manager))
|
if(entity_manager_draw(&game.entity_manager))
|
||||||
{
|
{
|
||||||
game.is_running = false;
|
game.is_running = false;
|
||||||
return_failure_int;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
display_update();
|
display_update();
|
||||||
|
|
@ -395,7 +257,7 @@ int game_exit(void)
|
||||||
{
|
{
|
||||||
entity_manager_exit(&game.entity_manager);
|
entity_manager_exit(&game.entity_manager);
|
||||||
event_bus_exit(&game.event_bus);
|
event_bus_exit(&game.event_bus);
|
||||||
if(asset_manager_exit(&game.asset_manager)) return_failure_int;
|
if(asset_manager_exit(&game.asset_manager)) return EXIT_FAILURE;
|
||||||
display_exit();
|
display_exit();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue