Skip to content

Commit 1f45b3d

Browse files
committed
slabset cfg format changes, & export preview
1 parent c612e86 commit 1f45b3d

12 files changed

+309
-43
lines changed

Autoload/Constants.gd

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
extends Node
2-
const VERSION = "0.39"
2+
const VERSION = "0.40"
33
const unearth_map_format_version:float = 1.05
44

55
const TILE_SIZE = 96

Autoload/Things.gd

+2-2
Original file line numberDiff line numberDiff line change
@@ -660,15 +660,15 @@ func look_for_images_to_load(DATA_ARRAY, objectID, thingCfgName):
660660
var err = img.load(dir.plus_file(realImageFilename))
661661
if err == OK:
662662
var tex = ImageTexture.new()
663-
tex.create_from_image(img, Texture.FLAG_MIPMAPS)
663+
tex.create_from_image(img, Texture.FLAG_MIPMAPS+Texture.FLAG_ANISOTROPIC_FILTER)
664664
DATA_ARRAY[objectID][TEXTURE] = tex
665665

666666
if realPortraitFilename != "":
667667
var img = Image.new()
668668
var err = img.load(dir.plus_file(realPortraitFilename))
669669
if err == OK:
670670
var tex = ImageTexture.new()
671-
tex.create_from_image(img, Texture.FLAG_MIPMAPS)
671+
tex.create_from_image(img, Texture.FLAG_MIPMAPS+Texture.FLAG_ANISOTROPIC_FILTER)
672672
DATA_ARRAY[objectID][PORTRAIT] = tex
673673

674674

Scenes/CurrentTextures.gd

+2-2
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ func convert_img_to_two_texture_arrays(img):
187187
var ySlices = 34
188188
var sliceWidth = 32 #img.get_width() / xSlices;
189189
var sliceHeight = 32 #img.get_height() / ySlices;
190-
twoTextureArrays[0].create(sliceWidth, sliceHeight, xSlices*ySlices, IMAGE_FORMAT, TextureLayered.FLAG_MIPMAPS)
191-
twoTextureArrays[1].create(sliceWidth, sliceHeight, xSlices*ySlices, IMAGE_FORMAT, TextureLayered.FLAG_MIPMAPS)
190+
twoTextureArrays[0].create(sliceWidth, sliceHeight, xSlices*ySlices, IMAGE_FORMAT, TextureLayered.FLAG_MIPMAPS+TextureLayered.FLAG_ANISOTROPIC_FILTER)
191+
twoTextureArrays[1].create(sliceWidth, sliceHeight, xSlices*ySlices, IMAGE_FORMAT, TextureLayered.FLAG_MIPMAPS+TextureLayered.FLAG_ANISOTROPIC_FILTER)
192192

193193
for i in 2:
194194
var yOffset = 0

Scenes/ExportPreview.gd

+162
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
extends WindowDialog
2+
onready var oPlayer = Nodelist.list["oPlayer"]
3+
onready var oSavePreviewMipmapsCheckbox = Nodelist.list["oSavePreviewMipmapsCheckbox"]
4+
onready var oSavePreviewPngButton = Nodelist.list["oSavePreviewPngButton"]
5+
onready var oSavePreviewTrimBlackCheckbox = Nodelist.list["oSavePreviewTrimBlackCheckbox"]
6+
onready var oSavePreviewMsaaSlider = Nodelist.list["oSavePreviewMsaaSlider"]
7+
8+
onready var oMenu = Nodelist.list["oMenu"]
9+
onready var oGenerateTerrain = Nodelist.list["oGenerateTerrain"]
10+
onready var oUi = Nodelist.list["oUi"]
11+
onready var oCamera3D = Nodelist.list["oCamera3D"]
12+
onready var oExportPreviewPngDialog = Nodelist.list["oExportPreviewPngDialog"]
13+
onready var oCurrentMap = Nodelist.list["oCurrentMap"]
14+
onready var oMessage = Nodelist.list["oMessage"]
15+
onready var oEditor = Nodelist.list["oEditor"]
16+
onready var oUiMessages = Nodelist.list["oUiMessages"]
17+
onready var oUiSystem = Nodelist.list["oUiSystem"]
18+
onready var oUiTools = Nodelist.list["oUiTools"]
19+
onready var oUi3D = Nodelist.list["oUi3D"]
20+
onready var oGame3D = Nodelist.list["oGame3D"]
21+
22+
var remember_original_msaa
23+
24+
func _on_ExportPreview_about_to_show():
25+
# Store the previous MSAA value
26+
remember_original_msaa = get_viewport().msaa
27+
modulate.a = 0
28+
# Generate
29+
oEditor.set_view_3d()
30+
oGenerateTerrain.start()
31+
oPlayer.switch_camera_type(0)
32+
oUiMessages.visible = false
33+
oUiSystem.visible = false
34+
oUiTools.visible = false
35+
oUi.hide_tools()
36+
oUi3D.visible = false
37+
yield(oGenerateTerrain, "terrain_finished_generating")
38+
modulate.a = 1.0
39+
_on_SavePreviewMipmapsCheckbox_toggled(oSavePreviewMipmapsCheckbox.pressed)
40+
_on_SavePreviewMsaaSlider_sliderChanged()
41+
set_basic_camera_stuff()
42+
43+
func _on_ExportPreview_hide():
44+
if is_instance_valid(oEditor) and modulate.a == 1.0:
45+
oEditor.set_view_2d()
46+
oUiMessages.visible = true
47+
oUiSystem.visible = true
48+
oUiTools.visible = true
49+
oUi3D.visible = true
50+
oGame3D.enable_or_disable_mipmaps_on_all_materials(1)
51+
get_viewport().msaa = remember_original_msaa
52+
53+
func set_basic_camera_stuff():
54+
# Set camera
55+
oPlayer.velocity = Vector3(0, 0, 0) # stop moving
56+
oCamera3D.projection = Camera.PROJECTION_ORTHOGONAL
57+
58+
var terrain_size = Vector2(M.xSize * 3, M.ySize * 3)
59+
var terrain_center = terrain_size / 2.0
60+
61+
# Orthogonal camera position and rotation
62+
oPlayer.rotation_degrees = Vector3(270, 0, 0) #Vector2(270, 45, 0)
63+
oPlayer.oHead.rotation_degrees = Vector3(0, 0, 0)
64+
65+
oPlayer.translation = Vector3(terrain_center.x, 100, terrain_center.y)
66+
67+
# Calculate the window's aspect ratio
68+
var window_aspect_ratio = OS.window_size.x / OS.window_size.y
69+
70+
# Zoom out based on the dominant dimension
71+
if window_aspect_ratio > 1: # Landscape mode
72+
oCamera3D.size = terrain_size.x * window_aspect_ratio
73+
else: # Portrait mode
74+
oCamera3D.size = terrain_size.y
75+
76+
oCamera3D.set_orthogonal(oCamera3D.size, 0.01, 8192)
77+
78+
func _on_SavePreviewPngButton_pressed():
79+
Utils.popup_centered(oExportPreviewPngDialog)
80+
oExportPreviewPngDialog.current_dir = Settings.unearth_path
81+
oExportPreviewPngDialog.current_path = Settings.unearth_path
82+
oExportPreviewPngDialog.current_file = oCurrentMap.path.get_file()
83+
84+
func _on_ExportPreviewPngDialog_file_selected(save_path):
85+
# Be sure the rendering is updated
86+
modulate.a = 0.0
87+
yield(get_tree(), "idle_frame")
88+
VisualServer.force_draw()
89+
90+
# Capture the current viewport's texture
91+
var viewport_texture = get_viewport().get_texture()
92+
93+
var img = viewport_texture.get_data()
94+
img.flip_y() # Image is flipped vertically, correct this
95+
96+
if oSavePreviewTrimBlackCheckbox.pressed == true:
97+
# Trim the black pixels from the outside of the image
98+
img = trim_image(img)
99+
100+
# Resize to new size
101+
#trimmed_img.resize(256, 256, Image.INTERPOLATE_LANCZOS)
102+
103+
# Save as a PNG file
104+
img.save_png(save_path)
105+
106+
oMessage.quick("Saved preview to:" + save_path)
107+
modulate.a = 1.0
108+
109+
110+
func is_near_black(pixel: Color, tolerance: float = 0.01) -> bool:
111+
return (pixel.r < tolerance and pixel.g < tolerance and pixel.b < tolerance)
112+
113+
func trim_image(img : Image) -> Image:
114+
img.lock()
115+
116+
var left = img.get_width()
117+
var right = 0
118+
var top = img.get_height()
119+
var bottom = 0
120+
121+
for i in range(img.get_width()):
122+
for j in range(img.get_height()):
123+
var pixel = img.get_pixel(i, j)
124+
if not is_near_black(pixel):
125+
left = min(left, i)
126+
right = max(right, i)
127+
top = min(top, j)
128+
bottom = max(bottom, j)
129+
130+
img.unlock()
131+
132+
# Check if the image was all black or nearly all black and couldn't be trimmed
133+
if left > right or top > bottom:
134+
print("Image couldn't be trimmed!")
135+
136+
var trim_x = left
137+
var trim_y = top
138+
var trim_width = right - left + 1
139+
var trim_height = bottom - top + 1
140+
141+
# Extract the non-black rectangle
142+
var trimmed_img = img.get_rect(Rect2(trim_x, trim_y, trim_width, trim_height))
143+
144+
# Debugging messages
145+
print("Original Image Dimensions: %sx%s" % [img.get_width(), img.get_height()])
146+
print("Trimmed Image Dimensions: %sx%s" % [trimmed_img.get_width(), trimmed_img.get_height()])
147+
148+
return trimmed_img
149+
150+
func _on_SavePreviewMsaaSlider_sliderChanged():
151+
match int(oSavePreviewMsaaSlider.value):
152+
0: get_viewport().msaa = Viewport.MSAA_DISABLED
153+
1: get_viewport().msaa = Viewport.MSAA_2X
154+
2: get_viewport().msaa = Viewport.MSAA_4X
155+
3: get_viewport().msaa = Viewport.MSAA_8X
156+
4: get_viewport().msaa = Viewport.MSAA_16X
157+
158+
func _on_SavePreviewMipmapsCheckbox_toggled(button_pressed):
159+
if button_pressed == true:
160+
oGame3D.enable_or_disable_mipmaps_on_all_materials(1)
161+
else:
162+
oGame3D.enable_or_disable_mipmaps_on_all_materials(0)

Scenes/GenerateTerrain.gd

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ onready var oDataSlx = Nodelist.list["oDataSlx"]
77
onready var oTextureCache = Nodelist.list["oTextureCache"]
88
onready var oDataClm = Nodelist.list["oDataClm"]
99

10+
signal terrain_finished_generating
1011

1112
func start():
1213
var CODETIME_START = OS.get_ticks_msec()
@@ -55,6 +56,7 @@ func start():
5556

5657
oTerrainMesh.mesh = oVoxelGen.complete_slx_mesh(arrayOfArrays)
5758
print('Codetime: ' + str(OS.get_ticks_msec() - CODETIME_START) + 'ms')
59+
emit_signal("terrain_finished_generating")
5860

5961
func loading_bar_start():
6062
oLoadingBar.visible = true

0 commit comments

Comments
 (0)