female: flashlight can be moved with dpad
This commit is contained in:
parent
0d91fc9b2c
commit
9a2e97fdae
@ -219,6 +219,7 @@ void do_get_condition()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data[port].digital_button = data_fields.data.digital_button;
|
||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
data[port].analog_coordinate_axis[i]
|
data[port].analog_coordinate_axis[i]
|
||||||
= data_fields.data.analog_coordinate_axis[i];
|
= data_fields.data.analog_coordinate_axis[i];
|
||||||
@ -638,26 +639,27 @@ void render_inclusion_cube(ta_parameter_writer& writer)
|
|||||||
c);
|
c);
|
||||||
}
|
}
|
||||||
|
|
||||||
void render_cone(ta_parameter_writer& writer)
|
void render_cone(ta_parameter_writer& writer, const mat4x4& cone_model)
|
||||||
{
|
{
|
||||||
const struct object * object = cone_object[0];
|
const struct object * object = cone_object[0];
|
||||||
const vertex_position * position = cone_position;
|
const vertex_position * position = cone_position;
|
||||||
|
|
||||||
float scale = 1.f;
|
float _scale = 1.f;
|
||||||
const mat4x4 model = {
|
const mat4x4 scale = {
|
||||||
scale, 0, 0, 0,
|
_scale, 0, 0, 0,
|
||||||
0, scale, 0, 0,
|
0, _scale, 0, 0,
|
||||||
0, 0, 0.5, 0.1,
|
0, 0, 0.5, 0.1,
|
||||||
0, 0, 0, 1,
|
0, 0, 0, 1,
|
||||||
};
|
};
|
||||||
|
const mat4x4 trans = cone_model * scale;
|
||||||
|
|
||||||
global_modifier_volume(writer);
|
global_modifier_volume(writer);
|
||||||
|
|
||||||
for (int i = 0; i < object->triangle_count - 1; i++) {
|
for (int i = 0; i < object->triangle_count - 1; i++) {
|
||||||
const union triangle * tri = &object->triangle[i];
|
const union triangle * tri = &object->triangle[i];
|
||||||
vec3 a = model * position[tri->v[0].position];
|
vec3 a = trans * position[tri->v[0].position];
|
||||||
vec3 b = model * position[tri->v[1].position];
|
vec3 b = trans * position[tri->v[1].position];
|
||||||
vec3 c = model * position[tri->v[2].position];
|
vec3 c = trans * position[tri->v[2].position];
|
||||||
render_tri_mod(writer,
|
render_tri_mod(writer,
|
||||||
screen_transform(a),
|
screen_transform(a),
|
||||||
screen_transform(b),
|
screen_transform(b),
|
||||||
@ -667,16 +669,16 @@ void render_cone(ta_parameter_writer& writer)
|
|||||||
global_modifier_volume_last_triangle(writer, isp_tsp_instruction_word::volume_instruction::outside_last_polygon);
|
global_modifier_volume_last_triangle(writer, isp_tsp_instruction_word::volume_instruction::outside_last_polygon);
|
||||||
|
|
||||||
const union triangle * tri = &object->triangle[object->triangle_count - 1];
|
const union triangle * tri = &object->triangle[object->triangle_count - 1];
|
||||||
vec3 a = model * position[tri->v[0].position];
|
vec3 a = trans * position[tri->v[0].position];
|
||||||
vec3 b = model * position[tri->v[1].position];
|
vec3 b = trans * position[tri->v[1].position];
|
||||||
vec3 c = model * position[tri->v[2].position];
|
vec3 c = trans * position[tri->v[2].position];
|
||||||
render_tri_mod(writer,
|
render_tri_mod(writer,
|
||||||
screen_transform(a),
|
screen_transform(a),
|
||||||
screen_transform(b),
|
screen_transform(b),
|
||||||
screen_transform(c));
|
screen_transform(c));
|
||||||
}
|
}
|
||||||
|
|
||||||
void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen)
|
void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen, const mat4x4& cone_model)
|
||||||
{
|
{
|
||||||
// opaque
|
// opaque
|
||||||
{
|
{
|
||||||
@ -699,7 +701,7 @@ void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen)
|
|||||||
|
|
||||||
{
|
{
|
||||||
render_inclusion_cube(writer);
|
render_inclusion_cube(writer);
|
||||||
render_cone(writer);
|
render_cone(writer, cone_model);
|
||||||
}
|
}
|
||||||
// end of modifier volume list
|
// end of modifier volume list
|
||||||
writer.append<ta_global_parameter::end_of_list>() =
|
writer.append<ta_global_parameter::end_of_list>() =
|
||||||
@ -773,6 +775,54 @@ void transfer_palette()
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr inline mat4x4 update_cone()
|
||||||
|
{
|
||||||
|
static float rx = 0;
|
||||||
|
static float ry = 0;
|
||||||
|
|
||||||
|
float tx = 0;
|
||||||
|
float ty = 0;
|
||||||
|
if (ft0::data_transfer::digital_button::ua(data[0].digital_button) == 0) {
|
||||||
|
tx = 0.5;
|
||||||
|
} else if (ft0::data_transfer::digital_button::da(data[0].digital_button) == 0) {
|
||||||
|
tx = -0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ft0::data_transfer::digital_button::la(data[0].digital_button) == 0) {
|
||||||
|
ty = -0.5;
|
||||||
|
} else if (ft0::data_transfer::digital_button::ra(data[0].digital_button) == 0) {
|
||||||
|
ty = 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
rx = 0, tx = 1, dx = 1;
|
||||||
|
rx = 1, tx = 1, dx = 0;
|
||||||
|
rx = -1, tx = 1, dx = 2;
|
||||||
|
*/
|
||||||
|
|
||||||
|
float dx = tx - rx;
|
||||||
|
float dy = ty - ry;
|
||||||
|
|
||||||
|
rx += dx * 0.05;
|
||||||
|
ry += dy * 0.05;
|
||||||
|
|
||||||
|
mat4x4 mrx = {
|
||||||
|
1, 0, 0, 0,
|
||||||
|
0, cos(rx), -sin(rx), 0,
|
||||||
|
0, sin(rx), cos(rx), 0,
|
||||||
|
0, 0, 0, 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
mat4x4 mry = {
|
||||||
|
cos(ry), 0, sin(ry), 0,
|
||||||
|
0, 1, 0, 0,
|
||||||
|
-sin(ry), 0, cos(ry), 0,
|
||||||
|
0, 0, 0, 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
return mry * mrx;
|
||||||
|
}
|
||||||
|
|
||||||
constexpr inline mat4x4 update_analog(mat4x4& screen)
|
constexpr inline mat4x4 update_analog(mat4x4& screen)
|
||||||
{
|
{
|
||||||
const float l_ = static_cast<float>(data[0].analog_coordinate_axis[0]) * (1.f / 255.f);
|
const float l_ = static_cast<float>(data[0].analog_coordinate_axis[0]) * (1.f / 255.f);
|
||||||
@ -880,6 +930,7 @@ void main()
|
|||||||
maple::dma_wait_complete();
|
maple::dma_wait_complete();
|
||||||
do_get_condition();
|
do_get_condition();
|
||||||
screen = update_analog(screen);
|
screen = update_analog(screen);
|
||||||
|
mat4x4 cone_model = update_cone();
|
||||||
|
|
||||||
ta_polygon_converter_init2(texture_memory_alloc.isp_tsp_parameters[ta].start,
|
ta_polygon_converter_init2(texture_memory_alloc.isp_tsp_parameters[ta].start,
|
||||||
texture_memory_alloc.isp_tsp_parameters[ta].end,
|
texture_memory_alloc.isp_tsp_parameters[ta].end,
|
||||||
@ -890,7 +941,7 @@ void main()
|
|||||||
tile_width,
|
tile_width,
|
||||||
tile_height);
|
tile_height);
|
||||||
writer.offset = 0;
|
writer.offset = 0;
|
||||||
transfer_scene(writer, screen);
|
transfer_scene(writer, screen, cone_model);
|
||||||
ta_polygon_converter_writeback(writer.buf, writer.offset);
|
ta_polygon_converter_writeback(writer.buf, writer.offset);
|
||||||
ta_polygon_converter_transfer(writer.buf, writer.offset);
|
ta_polygon_converter_transfer(writer.buf, writer.offset);
|
||||||
ta_wait_opaque_modifier_volume_list();
|
ta_wait_opaque_modifier_volume_list();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user