Add turning rivers and lake edge variation
|
|
@ -136,17 +136,30 @@ func _validate_generated_region(
|
|||
assert(maxi(
|
||||
generator._river_feature_footprint_size.x,
|
||||
generator._river_feature_footprint_size.y,
|
||||
) >= 7)
|
||||
) >= 4)
|
||||
assert(mini(
|
||||
generator._river_feature_footprint_size.x,
|
||||
generator._river_feature_footprint_size.y,
|
||||
) == 2)
|
||||
) >= 4)
|
||||
assert(generator._river_feature_flow_direction in [
|
||||
Vector2i.RIGHT,
|
||||
Vector2i.DOWN,
|
||||
Vector2i.LEFT,
|
||||
Vector2i.UP,
|
||||
])
|
||||
assert(generator._river_feature_outlet_direction in [
|
||||
Vector2i.RIGHT,
|
||||
Vector2i.DOWN,
|
||||
Vector2i.LEFT,
|
||||
Vector2i.UP,
|
||||
])
|
||||
assert(
|
||||
generator._river_feature_flow_direction.x
|
||||
* generator._river_feature_outlet_direction.x
|
||||
+ generator._river_feature_flow_direction.y
|
||||
* generator._river_feature_outlet_direction.y
|
||||
== 0
|
||||
)
|
||||
assert(generator.elevated_cliff_coastal_feature_required)
|
||||
assert(placements.size() == expected_chunk_count)
|
||||
assert(placements[center_index].begins_with("chunk_spawn@"))
|
||||
|
|
@ -226,6 +239,10 @@ func _validate_generated_region(
|
|||
assert(_placement_count(placements, "chunk_0030") == 1)
|
||||
assert(_placement_count(placements, "chunk_0031") == 1)
|
||||
assert(_placement_count(placements, "chunk_0032") == 1)
|
||||
assert(_placement_count(placements, "chunk_0033") == 1)
|
||||
assert(_placement_count(placements, "chunk_0034") == 1)
|
||||
assert(_placement_count(placements, "chunk_0035") == 1)
|
||||
assert(_placement_count(placements, "chunk_0036") == 1)
|
||||
assert(
|
||||
_placement_count(placements, "chunk_0014")
|
||||
== (2 if has_secondary_elevation else 0)
|
||||
|
|
@ -239,12 +256,15 @@ func _validate_generated_region(
|
|||
assert(_placement_count(placements, "chunk_0022") == 4)
|
||||
assert(_placement_count(placements, "chunk_0023") == 4)
|
||||
var lake_edge_count := _placement_count(placements, "chunk_0017")
|
||||
var lake_edge_variant_count := _placement_count(placements, "chunk_0037")
|
||||
var lake_fill_count := _placement_count(placements, "chunk_0019")
|
||||
var lake_narrow_count := _placement_count(placements, "chunk_0021")
|
||||
var lake_size := generator._lake_feature_footprint_size.x
|
||||
assert(lake_size in [7, 8])
|
||||
assert(lake_fill_count == (lake_size - 2) * (lake_size - 2))
|
||||
assert(lake_edge_count == (lake_size - 6) * 4)
|
||||
assert(lake_edge_count + lake_edge_variant_count == (lake_size - 6) * 4)
|
||||
assert(lake_edge_count > 0)
|
||||
assert(lake_edge_variant_count > 0)
|
||||
assert(lake_narrow_count == 8)
|
||||
assert(_placement_count(placements, "chunk_9999") == 0)
|
||||
assert(_placement_count(placements, "chunk_9998") == 0)
|
||||
|
|
@ -257,13 +277,14 @@ func _validate_generated_region(
|
|||
== (1 if has_secondary_elevation else 0)
|
||||
)
|
||||
assert(_placement_count(placements, "chunk_9995") == 0)
|
||||
var river_length := maxi(
|
||||
generator._river_feature_footprint_size.x,
|
||||
generator._river_feature_footprint_size.y,
|
||||
var river_coordinate_count := generator._river_feature_coordinates.size()
|
||||
var river_edge_count := (
|
||||
_placement_count(placements, "chunk_0024")
|
||||
+ _placement_count(placements, "chunk_0025")
|
||||
)
|
||||
assert(river_length in [7, 8])
|
||||
assert(_placement_count(placements, "chunk_0024") == river_length - 2)
|
||||
assert(_placement_count(placements, "chunk_0025") == river_length - 2)
|
||||
assert(river_coordinate_count >= 12)
|
||||
assert(generator._river_feature_placements.size() == river_coordinate_count)
|
||||
assert(river_edge_count == river_coordinate_count - 8)
|
||||
var river_source_coordinates := generator._river_source_coordinates(
|
||||
generator._river_feature_origin,
|
||||
generator._river_feature_footprint_size,
|
||||
|
|
@ -297,7 +318,7 @@ func _validate_generated_region(
|
|||
assert(
|
||||
not generator._coordinate_is_inside_grid(
|
||||
outlet_coordinate
|
||||
+ generator._river_feature_flow_direction
|
||||
+ generator._river_feature_outlet_direction
|
||||
)
|
||||
)
|
||||
assert(outlet_coordinates.size() == 2)
|
||||
|
|
@ -379,7 +400,7 @@ func _validate_generated_region(
|
|||
] = surface_polygon.size()
|
||||
_validate_complete_coastline(generator)
|
||||
assert(fresh_root.get_child_count() == fresh_placement_count)
|
||||
assert(river_placement_count == river_length * 2)
|
||||
assert(river_placement_count == river_coordinate_count)
|
||||
assert(
|
||||
polygon_sizes_by_coordinate.size()
|
||||
== 20 + river_placement_count
|
||||
|
|
@ -1025,19 +1046,48 @@ func _validate_decoration_transform(
|
|||
prop.global_position + Vector3.DOWN * 8.0,
|
||||
1,
|
||||
)
|
||||
var prop_body := prop.get_node_or_null(
|
||||
"TrunkCollision",
|
||||
) as CollisionObject3D
|
||||
if prop_body != null:
|
||||
query.exclude = [prop_body.get_rid()]
|
||||
var excluded_colliders: Array[RID] = []
|
||||
var decorations := region.get_node("Decorations") as Node3D
|
||||
for decoration: Node in decorations.get_children():
|
||||
var prop_body := decoration.get_node_or_null(
|
||||
"TrunkCollision",
|
||||
) as CollisionObject3D
|
||||
if prop_body != null:
|
||||
excluded_colliders.append(prop_body.get_rid())
|
||||
query.exclude = excluded_colliders
|
||||
var hit := region.get_world_3d().direct_space_state.intersect_ray(query)
|
||||
# Stacked cliff walls can overhang a neighboring cell. Match the placement
|
||||
# sampler by ignoring steep faces until the ray reaches walkable terrain.
|
||||
while (
|
||||
not hit.is_empty()
|
||||
and absf((hit.get("normal", Vector3.ZERO) as Vector3).dot(Vector3.UP))
|
||||
< 0.35
|
||||
):
|
||||
var steep_collider := hit.get("collider") as CollisionObject3D
|
||||
assert(steep_collider != null)
|
||||
excluded_colliders.append(steep_collider.get_rid())
|
||||
query.exclude = excluded_colliders
|
||||
hit = region.get_world_3d().direct_space_state.intersect_ray(query)
|
||||
assert(
|
||||
not hit.is_empty(),
|
||||
"No terrain collision below %s (%s) at %s."
|
||||
% [prop.name, definition.stable_id, prop.global_position],
|
||||
)
|
||||
var ground_position: Vector3 = hit["position"]
|
||||
assert(absf(ground_position.y - prop.global_position.y) <= 0.01)
|
||||
assert(
|
||||
absf(ground_position.y - prop.global_position.y) <= 0.01,
|
||||
"Terrain height %s does not match %s (%s) at %s."
|
||||
% [
|
||||
ground_position.y,
|
||||
prop.name,
|
||||
definition.stable_id,
|
||||
"%s in chunk %s; hit %s" % [
|
||||
prop.global_position,
|
||||
prop.get_meta(&"terrain_chunk_coordinate", Vector2i(-1, -1)),
|
||||
(hit.get("collider") as Node).get_path(),
|
||||
],
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
func _validate_tree_gatherable_anchors(
|
||||
|
|
|
|||
|
|
@ -37,6 +37,11 @@ const EXPECTED_IDS: Array[String] = [
|
|||
"chunk_0030",
|
||||
"chunk_0031",
|
||||
"chunk_0032",
|
||||
"chunk_0033",
|
||||
"chunk_0034",
|
||||
"chunk_0035",
|
||||
"chunk_0036",
|
||||
"chunk_0037",
|
||||
"chunk_9999",
|
||||
"chunk_9998",
|
||||
"chunk_9997",
|
||||
|
|
@ -88,6 +93,11 @@ const EXPECTED_VARIANT_COUNTS: Dictionary[StringName, int] = {
|
|||
&"chunk_0030": 4,
|
||||
&"chunk_0031": 4,
|
||||
&"chunk_0032": 4,
|
||||
&"chunk_0033": 4,
|
||||
&"chunk_0034": 4,
|
||||
&"chunk_0035": 4,
|
||||
&"chunk_0036": 4,
|
||||
&"chunk_0037": 4,
|
||||
&"chunk_9999": 4,
|
||||
&"chunk_9998": 4,
|
||||
&"chunk_9997": 4,
|
||||
|
|
@ -144,6 +154,7 @@ func _validate_catalog() -> void:
|
|||
var cliff_beach_transition_left := CATALOG.definition_for_id(&"chunk_9996")
|
||||
var stream_variant := CATALOG.definition_for_id(&"chunk_0016")
|
||||
var lake_edge := CATALOG.definition_for_id(&"chunk_0017")
|
||||
var lake_edge_variant := CATALOG.definition_for_id(&"chunk_0037")
|
||||
var lake_corner := CATALOG.definition_for_id(&"chunk_0018")
|
||||
var lake_fill := CATALOG.definition_for_id(&"chunk_0019")
|
||||
var lake_diagonal := CATALOG.definition_for_id(&"chunk_0020")
|
||||
|
|
@ -156,6 +167,10 @@ func _validate_catalog() -> void:
|
|||
var river_source_left := CATALOG.definition_for_id(&"chunk_0030")
|
||||
var river_outlet_right := CATALOG.definition_for_id(&"chunk_0031")
|
||||
var river_outlet_left := CATALOG.definition_for_id(&"chunk_0032")
|
||||
var river_bend_c := CATALOG.definition_for_id(&"chunk_0033")
|
||||
var river_bend_b := CATALOG.definition_for_id(&"chunk_0034")
|
||||
var river_bend_a := CATALOG.definition_for_id(&"chunk_0035")
|
||||
var river_bend_d := CATALOG.definition_for_id(&"chunk_0036")
|
||||
var river_cap := CATALOG.definition_for_id(&"chunk_9995")
|
||||
var cliff_top := CATALOG.definition_for_id(&"chunk_0009")
|
||||
var cliff_corner := CATALOG.definition_for_id(&"chunk_0010")
|
||||
|
|
@ -184,6 +199,7 @@ func _validate_catalog() -> void:
|
|||
and cliff_beach_transition_left != null
|
||||
and stream_variant != null
|
||||
and lake_edge != null
|
||||
and lake_edge_variant != null
|
||||
and lake_corner != null
|
||||
and lake_fill != null
|
||||
and lake_diagonal != null
|
||||
|
|
@ -196,6 +212,10 @@ func _validate_catalog() -> void:
|
|||
and river_source_left != null
|
||||
and river_outlet_right != null
|
||||
and river_outlet_left != null
|
||||
and river_bend_a != null
|
||||
and river_bend_b != null
|
||||
and river_bend_c != null
|
||||
and river_bend_d != null
|
||||
and river_cap != null
|
||||
and cliff_top != null
|
||||
and cliff_corner != null
|
||||
|
|
@ -226,6 +246,7 @@ func _validate_catalog() -> void:
|
|||
and cliff_beach_transition_left != null
|
||||
and stream_variant != null
|
||||
and lake_edge != null
|
||||
and lake_edge_variant != null
|
||||
and lake_corner != null
|
||||
and lake_fill != null
|
||||
and lake_diagonal != null
|
||||
|
|
@ -238,6 +259,10 @@ func _validate_catalog() -> void:
|
|||
and river_source_left != null
|
||||
and river_outlet_right != null
|
||||
and river_outlet_left != null
|
||||
and river_bend_a != null
|
||||
and river_bend_b != null
|
||||
and river_bend_c != null
|
||||
and river_bend_d != null
|
||||
and river_cap != null
|
||||
and cliff_top != null
|
||||
and cliff_corner != null
|
||||
|
|
@ -431,6 +456,7 @@ func _validate_catalog() -> void:
|
|||
_check(
|
||||
(
|
||||
not lake_edge.participates_in_base_solver
|
||||
and not lake_edge_variant.participates_in_base_solver
|
||||
and not lake_corner.participates_in_base_solver
|
||||
and not lake_fill.participates_in_base_solver
|
||||
and not lake_diagonal.participates_in_base_solver
|
||||
|
|
@ -439,6 +465,14 @@ func _validate_catalog() -> void:
|
|||
and not lake_narrow_to_regular.participates_in_base_solver
|
||||
and lake_edge.water_inlet_edges == lake_edge.water_outlet_edges
|
||||
and lake_edge.water_inlet_edges == 7
|
||||
and lake_edge_variant.water_inlet_edges
|
||||
== lake_edge.water_inlet_edges
|
||||
and lake_edge_variant.water_outlet_edges
|
||||
== lake_edge.water_outlet_edges
|
||||
and lake_edge_variant.water_surface_size
|
||||
== lake_edge.water_surface_size
|
||||
and lake_edge_variant.water_surface_offset
|
||||
== lake_edge.water_surface_offset
|
||||
and lake_corner.water_inlet_edges
|
||||
== lake_corner.water_outlet_edges
|
||||
and lake_corner.water_inlet_edges == 6
|
||||
|
|
@ -461,6 +495,7 @@ func _validate_catalog() -> void:
|
|||
and lake_narrow_to_regular.water_outlet_edges == 14
|
||||
and lake_narrow_to_regular.water_surface_polygon.size() == 5
|
||||
and "lake" in lake_edge.tags
|
||||
and "lake" in lake_edge_variant.tags
|
||||
and "lake" in lake_corner.tags
|
||||
and "lake" in lake_fill.tags
|
||||
and "lake" in lake_diagonal.tags
|
||||
|
|
@ -478,6 +513,10 @@ func _validate_catalog() -> void:
|
|||
and not river_source_left.participates_in_base_solver
|
||||
and not river_outlet_right.participates_in_base_solver
|
||||
and not river_outlet_left.participates_in_base_solver
|
||||
and not river_bend_a.participates_in_base_solver
|
||||
and not river_bend_b.participates_in_base_solver
|
||||
and not river_bend_c.participates_in_base_solver
|
||||
and not river_bend_d.participates_in_base_solver
|
||||
and not river_cap.participates_in_base_solver
|
||||
and river_edge.water_inlet_edges == 14
|
||||
and river_edge.water_outlet_edges == 14
|
||||
|
|
@ -491,6 +530,16 @@ func _validate_catalog() -> void:
|
|||
and river_outlet_right.water_outlet_edges == 14
|
||||
and river_outlet_left.water_inlet_edges == 11
|
||||
and river_outlet_left.water_outlet_edges == 11
|
||||
and river_bend_a.water_inlet_edges == 14
|
||||
and river_bend_a.water_outlet_edges == 14
|
||||
and river_bend_b.water_inlet_edges == 12
|
||||
and river_bend_b.water_outlet_edges == 12
|
||||
and river_bend_c.water_inlet_edges == 15
|
||||
and river_bend_c.water_outlet_edges == 15
|
||||
and river_bend_c.continuous_water_seam_edges == 15
|
||||
and river_bend_d.water_inlet_edges == 13
|
||||
and river_bend_d.water_outlet_edges == 13
|
||||
and river_bend_d.continuous_water_seam_edges == 1
|
||||
and river_cap.water_inlet_edges == 6
|
||||
and river_cap.water_outlet_edges == 6
|
||||
and river_edge.water_surface_polygon.size() == 13
|
||||
|
|
@ -509,11 +558,15 @@ func _validate_catalog() -> void:
|
|||
and "river_source_left" in river_source_left.tags
|
||||
and "river_outlet_right" in river_outlet_right.tags
|
||||
and "river_outlet_left" in river_outlet_left.tags
|
||||
and "river_bend_a" in river_bend_a.tags
|
||||
and "river_bend_b" in river_bend_b.tags
|
||||
and "river_bend_c" in river_bend_c.tags
|
||||
and "river_bend_d" in river_bend_d.tags
|
||||
and "river" in river_cap.tags
|
||||
),
|
||||
(
|
||||
"The river banks, cliff source, ocean outlet, and legacy caps "
|
||||
+ "must remain connected freshwater chunks."
|
||||
"The river banks, bend, cliff source, ocean outlet, and legacy "
|
||||
+ "caps must remain connected freshwater chunks."
|
||||
),
|
||||
)
|
||||
for cliff_definition: TerrainChunkDefinition in [
|
||||
|
|
@ -1307,6 +1360,7 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
var lake_regular_to_narrow := _find_variant(generator, &"chunk_0022", 0)
|
||||
var lake_narrow_to_regular := _find_variant(generator, &"chunk_0023", 0)
|
||||
var lake_regular_top := _find_variant(generator, &"chunk_0017", 3)
|
||||
var lake_regular_variant_top := _find_variant(generator, &"chunk_0037", 3)
|
||||
_check(
|
||||
(
|
||||
lake_diagonal_northwest != null
|
||||
|
|
@ -1316,6 +1370,7 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
and lake_regular_to_narrow != null
|
||||
and lake_narrow_to_regular != null
|
||||
and lake_regular_top != null
|
||||
and lake_regular_variant_top != null
|
||||
),
|
||||
"Every authored diagonal lake perimeter variant must be available.",
|
||||
)
|
||||
|
|
@ -1327,7 +1382,13 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
and lake_regular_to_narrow != null
|
||||
and lake_narrow_to_regular != null
|
||||
and lake_regular_top != null
|
||||
and lake_regular_variant_top != null
|
||||
):
|
||||
_check(
|
||||
lake_regular_variant_top.topology_signature(0.001)
|
||||
== lake_regular_top.topology_signature(0.001),
|
||||
"Both regular lake edge visuals must expose identical seams.",
|
||||
)
|
||||
_check(
|
||||
generator._edges_are_compatible(
|
||||
lake_diagonal_northwest,
|
||||
|
|
@ -1398,11 +1459,36 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
var river_edge_top := _find_variant(generator, &"chunk_0024", 0)
|
||||
var river_edge_variant_top := _find_variant(generator, &"chunk_0025", 0)
|
||||
var river_edge_variant_bottom := _find_variant(generator, &"chunk_0025", 2)
|
||||
var river_edge_vertical_left := _find_variant(generator, &"chunk_0024", 1)
|
||||
var river_edge_vertical_right := _find_variant(generator, &"chunk_0025", 3)
|
||||
var river_source_right := _find_variant(generator, &"chunk_0029", 0)
|
||||
var river_source_left := _find_variant(generator, &"chunk_0030", 0)
|
||||
var river_outlet_right := _find_variant(generator, &"chunk_0031", 0)
|
||||
var river_outlet_left := _find_variant(generator, &"chunk_0032", 0)
|
||||
var river_bend_a := _find_variant(generator, &"chunk_0035", 0)
|
||||
var river_bend_b := _find_variant(generator, &"chunk_0034", 0)
|
||||
var river_bend_c := _find_variant(generator, &"chunk_0033", 2)
|
||||
var river_bend_d := _find_variant(generator, &"chunk_0036", 0)
|
||||
var beach_east := _find_variant(generator, &"chunk_0002", 0)
|
||||
var canonical_bend_specs := generator._river_bend_placement_specs(
|
||||
Vector2i(5, 5),
|
||||
0,
|
||||
)
|
||||
var rotated_bend_specs := generator._river_bend_placement_specs(
|
||||
Vector2i(5, 5),
|
||||
1,
|
||||
)
|
||||
_check(
|
||||
(
|
||||
canonical_bend_specs.size() == 4
|
||||
and canonical_bend_specs[2]["id"] == &"chunk_0033"
|
||||
and int(canonical_bend_specs[2]["turns"]) == 2
|
||||
and rotated_bend_specs.size() == 4
|
||||
and rotated_bend_specs[2]["id"] == &"chunk_0033"
|
||||
and int(rotated_bend_specs[2]["turns"]) == 3
|
||||
),
|
||||
"River bend C must retain its authored half-turn at every bend rotation.",
|
||||
)
|
||||
_check(
|
||||
(
|
||||
river_cap_northwest != null
|
||||
|
|
@ -1412,15 +1498,21 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
and river_edge_top != null
|
||||
and river_edge_variant_top != null
|
||||
and river_edge_variant_bottom != null
|
||||
and river_edge_vertical_left != null
|
||||
and river_edge_vertical_right != null
|
||||
and river_source_right != null
|
||||
and river_source_left != null
|
||||
and river_outlet_right != null
|
||||
and river_outlet_left != null
|
||||
and river_bend_a != null
|
||||
and river_bend_b != null
|
||||
and river_bend_c != null
|
||||
and river_bend_d != null
|
||||
and beach_east != null
|
||||
),
|
||||
(
|
||||
"Every authored river-bank, source, outlet, and legacy-cap variant "
|
||||
+ "must be available."
|
||||
"Every authored river-bank, bend, source, outlet, and legacy-cap "
|
||||
+ "variant must be available."
|
||||
),
|
||||
)
|
||||
if (
|
||||
|
|
@ -1431,10 +1523,16 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
and river_edge_top != null
|
||||
and river_edge_variant_top != null
|
||||
and river_edge_variant_bottom != null
|
||||
and river_edge_vertical_left != null
|
||||
and river_edge_vertical_right != null
|
||||
and river_source_right != null
|
||||
and river_source_left != null
|
||||
and river_outlet_right != null
|
||||
and river_outlet_left != null
|
||||
and river_bend_a != null
|
||||
and river_bend_b != null
|
||||
and river_bend_c != null
|
||||
and river_bend_d != null
|
||||
and beach_east != null
|
||||
):
|
||||
_check(
|
||||
|
|
@ -1458,6 +1556,60 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
),
|
||||
"The paired cliff source must open directly into both river banks.",
|
||||
)
|
||||
_check(
|
||||
generator._edges_are_compatible(
|
||||
river_bend_a,
|
||||
TerrainChunkTopology.Edge.EAST,
|
||||
river_bend_b,
|
||||
TerrainChunkTopology.Edge.WEST,
|
||||
)
|
||||
and generator._edges_are_compatible(
|
||||
river_bend_a,
|
||||
TerrainChunkTopology.Edge.SOUTH,
|
||||
river_bend_c,
|
||||
TerrainChunkTopology.Edge.NORTH,
|
||||
)
|
||||
and generator._edges_are_compatible(
|
||||
river_bend_b,
|
||||
TerrainChunkTopology.Edge.SOUTH,
|
||||
river_bend_d,
|
||||
TerrainChunkTopology.Edge.NORTH,
|
||||
)
|
||||
and generator._edges_are_compatible(
|
||||
river_bend_c,
|
||||
TerrainChunkTopology.Edge.EAST,
|
||||
river_bend_d,
|
||||
TerrainChunkTopology.Edge.WEST,
|
||||
),
|
||||
"The four authored river-bend quadrants must form one continuous turn.",
|
||||
)
|
||||
_check(
|
||||
generator._edges_are_compatible(
|
||||
river_edge_top,
|
||||
TerrainChunkTopology.Edge.EAST,
|
||||
river_bend_a,
|
||||
TerrainChunkTopology.Edge.WEST,
|
||||
)
|
||||
and generator._edges_are_compatible(
|
||||
river_edge_variant_bottom,
|
||||
TerrainChunkTopology.Edge.EAST,
|
||||
river_bend_c,
|
||||
TerrainChunkTopology.Edge.WEST,
|
||||
)
|
||||
and generator._edges_are_compatible(
|
||||
river_bend_c,
|
||||
TerrainChunkTopology.Edge.SOUTH,
|
||||
river_edge_vertical_left,
|
||||
TerrainChunkTopology.Edge.NORTH,
|
||||
)
|
||||
and generator._edges_are_compatible(
|
||||
river_bend_d,
|
||||
TerrainChunkTopology.Edge.SOUTH,
|
||||
river_edge_vertical_right,
|
||||
TerrainChunkTopology.Edge.NORTH,
|
||||
),
|
||||
"The bend must connect both incoming and outgoing authored river banks.",
|
||||
)
|
||||
_check(
|
||||
generator._edges_are_compatible(
|
||||
river_edge_top,
|
||||
|
|
@ -1598,8 +1750,8 @@ func _validate_authored_rotations(generator: TerrainChunkGenerator) -> void:
|
|||
func _validate_generation_summary(generator: TerrainChunkGenerator) -> void:
|
||||
var summary := generator._build_summary()
|
||||
_check(
|
||||
int(summary.get("variant_count", 0)) == 150,
|
||||
"The current catalog must expose all 150 authored rotations.",
|
||||
int(summary.get("variant_count", 0)) == 170,
|
||||
"The current catalog must expose all 170 authored rotations.",
|
||||
)
|
||||
_check(
|
||||
int(summary.get("solver_variant_count", 0))
|
||||
|
|
|
|||
BIN
world/generation/chunks/assets/chunk_0033.glb
Normal file
45
world/generation/chunks/assets/chunk_0033.glb.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bpxb6irv0uy0r"
|
||||
path="res://.godot/imported/chunk_0033.glb-efe42677a43450655710a9221ab8eb95.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0033.glb"
|
||||
dest_files=["res://.godot/imported/chunk_0033.glb-efe42677a43450655710a9221ab8eb95.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
world/generation/chunks/assets/chunk_0033_cliff_wall.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c6e67baffellv"
|
||||
path.s3tc="res://.godot/imported/chunk_0033_cliff_wall.png-5a927c95df8649ebd783b1af7c54e594.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0033_cliff_wall.png-5a927c95df8649ebd783b1af7c54e594.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "fc97184f537cc23f83a731327e10c836"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0033_cliff_wall.png"
|
||||
dest_files=["res://.godot/imported/chunk_0033_cliff_wall.png-5a927c95df8649ebd783b1af7c54e594.s3tc.ctex", "res://.godot/imported/chunk_0033_cliff_wall.png-5a927c95df8649ebd783b1af7c54e594.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0033_dirt.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
45
world/generation/chunks/assets/chunk_0033_dirt.png.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bdo5u7ulyf420"
|
||||
path.s3tc="res://.godot/imported/chunk_0033_dirt.png-922aa321752269bafb91e9d4b7af875e.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0033_dirt.png-922aa321752269bafb91e9d4b7af875e.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "07d90b3c46a4c3d0c172bed143dc9436"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0033_dirt.png"
|
||||
dest_files=["res://.godot/imported/chunk_0033_dirt.png-922aa321752269bafb91e9d4b7af875e.s3tc.ctex", "res://.godot/imported/chunk_0033_dirt.png-922aa321752269bafb91e9d4b7af875e.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0033_grass_lite.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://46ryou6n6ogg"
|
||||
path.s3tc="res://.godot/imported/chunk_0033_grass_lite.png-a8e03cbfa4baf7cbc6f1406eb3f5d531.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0033_grass_lite.png-a8e03cbfa4baf7cbc6f1406eb3f5d531.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "4dc1ac400d85d9b3e4f43a5af0a38ed4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0033_grass_lite.png"
|
||||
dest_files=["res://.godot/imported/chunk_0033_grass_lite.png-a8e03cbfa4baf7cbc6f1406eb3f5d531.s3tc.ctex", "res://.godot/imported/chunk_0033_grass_lite.png-a8e03cbfa4baf7cbc6f1406eb3f5d531.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0034.glb
Normal file
45
world/generation/chunks/assets/chunk_0034.glb.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dyihbkykyskj"
|
||||
path="res://.godot/imported/chunk_0034.glb-b92b8ad51734f50a55c4f2e13c2ba1dc.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0034.glb"
|
||||
dest_files=["res://.godot/imported/chunk_0034.glb-b92b8ad51734f50a55c4f2e13c2ba1dc.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
world/generation/chunks/assets/chunk_0034_cliff_wall.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ceu5tr7jpsl8s"
|
||||
path.s3tc="res://.godot/imported/chunk_0034_cliff_wall.png-547e43ba799070ca9d5487085e0b87be.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0034_cliff_wall.png-547e43ba799070ca9d5487085e0b87be.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "fc97184f537cc23f83a731327e10c836"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0034_cliff_wall.png"
|
||||
dest_files=["res://.godot/imported/chunk_0034_cliff_wall.png-547e43ba799070ca9d5487085e0b87be.s3tc.ctex", "res://.godot/imported/chunk_0034_cliff_wall.png-547e43ba799070ca9d5487085e0b87be.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0034_dirt.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
45
world/generation/chunks/assets/chunk_0034_dirt.png.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://brbxnlixypkxp"
|
||||
path.s3tc="res://.godot/imported/chunk_0034_dirt.png-1bf0eb5903180997b50f578932bd52c6.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0034_dirt.png-1bf0eb5903180997b50f578932bd52c6.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "07d90b3c46a4c3d0c172bed143dc9436"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0034_dirt.png"
|
||||
dest_files=["res://.godot/imported/chunk_0034_dirt.png-1bf0eb5903180997b50f578932bd52c6.s3tc.ctex", "res://.godot/imported/chunk_0034_dirt.png-1bf0eb5903180997b50f578932bd52c6.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0034_grass_lite.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8crpbxki018u"
|
||||
path.s3tc="res://.godot/imported/chunk_0034_grass_lite.png-d7f44fbe927d93f7021da5b9cf23444e.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0034_grass_lite.png-d7f44fbe927d93f7021da5b9cf23444e.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "4dc1ac400d85d9b3e4f43a5af0a38ed4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0034_grass_lite.png"
|
||||
dest_files=["res://.godot/imported/chunk_0034_grass_lite.png-d7f44fbe927d93f7021da5b9cf23444e.s3tc.ctex", "res://.godot/imported/chunk_0034_grass_lite.png-d7f44fbe927d93f7021da5b9cf23444e.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0035.glb
Normal file
45
world/generation/chunks/assets/chunk_0035.glb.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://da8d1mejjp333"
|
||||
path="res://.godot/imported/chunk_0035.glb-af3dcdae51aaba377d5b5344b50be7c7.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0035.glb"
|
||||
dest_files=["res://.godot/imported/chunk_0035.glb-af3dcdae51aaba377d5b5344b50be7c7.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
world/generation/chunks/assets/chunk_0035_cliff_wall.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dp4kpw64dmukj"
|
||||
path.s3tc="res://.godot/imported/chunk_0035_cliff_wall.png-ec09ffbe6a034f8e0f0052e721831ef2.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0035_cliff_wall.png-ec09ffbe6a034f8e0f0052e721831ef2.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "fc97184f537cc23f83a731327e10c836"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0035_cliff_wall.png"
|
||||
dest_files=["res://.godot/imported/chunk_0035_cliff_wall.png-ec09ffbe6a034f8e0f0052e721831ef2.s3tc.ctex", "res://.godot/imported/chunk_0035_cliff_wall.png-ec09ffbe6a034f8e0f0052e721831ef2.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0035_dirt.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
45
world/generation/chunks/assets/chunk_0035_dirt.png.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dc1nrektrgqkp"
|
||||
path.s3tc="res://.godot/imported/chunk_0035_dirt.png-58b1612acd4423920b9fa50fc3926b47.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0035_dirt.png-58b1612acd4423920b9fa50fc3926b47.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "07d90b3c46a4c3d0c172bed143dc9436"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0035_dirt.png"
|
||||
dest_files=["res://.godot/imported/chunk_0035_dirt.png-58b1612acd4423920b9fa50fc3926b47.s3tc.ctex", "res://.godot/imported/chunk_0035_dirt.png-58b1612acd4423920b9fa50fc3926b47.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0035_grass_lite.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dxqphihkd5flj"
|
||||
path.s3tc="res://.godot/imported/chunk_0035_grass_lite.png-502ef62d50c50e34bc377a90431a69a5.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0035_grass_lite.png-502ef62d50c50e34bc377a90431a69a5.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "4dc1ac400d85d9b3e4f43a5af0a38ed4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0035_grass_lite.png"
|
||||
dest_files=["res://.godot/imported/chunk_0035_grass_lite.png-502ef62d50c50e34bc377a90431a69a5.s3tc.ctex", "res://.godot/imported/chunk_0035_grass_lite.png-502ef62d50c50e34bc377a90431a69a5.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0036.glb
Normal file
45
world/generation/chunks/assets/chunk_0036.glb.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://c005rpmfnc8af"
|
||||
path="res://.godot/imported/chunk_0036.glb-36b04f9c2ce7f32bcbb76f4287e5b3aa.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0036.glb"
|
||||
dest_files=["res://.godot/imported/chunk_0036.glb-36b04f9c2ce7f32bcbb76f4287e5b3aa.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
world/generation/chunks/assets/chunk_0036_cliff_wall.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://be7duf8cxv1dt"
|
||||
path.s3tc="res://.godot/imported/chunk_0036_cliff_wall.png-b0aeca8dd67e5918b04f4e62418713f0.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0036_cliff_wall.png-b0aeca8dd67e5918b04f4e62418713f0.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "fc97184f537cc23f83a731327e10c836"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0036_cliff_wall.png"
|
||||
dest_files=["res://.godot/imported/chunk_0036_cliff_wall.png-b0aeca8dd67e5918b04f4e62418713f0.s3tc.ctex", "res://.godot/imported/chunk_0036_cliff_wall.png-b0aeca8dd67e5918b04f4e62418713f0.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0036_dirt.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
45
world/generation/chunks/assets/chunk_0036_dirt.png.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://tb7yncykrheo"
|
||||
path.s3tc="res://.godot/imported/chunk_0036_dirt.png-38c14a27c0e4c7f325f880966042443b.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0036_dirt.png-38c14a27c0e4c7f325f880966042443b.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "07d90b3c46a4c3d0c172bed143dc9436"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0036_dirt.png"
|
||||
dest_files=["res://.godot/imported/chunk_0036_dirt.png-38c14a27c0e4c7f325f880966042443b.s3tc.ctex", "res://.godot/imported/chunk_0036_dirt.png-38c14a27c0e4c7f325f880966042443b.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0036_grass_lite.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dp728huemli1l"
|
||||
path.s3tc="res://.godot/imported/chunk_0036_grass_lite.png-3b0265ab9b8f49ff9ebe9e3c8c2d581c.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0036_grass_lite.png-3b0265ab9b8f49ff9ebe9e3c8c2d581c.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "4dc1ac400d85d9b3e4f43a5af0a38ed4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0036_grass_lite.png"
|
||||
dest_files=["res://.godot/imported/chunk_0036_grass_lite.png-3b0265ab9b8f49ff9ebe9e3c8c2d581c.s3tc.ctex", "res://.godot/imported/chunk_0036_grass_lite.png-3b0265ab9b8f49ff9ebe9e3c8c2d581c.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0037.glb
Normal file
45
world/generation/chunks/assets/chunk_0037.glb.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cbvyhqj5lfy2h"
|
||||
path="res://.godot/imported/chunk_0037.glb-6c483e5e2d770b53845b998f0cb7153d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0037.glb"
|
||||
dest_files=["res://.godot/imported/chunk_0037.glb-6c483e5e2d770b53845b998f0cb7153d.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
mesh_library/use_node_names_as_mesh_names=false
|
||||
array_mesh/deduplicate_surfaces=true
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
BIN
world/generation/chunks/assets/chunk_0037_cliff_wall.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://n0eputww5tlq"
|
||||
path.s3tc="res://.godot/imported/chunk_0037_cliff_wall.png-0a403a214126258c4e4c342f3ca37abc.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0037_cliff_wall.png-0a403a214126258c4e4c342f3ca37abc.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "fc97184f537cc23f83a731327e10c836"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0037_cliff_wall.png"
|
||||
dest_files=["res://.godot/imported/chunk_0037_cliff_wall.png-0a403a214126258c4e4c342f3ca37abc.s3tc.ctex", "res://.godot/imported/chunk_0037_cliff_wall.png-0a403a214126258c4e4c342f3ca37abc.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0037_dirt.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
45
world/generation/chunks/assets/chunk_0037_dirt.png.import
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cie8oie0c845v"
|
||||
path.s3tc="res://.godot/imported/chunk_0037_dirt.png-19715c4c1848faa763210a57f6770bc8.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0037_dirt.png-19715c4c1848faa763210a57f6770bc8.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "07d90b3c46a4c3d0c172bed143dc9436"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0037_dirt.png"
|
||||
dest_files=["res://.godot/imported/chunk_0037_dirt.png-19715c4c1848faa763210a57f6770bc8.s3tc.ctex", "res://.godot/imported/chunk_0037_dirt.png-19715c4c1848faa763210a57f6770bc8.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
BIN
world/generation/chunks/assets/chunk_0037_grass_lite.png
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
|
@ -0,0 +1,45 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b8ofl5u3qo5ku"
|
||||
path.s3tc="res://.godot/imported/chunk_0037_grass_lite.png-54ca324ca08bbf565871368a2502c758.s3tc.ctex"
|
||||
path.etc2="res://.godot/imported/chunk_0037_grass_lite.png-54ca324ca08bbf565871368a2502c758.etc2.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "4dc1ac400d85d9b3e4f43a5af0a38ed4"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://world/generation/chunks/assets/chunk_0037_grass_lite.png"
|
||||
dest_files=["res://.godot/imported/chunk_0037_grass_lite.png-54ca324ca08bbf565871368a2502c758.s3tc.ctex", "res://.godot/imported/chunk_0037_grass_lite.png-54ca324ca08bbf565871368a2502c758.etc2.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
22
world/generation/chunks/definitions/chunk_0033.tres
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
[gd_resource type="Resource" script_class="TerrainChunkDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://world/generation/terrain_chunk_definition.gd" id="1_definition"]
|
||||
[ext_resource type="PackedScene" path="res://world/generation/chunks/assets/chunk_0033.glb" id="2_scene"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_definition")
|
||||
stable_id = &"chunk_0033"
|
||||
label = "river bend c"
|
||||
packed_scene = ExtResource("2_scene")
|
||||
primary_mesh_name = &"chunk_0033"
|
||||
participates_in_base_solver = false
|
||||
selection_weight = 0.1
|
||||
maximum_placements = 1
|
||||
tags = PackedStringArray("land", "walkable", "fresh_water", "river", "river_bend", "river_bend_c", "flowing")
|
||||
allowed_neighbor_tags = PackedStringArray("grass")
|
||||
preferred_neighbor_tags = PackedStringArray("grass", "fresh_water", "river")
|
||||
must_be_interior = true
|
||||
water_inlet_edges = 15
|
||||
water_outlet_edges = 15
|
||||
continuous_water_seam_edges = 15
|
||||
water_surface_polygon = PackedVector2Array(-5, -5, 5, -5, 5, 5, -5, 5)
|
||||
25
world/generation/chunks/definitions/chunk_0034.tres
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
[gd_resource type="Resource" script_class="TerrainChunkDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://world/generation/terrain_chunk_definition.gd" id="1_definition"]
|
||||
[ext_resource type="PackedScene" path="res://world/generation/chunks/assets/chunk_0034.glb" id="2_scene"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_definition")
|
||||
stable_id = &"chunk_0034"
|
||||
label = "river bend b"
|
||||
packed_scene = ExtResource("2_scene")
|
||||
primary_mesh_name = &"chunk_0034"
|
||||
participates_in_base_solver = false
|
||||
selection_weight = 0.1
|
||||
maximum_placements = 1
|
||||
tags = PackedStringArray("land", "walkable", "grass", "flat", "spawn_safe", "fresh_water", "river", "river_border", "river_bend", "river_bend_b", "flowing")
|
||||
allowed_neighbor_tags = PackedStringArray("grass")
|
||||
north_allowed_neighbor_tags = PackedStringArray("grass")
|
||||
east_allowed_neighbor_tags = PackedStringArray("grass")
|
||||
north_surface_tags = PackedStringArray("grass")
|
||||
east_surface_tags = PackedStringArray("grass")
|
||||
preferred_neighbor_tags = PackedStringArray("grass", "fresh_water", "river")
|
||||
must_be_interior = true
|
||||
water_inlet_edges = 12
|
||||
water_outlet_edges = 12
|
||||
water_surface_polygon = PackedVector2Array(2.078653, 1.417459, 0.873861, -3.316683, -0.954994, -3.086828, -2.030681, -3.440039, -3.172947, -3.869164, -4.197278, -3.878055, -5, -4.499509, -5, 5, 1.25, 5)
|
||||
23
world/generation/chunks/definitions/chunk_0035.tres
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
[gd_resource type="Resource" script_class="TerrainChunkDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://world/generation/terrain_chunk_definition.gd" id="1_definition"]
|
||||
[ext_resource type="PackedScene" path="res://world/generation/chunks/assets/chunk_0035.glb" id="2_scene"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_definition")
|
||||
stable_id = &"chunk_0035"
|
||||
label = "river bend a"
|
||||
packed_scene = ExtResource("2_scene")
|
||||
primary_mesh_name = &"chunk_0035"
|
||||
participates_in_base_solver = false
|
||||
selection_weight = 0.1
|
||||
maximum_placements = 1
|
||||
tags = PackedStringArray("land", "walkable", "grass", "flat", "spawn_safe", "fresh_water", "river", "river_border", "river_bend", "river_bend_a", "flowing")
|
||||
allowed_neighbor_tags = PackedStringArray("grass")
|
||||
north_allowed_neighbor_tags = PackedStringArray("grass")
|
||||
north_surface_tags = PackedStringArray("grass")
|
||||
preferred_neighbor_tags = PackedStringArray("grass", "fresh_water", "river")
|
||||
must_be_interior = true
|
||||
water_inlet_edges = 14
|
||||
water_outlet_edges = 14
|
||||
water_surface_polygon = PackedVector2Array(-5, -4.619923, -4.19697, -4.000163, -3.172378, -3.982254, -2.030086, -3.55834, -0.95432, -3.220759, 0.874552, -3.454032, 2.118941, -3.669504, 2.931416, -3.612123, 3.664019, -3.974483, 4.456637, -4.104719, 5, -4.619923, 5, 5, -5, 5)
|
||||
24
world/generation/chunks/definitions/chunk_0036.tres
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
[gd_resource type="Resource" script_class="TerrainChunkDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://world/generation/terrain_chunk_definition.gd" id="1_definition"]
|
||||
[ext_resource type="PackedScene" path="res://world/generation/chunks/assets/chunk_0036.glb" id="2_scene"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_definition")
|
||||
stable_id = &"chunk_0036"
|
||||
label = "river bend d"
|
||||
packed_scene = ExtResource("2_scene")
|
||||
primary_mesh_name = &"chunk_0036"
|
||||
participates_in_base_solver = false
|
||||
selection_weight = 0.1
|
||||
maximum_placements = 1
|
||||
tags = PackedStringArray("land", "walkable", "grass", "flat", "spawn_safe", "fresh_water", "river", "river_border", "river_bend", "river_bend_d", "flowing")
|
||||
allowed_neighbor_tags = PackedStringArray("grass")
|
||||
east_allowed_neighbor_tags = PackedStringArray("grass")
|
||||
east_surface_tags = PackedStringArray("grass")
|
||||
preferred_neighbor_tags = PackedStringArray("grass", "fresh_water", "river")
|
||||
must_be_interior = true
|
||||
water_inlet_edges = 13
|
||||
water_outlet_edges = 13
|
||||
continuous_water_seam_edges = 1
|
||||
water_surface_polygon = PackedVector2Array(-5, -5, 2.057564, -5, 2.087937, -3.582541, 2.118311, -2.165082, 2.191291, -1.52149, 2.264271, -0.877898, 2.078653, 1.417459, 2.734523, 3.269125, 4.489859, 5, -5, 5)
|
||||
22
world/generation/chunks/definitions/chunk_0037.tres
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
[gd_resource type="Resource" script_class="TerrainChunkDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://world/generation/terrain_chunk_definition.gd" id="1_definition"]
|
||||
[ext_resource type="PackedScene" path="res://world/generation/chunks/assets/chunk_0037.glb" id="2_scene"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_definition")
|
||||
stable_id = &"chunk_0037"
|
||||
label = "lake edge variant"
|
||||
packed_scene = ExtResource("2_scene")
|
||||
primary_mesh_name = &"chunk_0037"
|
||||
participates_in_base_solver = false
|
||||
selection_weight = 0.2
|
||||
maximum_placements = 16
|
||||
tags = PackedStringArray("land", "walkable", "grass", "flat", "spawn_safe", "fresh_water", "lake", "lake_border")
|
||||
allowed_neighbor_tags = PackedStringArray("grass")
|
||||
preferred_neighbor_tags = PackedStringArray("grass", "fresh_water", "lake")
|
||||
must_be_interior = true
|
||||
water_inlet_edges = 7
|
||||
water_outlet_edges = 7
|
||||
water_surface_size = Vector2(6.3, 10)
|
||||
water_surface_offset = Vector2(1.85, 0)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_resource type="Resource" script_class="TerrainChunkCatalog" load_steps=42 format=3]
|
||||
[gd_resource type="Resource" script_class="TerrainChunkCatalog" load_steps=47 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://world/generation/terrain_chunk_catalog.gd" id="1_catalog"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0000.tres" id="2_grass"]
|
||||
|
|
@ -37,6 +37,11 @@
|
|||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0030.tres" id="39_river_source_left"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0031.tres" id="40_river_outlet_right"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0032.tres" id="41_river_outlet_left"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0033.tres" id="42_river_bend_c"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0034.tres" id="43_river_bend_b"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0035.tres" id="44_river_bend_a"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0036.tres" id="45_river_bend_d"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_0037.tres" id="46_lake_edge_variant"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_9999.tres" id="21_cliff_sea_transition_right"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_9998.tres" id="22_cliff_sea_transition_left"]
|
||||
[ext_resource type="Resource" path="res://world/generation/chunks/definitions/chunk_9997.tres" id="23_cliff_beach_transition_right"]
|
||||
|
|
@ -45,4 +50,4 @@
|
|||
[resource]
|
||||
script = ExtResource("1_catalog")
|
||||
chunk_size = 10.0
|
||||
definitions = Array[ExtResource("7_definition_script")]([ExtResource("2_grass"), ExtResource("3_sand"), ExtResource("4_beach"), ExtResource("5_stream"), ExtResource("20_stream_variant"), ExtResource("6_pond"), ExtResource("25_lake_edge"), ExtResource("26_lake_corner"), ExtResource("27_lake_fill"), ExtResource("28_lake_diagonal"), ExtResource("29_lake_narrow"), ExtResource("30_lake_regular_to_narrow"), ExtResource("31_lake_narrow_to_regular"), ExtResource("32_river_edge"), ExtResource("33_river_edge_variant"), ExtResource("38_river_source_right"), ExtResource("39_river_source_left"), ExtResource("40_river_outlet_right"), ExtResource("41_river_outlet_left"), ExtResource("34_river_cap"), ExtResource("9_grass_ocean_edge"), ExtResource("10_grass_beach_transition"), ExtResource("11_grass_ocean_corner"), ExtResource("12_beach_ocean_corner"), ExtResource("17_grass_sand_diagonal"), ExtResource("13_cliff_top"), ExtResource("14_cliff_corner"), ExtResource("15_cliff_edge"), ExtResource("16_cliff_ramp"), ExtResource("35_cliff_third_tier_edge"), ExtResource("36_cliff_third_tier_corner"), ExtResource("37_cliff_third_tier_top"), ExtResource("18_cliff_sea_edge"), ExtResource("19_cliff_sea_corner"), ExtResource("21_cliff_sea_transition_right"), ExtResource("22_cliff_sea_transition_left"), ExtResource("23_cliff_beach_transition_right"), ExtResource("24_cliff_beach_transition_left"), ExtResource("8_spawn")])
|
||||
definitions = Array[ExtResource("7_definition_script")]([ExtResource("2_grass"), ExtResource("3_sand"), ExtResource("4_beach"), ExtResource("5_stream"), ExtResource("20_stream_variant"), ExtResource("6_pond"), ExtResource("25_lake_edge"), ExtResource("46_lake_edge_variant"), ExtResource("26_lake_corner"), ExtResource("27_lake_fill"), ExtResource("28_lake_diagonal"), ExtResource("29_lake_narrow"), ExtResource("30_lake_regular_to_narrow"), ExtResource("31_lake_narrow_to_regular"), ExtResource("32_river_edge"), ExtResource("33_river_edge_variant"), ExtResource("38_river_source_right"), ExtResource("39_river_source_left"), ExtResource("40_river_outlet_right"), ExtResource("41_river_outlet_left"), ExtResource("42_river_bend_c"), ExtResource("43_river_bend_b"), ExtResource("44_river_bend_a"), ExtResource("45_river_bend_d"), ExtResource("34_river_cap"), ExtResource("9_grass_ocean_edge"), ExtResource("10_grass_beach_transition"), ExtResource("11_grass_ocean_corner"), ExtResource("12_beach_ocean_corner"), ExtResource("17_grass_sand_diagonal"), ExtResource("13_cliff_top"), ExtResource("14_cliff_corner"), ExtResource("15_cliff_edge"), ExtResource("16_cliff_ramp"), ExtResource("35_cliff_third_tier_edge"), ExtResource("36_cliff_third_tier_corner"), ExtResource("37_cliff_third_tier_top"), ExtResource("18_cliff_sea_edge"), ExtResource("19_cliff_sea_corner"), ExtResource("21_cliff_sea_transition_right"), ExtResource("22_cliff_sea_transition_left"), ExtResource("23_cliff_beach_transition_right"), ExtResource("24_cliff_beach_transition_left"), ExtResource("8_spawn")])
|
||||
|
|
|
|||
|
|
@ -69,6 +69,19 @@ func validation_errors() -> PackedStringArray:
|
|||
% definition.stable_id
|
||||
)
|
||||
var has_fresh_water := "fresh_water" in definition.tags
|
||||
var water_connector_edges := (
|
||||
definition.water_inlet_edges | definition.water_outlet_edges
|
||||
)
|
||||
if (
|
||||
definition.continuous_water_seam_edges
|
||||
& ~water_connector_edges
|
||||
) != 0:
|
||||
errors.append(
|
||||
(
|
||||
"%s relaxes a continuous-water seam on an edge without "
|
||||
+ "a water connector."
|
||||
) % definition.stable_id
|
||||
)
|
||||
var has_rectangular_water_footprint := (
|
||||
definition.water_surface_size.x > 0.0
|
||||
and definition.water_surface_size.y > 0.0
|
||||
|
|
|
|||
|
|
@ -92,6 +92,12 @@ var edge_profile_tolerance_override := 0.0
|
|||
@export_flags("North", "East", "South", "West") var buried_cliff_seam_edges := 0
|
||||
@export_flags("North", "East", "South", "West") var water_inlet_edges := 0
|
||||
@export_flags("North", "East", "South", "West") var water_outlet_edges := 0
|
||||
## Authored multi-cell water assemblies may deliberately carry a broad,
|
||||
## continuous channel across a seam whose bank control points do not match
|
||||
## one-for-one. These edges relax only the height-profile comparison; both
|
||||
## neighboring edges must still expose compatible water connectors.
|
||||
@export_flags("North", "East", "South", "West")
|
||||
var continuous_water_seam_edges := 0
|
||||
## Optional generated water footprint in the chunk's unrotated local X/Z plane.
|
||||
## Zero means this chunk contributes no standalone water surface.
|
||||
@export var water_surface_size := Vector2.ZERO
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ func topology_signature(quantization: float) -> String:
|
|||
|
||||
func constraint_signature(quantization: float) -> String:
|
||||
return (
|
||||
"%s|neighbors:%s|surfaces:%s|ocean:%d|buried:%d|in:%d|out:%d"
|
||||
"%s|neighbors:%s|surfaces:%s|ocean:%d|buried:%d|in:%d|out:%d|water_seam:%d"
|
||||
% [
|
||||
topology_signature(quantization),
|
||||
_neighbor_rule_signature(),
|
||||
|
|
@ -58,6 +58,7 @@ func constraint_signature(quantization: float) -> String:
|
|||
rotated_edge_mask(definition.buried_cliff_seam_edges),
|
||||
rotated_edge_mask(definition.water_inlet_edges),
|
||||
rotated_edge_mask(definition.water_outlet_edges),
|
||||
rotated_edge_mask(definition.continuous_water_seam_edges),
|
||||
]
|
||||
)
|
||||
|
||||
|
|
|
|||