Merge pull request #347 from brombrom-hani/parts-sprite-deform

parts: impl sprite_deform for SetPartsCG
This commit is contained in:
Nunuhara Cabbage
2026-06-01 17:55:27 -07:00
committed by GitHub
2 changed files with 25 additions and 4 deletions
+6 -3
View File
@@ -1188,12 +1188,13 @@ int PE_GetDelegateIndex(int parts_no)
return parts ? parts->delegate_index : -1;
}
bool PE_SetPartsCG(int parts_no, struct string *cg_name, possibly_unused int sprite_deform, int state)
bool PE_SetPartsCG(int parts_no, struct string *cg_name, int sprite_deform, int state)
{
if (!parts_state_valid(--state))
return false;
struct parts *parts = parts_get(parts_no);
parts->sprite_deform = sprite_deform;
if (!cg_name || *(cg_name->text) == '\0') {
parts_state_reset(&parts->states[state], PARTS_CG);
parts_dirty(parts);
@@ -1204,12 +1205,13 @@ bool PE_SetPartsCG(int parts_no, struct string *cg_name, possibly_unused int spr
return parts_cg_set(parts, cg, cg_name);
}
bool PE_SetPartsCG_by_index(int parts_no, int cg_no, possibly_unused int sprite_deform, int state)
bool PE_SetPartsCG_by_index(int parts_no, int cg_no, int sprite_deform, int state)
{
if (!parts_state_valid(--state))
return false;
struct parts *parts = parts_get(parts_no);
parts->sprite_deform = sprite_deform;
if (!cg_no) {
parts_state_reset(&parts->states[state], PARTS_CG);
parts_dirty(parts);
@@ -1222,12 +1224,13 @@ bool PE_SetPartsCG_by_index(int parts_no, int cg_no, possibly_unused int sprite_
// XXX: Rance Quest
bool PE_SetPartsCG_by_string_index(int parts_no, struct string *cg_name,
possibly_unused int sprite_deform, int state)
int sprite_deform, int state)
{
if (!parts_state_valid(--state))
return false;
struct parts *parts = parts_get(parts_no);
parts->sprite_deform = sprite_deform;
if (!cg_name) {
parts_state_reset(&parts->states[state], PARTS_CG);
parts_dirty(parts);
+19 -1
View File
@@ -153,7 +153,25 @@ static void parts_render_cg(struct parts *parts, struct parts_common *common)
glm_rotate_z(mw_transform, glm_rad(parts->local.rotation.z), mw_transform);
glm_scale(mw_transform, (vec3){ parts->global.scale.x, parts->global.scale.y, 1.0 });
glm_translate(mw_transform, (vec3){ common->origin_offset.x, common->origin_offset.y, 0 });
glm_scale(mw_transform, (vec3){ common->w, common->h, 1.0 });
switch (parts->sprite_deform) {
// Flip horizontally
case 1:
glm_translate(mw_transform, (vec3){ common->w, 0.0f, 0.0f });
glm_scale(mw_transform, (vec3){ -common->w, common->h, 1.0f });
break;
// Flip vertically
case 2:
glm_translate(mw_transform, (vec3){ 0.0f, common->h, 0.0f });
glm_scale(mw_transform, (vec3){ common->w, -common->h, 1.0f });
break;
default:
WARNING("Invalid sprite_deform: %d", parts->sprite_deform);
// No deform
case 0:
glm_scale(mw_transform, (vec3){ common->w, common->h, 1.0 });
break;
}
Rectangle r = common->surface_area;
if (!r.w && !r.h) {