mirror of
https://github.com/nunuhara/xsystem4.git
synced 2026-09-22 23:18:01 +03:00
PartsEngine: Implement PartsFunc 40-42 (PARTS_GetAbsolute[XYZ])
This commit is contained in:
@@ -129,6 +129,9 @@ int PE_get_active_controller(void);
|
||||
int PE_get_system_controller(void);
|
||||
bool PE_init_parts_movie(int parts_no, int width, int height, int bg_r, int bg_g, int bg_b, int state);
|
||||
int PE_get_movie_sprite(int parts_no, int state);
|
||||
float PE_parts_get_absolute_x(int parts_no);
|
||||
float PE_parts_get_absolute_y(int parts_no);
|
||||
int PE_parts_get_absolute_z(int parts_no);
|
||||
|
||||
// construction.c
|
||||
bool PE_AddCreateToPartsConstructionProcess(int parts_no, int w, int h, int state);
|
||||
|
||||
@@ -110,9 +110,13 @@ static int PartsEngine_PartsFunc(int func_id, struct page **array_int,
|
||||
{
|
||||
int nr_ints = (array_int && *array_int) ? (*array_int)->nr_vars : 0;
|
||||
union vm_value *ints = nr_ints ? (*array_int)->values : NULL;
|
||||
int nr_floats = (array_float && *array_float) ? (*array_float)->nr_vars : 0;
|
||||
union vm_value *floats = nr_floats ? (*array_float)->values : NULL;
|
||||
|
||||
#define REQUIRE_INTS(n) \
|
||||
if (nr_ints != (n)) VM_ERROR("Invalid arguments for PartsFunc %d: expected %d ints, got %d", func_id, (n), nr_ints)
|
||||
#define REQUIRE_FLOATS(n) \
|
||||
if (nr_floats < (n)) VM_ERROR("Invalid arguments for PartsFunc %d: expected %d floats, got %d", func_id, (n), nr_floats)
|
||||
|
||||
switch (func_id) {
|
||||
case 0: // void SetActiveLayer(int layer)
|
||||
@@ -127,6 +131,20 @@ static int PartsEngine_PartsFunc(int func_id, struct page **array_int,
|
||||
REQUIRE_INTS(1);
|
||||
ints[0].i = PE_get_system_controller();
|
||||
return 1;
|
||||
case 40: // float PARTS_GetAbsoluteX(int number)
|
||||
REQUIRE_INTS(1);
|
||||
REQUIRE_FLOATS(1);
|
||||
floats[0].f = PE_parts_get_absolute_x(ints[0].i);
|
||||
return 1;
|
||||
case 41: // float PARTS_GetAbsoluteY(int number)
|
||||
REQUIRE_INTS(1);
|
||||
REQUIRE_FLOATS(1);
|
||||
floats[0].f = PE_parts_get_absolute_y(ints[0].i);
|
||||
return 1;
|
||||
case 42: // int PARTS_GetAbsoluteZ(int number)
|
||||
REQUIRE_INTS(2);
|
||||
ints[1].i = PE_parts_get_absolute_z(ints[0].i);
|
||||
return 1;
|
||||
case 103: // void GetPartsCGSurfaceArea(int parts_no, int *x, int *y, int *w, int *h, int state)
|
||||
REQUIRE_INTS(6);
|
||||
PE_GetPartsCGSurfaceArea(ints[0].i, &ints[1].i, &ints[2].i, &ints[3].i, &ints[4].i, ints[5].i);
|
||||
|
||||
@@ -2101,6 +2101,24 @@ int PE_get_system_controller(void)
|
||||
return PARTS_CONTROLLER_SYSTEM_OVERLAY;
|
||||
}
|
||||
|
||||
float PE_parts_get_absolute_x(int parts_no)
|
||||
{
|
||||
struct parts *parts = parts_try_get(parts_no);
|
||||
return parts ? (float)parts->global.pos.x : 0.0f;
|
||||
}
|
||||
|
||||
float PE_parts_get_absolute_y(int parts_no)
|
||||
{
|
||||
struct parts *parts = parts_try_get(parts_no);
|
||||
return parts ? (float)parts->global.pos.y : 0.0f;
|
||||
}
|
||||
|
||||
int PE_parts_get_absolute_z(int parts_no)
|
||||
{
|
||||
struct parts *parts = parts_try_get(parts_no);
|
||||
return parts ? parts->global.z : 0;
|
||||
}
|
||||
|
||||
bool PE_init_parts_movie(int parts_no, int width, int height, int bg_r, int bg_g, int bg_b, int state)
|
||||
{
|
||||
if (!parts_state_valid(--state))
|
||||
|
||||
Reference in New Issue
Block a user