Fix TerrainInstance size limits

This commit is contained in:
kayomn 2023-01-11 11:37:49 +00:00
parent 5c4ff2b4ca
commit 422361b278
3 changed files with 22 additions and 8 deletions

BIN
editor.scn (Stored with Git LFS)

Binary file not shown.

View File

@ -53,6 +53,15 @@ window/size/viewport_height=800
window/stretch/mode="canvas_items" window/stretch/mode="canvas_items"
window/stretch/aspect="keep_height" window/stretch/aspect="keep_height"
[editor]
version_control/plugin_name="GitPlugin"
version_control/autoload_on_startup=true
[editor_plugins]
enabled=PackedStringArray()
[input] [input]
player_controller_left={ player_controller_left={

View File

@ -1,6 +1,8 @@
@tool @tool
class_name TerrainInstance3D extends GeometryInstance3D class_name TerrainInstance3D extends GeometryInstance3D
const _TERRAIN_MAX := 1024
var _mesh := PlaneMesh.new() var _mesh := PlaneMesh.new()
var _material := ShaderMaterial.new() var _material := ShaderMaterial.new()
@ -14,18 +16,22 @@ var size: Vector2i = Vector2i.ZERO:
return size return size
set(value): set(value):
var width := value.x var width := clampi(value.x, 0, _TERRAIN_MAX)
var height := value.y var height := clampi(value.y, 0, _TERRAIN_MAX)
if (width != 0) and (height != 0):
if (width != size.x) or (height != size.y): if (width != size.x) or (height != size.y):
if (width == 0) and (height == 0):
RenderingServer.instance_set_base(self.get_instance(), RID())
else:
self._mesh.subdivide_width = width self._mesh.subdivide_width = width
self._mesh.subdivide_depth = height self._mesh.subdivide_depth = height
self._mesh.size = value self._mesh.size = value
self._material.set_shader_parameter("SIZE", Vector2(value)) self._material.set_shader_parameter("SIZE", Vector2(value))
RenderingServer.instance_set_base(self.get_instance(), self._mesh)
size = value size = Vector2i(width, height)
## ##
## ##
@ -161,4 +167,3 @@ func _init() -> void:
self._material.shader = preload("res://terrain_shader.gdshader") self._material.shader = preload("res://terrain_shader.gdshader")
self._mesh.surface_set_material(0, self._material) self._mesh.surface_set_material(0, self._material)
RenderingServer.instance_set_base(self.get_instance(), self._mesh)