fix for empty sounds/animation collections
Some checks failed
Build / Build Game (push) Has been cancelled
Some checks failed
Build / Build Game (push) Has been cancelled
This commit is contained in:
@@ -5,14 +5,14 @@ endif()
|
|||||||
set(CHARACTERS_DIR "${SRC_DIR}/characters")
|
set(CHARACTERS_DIR "${SRC_DIR}/characters")
|
||||||
set(CHARACTERS_ZIP_SCRIPT "${CHARACTERS_DIR}/zip")
|
set(CHARACTERS_ZIP_SCRIPT "${CHARACTERS_DIR}/zip")
|
||||||
|
|
||||||
if(EXISTS "${CHARACTERS_ZIP_SCRIPT}")
|
if(EXISTS "${CHARACTERS_ZIP_SCRIPT}" AND NOT WIN32)
|
||||||
execute_process(
|
execute_process(
|
||||||
COMMAND "${CHARACTERS_ZIP_SCRIPT}"
|
COMMAND "${CHARACTERS_ZIP_SCRIPT}"
|
||||||
WORKING_DIRECTORY "${CHARACTERS_DIR}"
|
WORKING_DIRECTORY "${CHARACTERS_DIR}"
|
||||||
RESULT_VARIABLE ZIP_SCRIPT_RESULT
|
RESULT_VARIABLE ZIP_SCRIPT_RESULT
|
||||||
)
|
)
|
||||||
if(NOT ZIP_SCRIPT_RESULT EQUAL 0)
|
if(NOT ZIP_SCRIPT_RESULT EQUAL 0)
|
||||||
message(FATAL_ERROR "Failed running ${CHARACTERS_ZIP_SCRIPT} (exit code ${ZIP_SCRIPT_RESULT})")
|
message(WARNING "Failed running ${CHARACTERS_ZIP_SCRIPT} (exit code ${ZIP_SCRIPT_RESULT}); continuing with existing archives")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -26,6 +26,25 @@ file(COPY "${SRC_DIR}/" DESTINATION "${DST_DIR}"
|
|||||||
# Copy only .zip archives from resources/characters.
|
# Copy only .zip archives from resources/characters.
|
||||||
file(MAKE_DIRECTORY "${DST_DIR}/characters")
|
file(MAKE_DIRECTORY "${DST_DIR}/characters")
|
||||||
file(GLOB CHARACTER_ZIPS "${CHARACTERS_DIR}/*.zip")
|
file(GLOB CHARACTER_ZIPS "${CHARACTERS_DIR}/*.zip")
|
||||||
|
|
||||||
|
if(NOT CHARACTER_ZIPS)
|
||||||
|
file(GLOB CHARACTER_FILES RELATIVE "${CHARACTERS_DIR}" "${CHARACTERS_DIR}/*")
|
||||||
|
list(FILTER CHARACTER_FILES EXCLUDE REGEX "^zip$")
|
||||||
|
list(FILTER CHARACTER_FILES EXCLUDE REGEX ".*\\.zip$")
|
||||||
|
|
||||||
|
if(CHARACTER_FILES)
|
||||||
|
execute_process(
|
||||||
|
COMMAND "${CMAKE_COMMAND}" -E tar cf "snivy.zip" --format=zip ${CHARACTER_FILES}
|
||||||
|
WORKING_DIRECTORY "${CHARACTERS_DIR}"
|
||||||
|
RESULT_VARIABLE ZIP_GENERATE_RESULT
|
||||||
|
)
|
||||||
|
if(NOT ZIP_GENERATE_RESULT EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Failed generating ${CHARACTERS_DIR}/snivy.zip (exit code ${ZIP_GENERATE_RESULT})")
|
||||||
|
endif()
|
||||||
|
file(GLOB CHARACTER_ZIPS "${CHARACTERS_DIR}/*.zip")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CHARACTER_ZIPS)
|
if(CHARACTER_ZIPS)
|
||||||
file(COPY ${CHARACTER_ZIPS} DESTINATION "${DST_DIR}/characters")
|
file(COPY ${CHARACTER_ZIPS} DESTINATION "${DST_DIR}/characters")
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -4,8 +4,9 @@
|
|||||||
|
|
||||||
namespace game::resource::xml
|
namespace game::resource::xml
|
||||||
{
|
{
|
||||||
const std::string& AnimationEntryCollection::get()
|
std::string* AnimationEntryCollection::get()
|
||||||
{
|
{
|
||||||
return at(util::vector::random_index_weighted(*this, [](const auto& entry) { return entry.weight; })).animation;
|
if (empty()) return nullptr;
|
||||||
|
return &at(util::vector::random_index_weighted(*this, [](const auto& entry) { return entry.weight; })).animation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace game::resource::xml
|
|||||||
class AnimationEntryCollection : public std::vector<AnimationEntry>
|
class AnimationEntryCollection : public std::vector<AnimationEntry>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
const std::string& get();
|
std::string* get();
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,15 @@
|
|||||||
|
|
||||||
namespace game::resource::xml
|
namespace game::resource::xml
|
||||||
{
|
{
|
||||||
Audio& SoundEntryCollection::get()
|
Audio* SoundEntryCollection::get()
|
||||||
{
|
{
|
||||||
return at(util::vector::random_index_weighted(*this, [](const auto& entry) { return entry.weight; })).sound;
|
if (empty()) return nullptr;
|
||||||
|
return &at(util::vector::random_index_weighted(*this, [](const auto& entry) { return entry.weight; })).sound;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundEntryCollection::play()
|
void SoundEntryCollection::play()
|
||||||
{
|
{
|
||||||
at(util::vector::random_index_weighted(*this, [](const auto& entry) { return entry.weight; })).play();
|
if (empty()) return;
|
||||||
|
if (auto audio = get()) audio->play();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace game::resource::xml
|
|||||||
class SoundEntryCollection : public std::vector<SoundEntry>
|
class SoundEntryCollection : public std::vector<SoundEntry>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Audio& get();
|
Audio* get();
|
||||||
void play();
|
void play();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,11 @@ namespace game::state::main
|
|||||||
}
|
}
|
||||||
queuedItemIDs.clear();
|
queuedItemIDs.clear();
|
||||||
|
|
||||||
if (isMouseRightDown) cursor.queue_play({cursorSchema.animations.return_.get()});
|
if (isMouseRightDown)
|
||||||
|
{
|
||||||
|
auto animation = cursorSchema.animations.return_.get();
|
||||||
|
if (animation) cursor.queue_play({*animation});
|
||||||
|
}
|
||||||
|
|
||||||
if (auto heldItem = vector::find(items, heldItemIndex))
|
if (auto heldItem = vector::find(items, heldItemIndex))
|
||||||
{
|
{
|
||||||
@@ -208,7 +212,7 @@ namespace game::state::main
|
|||||||
if (math::is_point_in_rectf(item.rect(), cursorPosition) && !isImguiCaptureMouse)
|
if (math::is_point_in_rectf(item.rect(), cursorPosition) && !isImguiCaptureMouse)
|
||||||
{
|
{
|
||||||
isItemHovered = true;
|
isItemHovered = true;
|
||||||
cursor.queue_play({cursorSchema.animations.hover.get()});
|
if (auto animation = cursorSchema.animations.hover.get()) cursor.queue_play({*animation});
|
||||||
cursor.state = entity::Cursor::HOVER;
|
cursor.state = entity::Cursor::HOVER;
|
||||||
|
|
||||||
if (isMouseLeftClicked)
|
if (isMouseLeftClicked)
|
||||||
@@ -220,7 +224,7 @@ namespace game::state::main
|
|||||||
if (isMouseLeftDown)
|
if (isMouseLeftDown)
|
||||||
{
|
{
|
||||||
isItemHeld = true;
|
isItemHeld = true;
|
||||||
cursor.queue_play({cursorSchema.animations.grab.get()});
|
if (auto animation = cursorSchema.animations.grab.get()) cursor.queue_play({*animation});
|
||||||
cursor.state = entity::Cursor::ACTION;
|
cursor.state = entity::Cursor::ACTION;
|
||||||
heldItemIndex = i;
|
heldItemIndex = i;
|
||||||
heldItemMoveIndex = i;
|
heldItemMoveIndex = i;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace game::state::main
|
|||||||
{
|
{
|
||||||
if ((isMouseMiddleDown) || (isMouseLeftDown && isCtrlDown))
|
if ((isMouseMiddleDown) || (isMouseLeftDown && isCtrlDown))
|
||||||
{
|
{
|
||||||
cursor.queue_play({cursorSchema.animations.pan.get()});
|
if (auto animation = cursorSchema.animations.pan.get()) cursor.queue_play({*animation});
|
||||||
pan -= imgui::to_vec2(io.MouseDelta) * panMultiplier;
|
pan -= imgui::to_vec2(io.MouseDelta) * panMultiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ namespace game::state::main
|
|||||||
auto zoomFactorBefore = math::to_unit(zoomBefore);
|
auto zoomFactorBefore = math::to_unit(zoomBefore);
|
||||||
auto cursorWorld = pan + (cursorPos / zoomFactorBefore);
|
auto cursorWorld = pan + (cursorPos / zoomFactorBefore);
|
||||||
|
|
||||||
cursor.queue_play({cursorSchema.animations.zoom.get()});
|
if (auto animation = cursorSchema.animations.zoom.get()) cursor.queue_play({*animation});
|
||||||
|
|
||||||
zoom = glm::clamp(ZOOM_MIN, zoom + (io.MouseWheel * ZOOM_STEP), ZOOM_MAX);
|
zoom = glm::clamp(ZOOM_MIN, zoom + (io.MouseWheel * ZOOM_STEP), ZOOM_MAX);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user