mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-02-02 22:35:55 +01:00
Implemented texture scale for TiledWalls.
This commit is contained in:
parent
40d9d6b49b
commit
1a7c404a17
@ -376,7 +376,7 @@ void PropMesher::remove_doubles() {
|
|||||||
void PropMesher::remove_doubles_hashed() {
|
void PropMesher::remove_doubles_hashed() {
|
||||||
if (_vertices.size() == 0) {
|
if (_vertices.size() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//print_error("before " + String::num(_vertices.size()));
|
//print_error("before " + String::num(_vertices.size()));
|
||||||
|
|
||||||
@ -454,18 +454,15 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
//collect rects
|
//collect rects
|
||||||
LocalVector<Rect2> normal_rects;
|
LocalVector<Rect2> normal_rects;
|
||||||
LocalVector<Rect2> flavour_rects;
|
LocalVector<Rect2> flavour_rects;
|
||||||
LocalVector<float> normal_y_sizes;
|
LocalVector<TiledWallData::TextureEntry> normal_data;
|
||||||
LocalVector<float> flavour_y_sizes;
|
LocalVector<TiledWallData::TextureEntry> flavour_data;
|
||||||
LocalVector<float> normal_z_offsets;
|
|
||||||
LocalVector<float> flavour_z_offsets;
|
|
||||||
|
|
||||||
for (int i = 0; i < tiled_wall_data->get_tile_count(); ++i) {
|
for (int i = 0; i < tiled_wall_data->get_tile_count(); ++i) {
|
||||||
const Ref<Texture> &t = tiled_wall_data->get_tile_texture(i);
|
const Ref<Texture> &t = tiled_wall_data->get_tile_texture(i);
|
||||||
|
|
||||||
if (t.is_valid()) {
|
if (t.is_valid()) {
|
||||||
normal_rects.push_back(cache->texture_get_uv_rect(t));
|
normal_rects.push_back(cache->texture_get_uv_rect(t));
|
||||||
normal_y_sizes.push_back(tiled_wall_data->get_tile_y_size(i));
|
normal_data.push_back(tiled_wall_data->get_tile(i));
|
||||||
normal_z_offsets.push_back(tiled_wall_data->get_tile_z_offset(i));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,8 +471,7 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
|
|
||||||
if (t.is_valid()) {
|
if (t.is_valid()) {
|
||||||
flavour_rects.push_back(cache->texture_get_uv_rect(t));
|
flavour_rects.push_back(cache->texture_get_uv_rect(t));
|
||||||
flavour_y_sizes.push_back(tiled_wall_data->get_flavour_tile_y_size(i));
|
flavour_data.push_back(tiled_wall_data->get_flavour_tile(i));
|
||||||
flavour_z_offsets.push_back(tiled_wall_data->get_flavour_tile_z_offset(i));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -488,7 +484,8 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
|
|
||||||
if (tiling_type == TiledWallData::TILED_WALL_TILING_TYPE_NONE) {
|
if (tiling_type == TiledWallData::TILED_WALL_TILING_TYPE_NONE) {
|
||||||
Rect2 r = normal_rects[0];
|
Rect2 r = normal_rects[0];
|
||||||
float yh = normal_y_sizes[0];
|
float yh = normal_data[0].y_size;
|
||||||
|
int texture_scale = normal_data[0].texture_scale;
|
||||||
|
|
||||||
if (flavour_rects.size() == 0) {
|
if (flavour_rects.size() == 0) {
|
||||||
//no flavours
|
//no flavours
|
||||||
@ -496,7 +493,7 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
float ych = 0;
|
float ych = 0;
|
||||||
|
|
||||||
for (int y = 0; y < height; ++y) {
|
for (int y = 0; y < height; ++y) {
|
||||||
add_tiled_wall_mesh_rect_simple(x, ych, yh, 0, 0, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, ych, yh, 0, 0, transform, r, texture_scale);
|
||||||
|
|
||||||
ych += yh;
|
ych += yh;
|
||||||
}
|
}
|
||||||
@ -508,14 +505,14 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
|
|
||||||
for (int y = 0; y < height; ++y) {
|
for (int y = 0; y < height; ++y) {
|
||||||
if (Math::randf() > flavour_chance) {
|
if (Math::randf() > flavour_chance) {
|
||||||
add_tiled_wall_mesh_rect_simple(x, ych, yh, 0, 0, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, ych, yh, 0, 0, transform, r, texture_scale);
|
||||||
|
|
||||||
ych += yh;
|
ych += yh;
|
||||||
} else {
|
} else {
|
||||||
int indx = Math::rand() % flavour_rects.size();
|
int indx = Math::rand() % flavour_rects.size();
|
||||||
|
|
||||||
float fyh = flavour_y_sizes[indx];
|
float fyh = flavour_data[indx].y_size;
|
||||||
add_tiled_wall_mesh_rect_simple(x, ych, fyh, 0, 0, transform, flavour_rects[indx]);
|
add_tiled_wall_mesh_rect_simple(x, ych, fyh, 0, 0, transform, flavour_rects[indx], flavour_data[indx].texture_scale);
|
||||||
|
|
||||||
ych += fyh;
|
ych += fyh;
|
||||||
}
|
}
|
||||||
@ -531,13 +528,14 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
int indx = x % normal_rects.size();
|
int indx = x % normal_rects.size();
|
||||||
|
|
||||||
r = normal_rects[indx];
|
r = normal_rects[indx];
|
||||||
float ysize = normal_y_sizes[indx];
|
float ysize = normal_data[indx].y_size;
|
||||||
float z_offset = normal_z_offsets[indx];
|
float z_offset = normal_data[indx].z_offset;
|
||||||
|
int texture_scale = normal_data[indx].texture_scale;
|
||||||
|
|
||||||
float cys = 0;
|
float cys = 0;
|
||||||
|
|
||||||
for (int y = 0; y < height; ++y) {
|
for (int y = 0; y < height; ++y) {
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, z_offset, z_offset, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, z_offset, z_offset, transform, r, texture_scale);
|
||||||
|
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
}
|
}
|
||||||
@ -548,20 +546,21 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
int indx = x % normal_rects.size();
|
int indx = x % normal_rects.size();
|
||||||
|
|
||||||
r = normal_rects[indx];
|
r = normal_rects[indx];
|
||||||
float ysize = normal_y_sizes[indx];
|
float ysize = normal_data[indx].y_size;
|
||||||
|
int texture_scale = normal_data[indx].texture_scale;
|
||||||
|
|
||||||
float cys = 0;
|
float cys = 0;
|
||||||
|
|
||||||
for (int y = 0; y < height; ++y) {
|
for (int y = 0; y < height; ++y) {
|
||||||
if (Math::randf() > flavour_chance) {
|
if (Math::randf() > flavour_chance) {
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, r, texture_scale);
|
||||||
|
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
} else {
|
} else {
|
||||||
int findx = Math::rand() % flavour_rects.size();
|
int findx = Math::rand() % flavour_rects.size();
|
||||||
float yh = flavour_y_sizes[findx];
|
float yh = flavour_data[findx].y_size;
|
||||||
|
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, yh, 0, 0, transform, flavour_rects[findx]);
|
add_tiled_wall_mesh_rect_simple(x, cys, yh, 0, 0, transform, flavour_rects[findx], flavour_data[indx].texture_scale);
|
||||||
|
|
||||||
cys += yh;
|
cys += yh;
|
||||||
}
|
}
|
||||||
@ -583,14 +582,14 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
int indx = y % normal_rects.size();
|
int indx = y % normal_rects.size();
|
||||||
|
|
||||||
r = normal_rects[indx];
|
r = normal_rects[indx];
|
||||||
float ysize = normal_y_sizes[indx];
|
float ysize = normal_data[indx].y_size;
|
||||||
float current_z_offset = normal_z_offsets[indx];
|
float current_z_offset = normal_data[indx].z_offset;
|
||||||
|
|
||||||
if (y == 0) {
|
if (y == 0) {
|
||||||
prev_z_offset = current_z_offset;
|
prev_z_offset = current_z_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, prev_z_offset, current_z_offset, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, prev_z_offset, current_z_offset, transform, r, normal_data[indx].texture_scale);
|
||||||
|
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
|
|
||||||
@ -608,7 +607,7 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
int indx = y % normal_rects.size();
|
int indx = y % normal_rects.size();
|
||||||
|
|
||||||
r = normal_rects[indx];
|
r = normal_rects[indx];
|
||||||
float ysize = normal_y_sizes[indx];
|
float ysize = normal_data[indx].y_size;
|
||||||
float current_z_offset = 0;
|
float current_z_offset = 0;
|
||||||
|
|
||||||
if (y == 0) {
|
if (y == 0) {
|
||||||
@ -616,15 +615,15 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Math::randf() > flavour_chance) {
|
if (Math::randf() > flavour_chance) {
|
||||||
current_z_offset = normal_z_offsets[indx];
|
current_z_offset = normal_data[indx].z_offset;
|
||||||
|
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, prev_z_offset, current_z_offset, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, prev_z_offset, current_z_offset, transform, r, normal_data[indx].texture_scale);
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
} else {
|
} else {
|
||||||
int findx = Math::rand() % flavour_rects.size();
|
int findx = Math::rand() % flavour_rects.size();
|
||||||
current_z_offset = flavour_z_offsets[findx];
|
current_z_offset = flavour_data[findx].z_offset;
|
||||||
|
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, prev_z_offset, current_z_offset, transform, flavour_rects[findx]);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, prev_z_offset, current_z_offset, transform, flavour_rects[findx], flavour_data[findx].texture_scale);
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -644,9 +643,9 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
int indx = (x + y) % normal_rects.size();
|
int indx = (x + y) % normal_rects.size();
|
||||||
|
|
||||||
r = normal_rects[indx];
|
r = normal_rects[indx];
|
||||||
float ysize = normal_y_sizes[indx];
|
float ysize = normal_data[indx].y_size;
|
||||||
|
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, r, normal_data[indx].texture_scale);
|
||||||
|
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
}
|
}
|
||||||
@ -660,16 +659,16 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
int indx = (x + y) % normal_rects.size();
|
int indx = (x + y) % normal_rects.size();
|
||||||
|
|
||||||
r = normal_rects[indx];
|
r = normal_rects[indx];
|
||||||
float ysize = normal_y_sizes[indx];
|
float ysize = normal_data[indx].y_size;
|
||||||
|
|
||||||
if (Math::randf() > flavour_chance) {
|
if (Math::randf() > flavour_chance) {
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, r);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, r, normal_data[indx].texture_scale);
|
||||||
cys += ysize;
|
cys += ysize;
|
||||||
} else {
|
} else {
|
||||||
int findx = Math::rand() % flavour_rects.size();
|
int findx = Math::rand() % flavour_rects.size();
|
||||||
float yh = flavour_y_sizes[findx];
|
float yh = flavour_data[findx].y_size;
|
||||||
|
|
||||||
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, flavour_rects[findx]);
|
add_tiled_wall_mesh_rect_simple(x, cys, ysize, 0, 0, transform, flavour_rects[findx], flavour_data[findx].texture_scale);
|
||||||
|
|
||||||
cys += yh;
|
cys += yh;
|
||||||
}
|
}
|
||||||
@ -679,27 +678,27 @@ void PropMesher::add_tiled_wall_simple(const int width, const int height, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PropMesher::add_tiled_wall_mesh_rect_simple(const float x, const float y, const float y_size, const float prev_z_offset, const float current_z_offset, const Transform &transform, const Rect2 &texture_rect) {
|
void PropMesher::add_tiled_wall_mesh_rect_simple(const float x, const float y, const float y_size, const float prev_z_offset, const float current_z_offset, const Transform &transform, const Rect2 &texture_rect, const int texture_scale) {
|
||||||
int vc = get_vertex_count();
|
int vc = get_vertex_count();
|
||||||
|
|
||||||
//x + 1, y
|
//x + 1, y
|
||||||
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
||||||
add_uv(transform_uv(Vector2(1, 1), texture_rect));
|
add_uv(transform_uv_scaled(Vector2(1, 1), texture_rect, x, y, texture_scale));
|
||||||
add_vertex(transform.xform(Vector3(x + 1, y, prev_z_offset)));
|
add_vertex(transform.xform(Vector3(x + 1, y, prev_z_offset)));
|
||||||
|
|
||||||
//x, y
|
//x, y
|
||||||
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
||||||
add_uv(transform_uv(Vector2(0, 1), texture_rect));
|
add_uv(transform_uv_scaled(Vector2(0, 1), texture_rect, x, y, texture_scale));
|
||||||
add_vertex(transform.xform(Vector3(x, y, prev_z_offset)));
|
add_vertex(transform.xform(Vector3(x, y, prev_z_offset)));
|
||||||
|
|
||||||
//x, y + 1
|
//x, y + 1
|
||||||
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
||||||
add_uv(transform_uv(Vector2(0, 0), texture_rect));
|
add_uv(transform_uv_scaled(Vector2(0, 0), texture_rect, x, y, texture_scale));
|
||||||
add_vertex(transform.xform(Vector3(x, y + y_size, current_z_offset)));
|
add_vertex(transform.xform(Vector3(x, y + y_size, current_z_offset)));
|
||||||
|
|
||||||
//x + 1, y + 1
|
//x + 1, y + 1
|
||||||
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
add_normal(transform.basis.xform(Vector3(0, 0, -1)));
|
||||||
add_uv(transform_uv(Vector2(1, 0), texture_rect));
|
add_uv(transform_uv_scaled(Vector2(1, 0), texture_rect, x, y, texture_scale));
|
||||||
add_vertex(transform.xform(Vector3(x + 1, y + y_size, current_z_offset)));
|
add_vertex(transform.xform(Vector3(x + 1, y + y_size, current_z_offset)));
|
||||||
|
|
||||||
add_indices(vc + 2);
|
add_indices(vc + 2);
|
||||||
@ -721,6 +720,25 @@ _FORCE_INLINE_ Vector2 PropMesher::transform_uv(const Vector2 &uv, const Rect2 &
|
|||||||
return ruv;
|
return ruv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector2 PropMesher::transform_uv_scaled(const Vector2 &uv, const Rect2 &rect, const int x, const int y, const int texture_scale) const {
|
||||||
|
Vector2 ruv = uv;
|
||||||
|
|
||||||
|
int lx = x % texture_scale;
|
||||||
|
int ly = y % texture_scale;
|
||||||
|
|
||||||
|
float sizex = rect.size.x / static_cast<float>(texture_scale);
|
||||||
|
float sizey = rect.size.y / static_cast<float>(texture_scale);
|
||||||
|
|
||||||
|
ruv.x *= sizex;
|
||||||
|
ruv.y *= sizey;
|
||||||
|
|
||||||
|
ruv.x += rect.position.x + sizex * lx;
|
||||||
|
ruv.y += rect.position.y + sizey * ly;
|
||||||
|
|
||||||
|
return ruv;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||||
void PropMesher::add_mesh_data_resource(Ref<MeshDataResource> mesh, const Vector3 position, const Vector3 rotation, const Vector3 scale, const Rect2 uv_rect) {
|
void PropMesher::add_mesh_data_resource(Ref<MeshDataResource> mesh, const Vector3 position, const Vector3 rotation, const Vector3 scale, const Rect2 uv_rect) {
|
||||||
Transform transform = Transform(Basis(rotation).scaled(scale), position);
|
Transform transform = Transform(Basis(rotation).scaled(scale), position);
|
||||||
@ -750,7 +768,7 @@ void PropMesher::add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, co
|
|||||||
for (int i = 0; i < vertices.size(); ++i) {
|
for (int i = 0; i < vertices.size(); ++i) {
|
||||||
if (normals.size() > 0) {
|
if (normals.size() > 0) {
|
||||||
add_normal(transform.basis.xform(normals[i]));
|
add_normal(transform.basis.xform(normals[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (normals.size() > 0) {
|
if (normals.size() > 0) {
|
||||||
Vector2 uv = uvs[i];
|
Vector2 uv = uvs[i];
|
||||||
@ -763,7 +781,7 @@ void PropMesher::add_mesh_data_resource_transform(Ref<MeshDataResource> mesh, co
|
|||||||
|
|
||||||
if (colors.size() > 0) {
|
if (colors.size() > 0) {
|
||||||
add_color(colors[i]);
|
add_color(colors[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
add_vertex(transform.xform(vertices[i]));
|
add_vertex(transform.xform(vertices[i]));
|
||||||
}
|
}
|
||||||
@ -871,11 +889,11 @@ float PropMesher::get_random_ao(const Vector3 &position) {
|
|||||||
|
|
||||||
if (val > 1) {
|
if (val > 1) {
|
||||||
val = 1;
|
val = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (val < 0) {
|
if (val < 0) {
|
||||||
val = -val;
|
val = -val;
|
||||||
}
|
}
|
||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
@ -1462,9 +1480,10 @@ void PropMesher::_bind_methods() {
|
|||||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, PropMesher::BINDING_STRING_BUILD_FLAGS), "set_build_flags", "get_build_flags");
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "build_flags", PROPERTY_HINT_FLAGS, PropMesher::BINDING_STRING_BUILD_FLAGS), "set_build_flags", "get_build_flags");
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("add_tiled_wall_simple", "width", "height", "transform", "tiled_wall_data", "cache"), &PropMesher::add_tiled_wall_simple);
|
ClassDB::bind_method(D_METHOD("add_tiled_wall_simple", "width", "height", "transform", "tiled_wall_data", "cache"), &PropMesher::add_tiled_wall_simple);
|
||||||
//ClassDB::bind_method(D_METHOD("add_tiled_wall_mesh_rect_simple", "x", "y", "y_size", "transform", "texture_rect"), &PropMesher::add_tiled_wall_mesh_rect_simple);
|
//ClassDB::bind_method(D_METHOD("add_tiled_wall_mesh_rect_simple", "x", "y", "y_size", "transform", "texture_rect", "texture_scale"), &PropMesher::add_tiled_wall_mesh_rect_simple);
|
||||||
ClassDB::bind_method(D_METHOD("transform_uv", "uv", "rect"), &PropMesher::transform_uv);
|
ClassDB::bind_method(D_METHOD("transform_uv", "uv", "rect"), &PropMesher::transform_uv);
|
||||||
|
ClassDB::bind_method(D_METHOD("transform_uv_scaled", "uv", "rect", "x", "y", "texture_scale"), &PropMesher::transform_uv_scaled);
|
||||||
|
|
||||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource", "mesh", "position", "rotation", "scale", "uv_rect"), &PropMesher::add_mesh_data_resource, DEFVAL(Rect2(0, 0, 1, 1)), DEFVAL(Vector3(1.0, 1.0, 1.0)), DEFVAL(Vector3()), DEFVAL(Vector3()));
|
ClassDB::bind_method(D_METHOD("add_mesh_data_resource", "mesh", "position", "rotation", "scale", "uv_rect"), &PropMesher::add_mesh_data_resource, DEFVAL(Rect2(0, 0, 1, 1)), DEFVAL(Vector3(1.0, 1.0, 1.0)), DEFVAL(Vector3()), DEFVAL(Vector3()));
|
||||||
ClassDB::bind_method(D_METHOD("add_mesh_data_resource_transform", "mesh", "transform", "uv_rect"), &PropMesher::add_mesh_data_resource_transform, DEFVAL(Rect2(0, 0, 1, 1)));
|
ClassDB::bind_method(D_METHOD("add_mesh_data_resource_transform", "mesh", "transform", "uv_rect"), &PropMesher::add_mesh_data_resource_transform, DEFVAL(Rect2(0, 0, 1, 1)));
|
||||||
|
@ -129,9 +129,10 @@ public:
|
|||||||
void reset();
|
void reset();
|
||||||
|
|
||||||
void add_tiled_wall_simple(const int width, const int height, const Transform &transform, const Ref<TiledWallData> &tiled_wall_data, Ref<PropMaterialCache> cache);
|
void add_tiled_wall_simple(const int width, const int height, const Transform &transform, const Ref<TiledWallData> &tiled_wall_data, Ref<PropMaterialCache> cache);
|
||||||
void add_tiled_wall_mesh_rect_simple(const float x, const float y, const float y_size, const float prev_z_offset, const float current_z_offset, const Transform &transform, const Rect2 &texture_rect);
|
void add_tiled_wall_mesh_rect_simple(const float x, const float y, const float y_size, const float prev_z_offset, const float current_z_offset, const Transform &transform, const Rect2 &texture_rect, const int texture_scale);
|
||||||
|
|
||||||
Vector2 transform_uv(const Vector2 &uv, const Rect2 &rect) const;
|
Vector2 transform_uv(const Vector2 &uv, const Rect2 &rect) const;
|
||||||
|
Vector2 transform_uv_scaled(const Vector2 &uv, const Rect2 &rect, const int x, const int y, const int texture_scale) const;
|
||||||
|
|
||||||
#ifdef MESH_DATA_RESOURCE_PRESENT
|
#ifdef MESH_DATA_RESOURCE_PRESENT
|
||||||
void add_mesh_data_resource(Ref<MeshDataResource> mesh, const Vector3 position = Vector3(0, 0, 0), const Vector3 rotation = Vector3(0, 0, 0), const Vector3 scale = Vector3(1.0, 1.0, 1.0), const Rect2 uv_rect = Rect2(0, 0, 1, 1));
|
void add_mesh_data_resource(Ref<MeshDataResource> mesh, const Vector3 position = Vector3(0, 0, 0), const Vector3 rotation = Vector3(0, 0, 0), const Vector3 scale = Vector3(1.0, 1.0, 1.0), const Rect2 uv_rect = Rect2(0, 0, 1, 1));
|
||||||
|
@ -79,6 +79,12 @@ void TiledWallData::remove_tile(const int index) {
|
|||||||
emit_changed();
|
emit_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TiledWallData::TextureEntry TiledWallData::get_tile(const int index) const {
|
||||||
|
ERR_FAIL_INDEX_V(index, _tiles.size(), TextureEntry());
|
||||||
|
|
||||||
|
return _tiles[index];
|
||||||
|
}
|
||||||
|
|
||||||
Ref<Texture> TiledWallData::get_tile_texture(const int index) const {
|
Ref<Texture> TiledWallData::get_tile_texture(const int index) const {
|
||||||
ERR_FAIL_INDEX_V(index, _tiles.size(), Ref<Texture>());
|
ERR_FAIL_INDEX_V(index, _tiles.size(), Ref<Texture>());
|
||||||
|
|
||||||
@ -150,6 +156,11 @@ void TiledWallData::remove_flavour_tile(const int index) {
|
|||||||
|
|
||||||
emit_changed();
|
emit_changed();
|
||||||
}
|
}
|
||||||
|
TiledWallData::TextureEntry TiledWallData::get_flavour_tile(const int index) const {
|
||||||
|
ERR_FAIL_INDEX_V(index, _flavour_tiles.size(), TextureEntry());
|
||||||
|
|
||||||
|
return _flavour_tiles[index];
|
||||||
|
}
|
||||||
|
|
||||||
Ref<Texture> TiledWallData::get_flavour_tile_texture(const int index) const {
|
Ref<Texture> TiledWallData::get_flavour_tile_texture(const int index) const {
|
||||||
ERR_FAIL_INDEX_V(index, _flavour_tiles.size(), Ref<Texture>());
|
ERR_FAIL_INDEX_V(index, _flavour_tiles.size(), Ref<Texture>());
|
||||||
|
@ -59,6 +59,26 @@ public:
|
|||||||
TILED_WALL_COLLIDER_TYPE_CONCAVE_MESH
|
TILED_WALL_COLLIDER_TYPE_CONCAVE_MESH
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct TextureEntry {
|
||||||
|
Ref<Texture> texture;
|
||||||
|
float y_size;
|
||||||
|
float z_offset;
|
||||||
|
int texture_scale;
|
||||||
|
|
||||||
|
TextureEntry() {
|
||||||
|
y_size = 1;
|
||||||
|
z_offset = 0;
|
||||||
|
texture_scale = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureEntry(const Ref<Texture> &p_texture, const float p_y_size = 1, const float p_z_offset = 0, const float p_texture_scale = 0) {
|
||||||
|
texture = p_texture;
|
||||||
|
y_size = p_y_size;
|
||||||
|
z_offset = p_z_offset;
|
||||||
|
texture_scale = p_texture_scale;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static const String BINDING_STRING_TILED_WALL_TILING_TYPE;
|
static const String BINDING_STRING_TILED_WALL_TILING_TYPE;
|
||||||
static const String BINDING_STRING_TILED_WALL_COLLIDER_TYPE;
|
static const String BINDING_STRING_TILED_WALL_COLLIDER_TYPE;
|
||||||
|
|
||||||
@ -75,6 +95,7 @@ public:
|
|||||||
//textures
|
//textures
|
||||||
void add_tile(const Ref<Texture> &texture, const float y_size = 1, const float z_offset = 0, const int texture_scale = 1);
|
void add_tile(const Ref<Texture> &texture, const float y_size = 1, const float z_offset = 0, const int texture_scale = 1);
|
||||||
void remove_tile(const int index);
|
void remove_tile(const int index);
|
||||||
|
TextureEntry get_tile(const int index) const;
|
||||||
|
|
||||||
Ref<Texture> get_tile_texture(const int index) const;
|
Ref<Texture> get_tile_texture(const int index) const;
|
||||||
void set_tile_texture(const int index, const Ref<Texture> &texture);
|
void set_tile_texture(const int index, const Ref<Texture> &texture);
|
||||||
@ -92,8 +113,9 @@ public:
|
|||||||
void set_tile_count(const int count);
|
void set_tile_count(const int count);
|
||||||
|
|
||||||
//flavour_textures
|
//flavour_textures
|
||||||
void add_flavour_tile(const Ref<Texture> &texture, const float y_size =1, const float z_offset = 0, const int texture_scale = 1);
|
void add_flavour_tile(const Ref<Texture> &texture, const float y_size = 1, const float z_offset = 0, const int texture_scale = 1);
|
||||||
void remove_flavour_tile(const int index);
|
void remove_flavour_tile(const int index);
|
||||||
|
TextureEntry get_flavour_tile(const int index) const;
|
||||||
|
|
||||||
Ref<Texture> get_flavour_tile_texture(const int index) const;
|
Ref<Texture> get_flavour_tile_texture(const int index) const;
|
||||||
void set_flavour_tile_texture(const int index, const Ref<Texture> &texture);
|
void set_flavour_tile_texture(const int index, const Ref<Texture> &texture);
|
||||||
@ -145,26 +167,6 @@ protected:
|
|||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct TextureEntry {
|
|
||||||
Ref<Texture> texture;
|
|
||||||
float y_size;
|
|
||||||
float z_offset;
|
|
||||||
int texture_scale;
|
|
||||||
|
|
||||||
TextureEntry() {
|
|
||||||
y_size = 1;
|
|
||||||
z_offset = 0;
|
|
||||||
texture_scale = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
TextureEntry(const Ref<Texture> &p_texture, const float p_y_size = 1, const float p_z_offset = 0, const float p_texture_scale = 0) {
|
|
||||||
texture = p_texture;
|
|
||||||
y_size = p_y_size;
|
|
||||||
z_offset = p_z_offset;
|
|
||||||
texture_scale = p_texture_scale;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
TiledWallTilingType _tiling_type;
|
TiledWallTilingType _tiling_type;
|
||||||
TiledWallColliderType _collider_type;
|
TiledWallColliderType _collider_type;
|
||||||
float _colldier_z_offset;
|
float _colldier_z_offset;
|
||||||
|
Loading…
Reference in New Issue
Block a user