-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworkers_utils.py
More file actions
135 lines (122 loc) · 6.65 KB
/
workers_utils.py
File metadata and controls
135 lines (122 loc) · 6.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
"""Helper functions to build parameter dictionaries for worker threads.
These functions extract values from the UI (MainWindow instance) so the UI code is smaller.
"""
from typing import Dict
def build_noise_params(win) -> Dict:
return {
'noise_type': win.noise_type.currentText(),
'preview_res': int(getattr(win, '_noise_preview_res', 256)),
'scale': float(win.scale_spin.value()),
'seed': int(win.seed_spin.value()),
'octaves': int(win.octaves_spin.value()),
'persistence': float(win.persistence_spin.value()),
'lacunarity': float(win.lacunarity_spin.value()),
'focus_x': getattr(win, 'focus_x', 0.5),
'focus_y': getattr(win, 'focus_y', 0.5),
'min_height': float(win.min_height_spin.value()),
'max_height': float(win.max_height_spin.value()),
'use_noise_grass': bool(win.use_noise_grass_cb.isChecked()),
'grass_amount': int(win.grass_amount_spin.value()),
'special_value': int(win.special_value_spin.value()),
'grass_noise_octaves': int(win.grass_noise_octaves.value()),
'grass_noise_persistence': float(win.grass_noise_persistence.value()),
'grass_noise_scale': float(win.grass_noise_scale.value()),
'noise_grass_density': float(win.noise_grass_density.value()),
'canyon_strength': float(win.canyon_strength_spin.value()),
'canyon_length': float(win.canyon_length_spin.value()),
'canyon_branch_density': float(win.canyon_branch_density_spin.value()),
'canyon_count': int(win.canyon_count_spin.value()),
'canyon_seed': int(win.canyon_seed_spin.value()),
'vignette_strength': float(win.vignette_strength_spin.value()),
'vignette_radius': float(win.vignette_radius_spin.value()),
}
def build_grass_params(win) -> Dict:
params = {
'size': int(win.grass_size.value()),
'preview_res': int(getattr(win, '_grass_preview_res', 256)),
'scale': float(win.grass_scale_spin.value()),
'seed': int(win.grass_seed_spin.value()),
'focus_x': getattr(win, 'grass_focus_x', 0.5),
'focus_y': getattr(win, 'grass_focus_y', 0.5),
# Grass-specific parameters
'density': float(win.grass_density_spin.value()),
'perlin_amount': float(win.perlin_noise_amount_spin.value()),
'simple_amount': float(win.simple_noise_amount_spin.value()),
'lightness': float(win.lightness_spin.value()),
}
return params
def build_land_params(win, preview: bool = True) -> Dict:
# For preview, cap size and octaves as UI previously did
size = int(min(win.land_size.value(), getattr(win, '_preview_res', 256))) if preview else int(win.land_size.value())
octaves = int(min(win.land_octaves.value(), 5)) if preview else int(win.land_octaves.value())
params = {
'size': size,
'land_proportion': float(win.land_proportion.value()),
'plain_factor': float(win.plain_factor.value()),
'shore_height': float(win.shore_height.value()),
'focus_x': getattr(win, 'focus_x', 0.5),
'focus_y': getattr(win, 'focus_y', 0.5),
'octaves': octaves,
'seed': int(win.land_seed.value()),
'is_preview': bool(preview),
'noise_scale': float(win.land_noise_scale.value()),
}
# For preview, include heightmap parameters for coloring
if preview:
params.update({
# Use land-specific min/max height controls if present, otherwise fall back to global noise controls
'min_height': float(getattr(win, 'land_min_height_spin', win.min_height_spin).value()),
'max_height': float(getattr(win, 'land_max_height_spin', win.max_height_spin).value()),
'canyon_strength': float(win.canyon_strength_spin.value()),
'canyon_length': float(win.canyon_length_spin.value()),
'canyon_branch_density': float(win.canyon_branch_density_spin.value()),
'canyon_count': int(win.canyon_count_spin.value()),
'canyon_seed': int(win.canyon_seed_spin.value()),
'vignette_strength': float(win.vignette_strength_spin.value()),
'vignette_radius': float(win.vignette_radius_spin.value()),
'use_noise_grass': bool(win.use_noise_grass_cb.isChecked()),
'grass_amount': int(win.grass_amount_spin.value()),
'special_value': int(win.special_value_spin.value()),
'grass_noise_octaves': int(win.grass_noise_octaves.value()),
'grass_noise_persistence': float(win.grass_noise_persistence.value()),
'grass_noise_scale': float(win.grass_noise_scale.value()),
'noise_grass_density': float(win.noise_grass_density.value()),
})
return params
def build_image_params(win) -> Dict:
return {
'red_channel_value': float(win.red_channel_value.value()),
'red_lightness': float(win.red_lightness.value()),
'invert_red': bool(win.invert_red.isChecked()),
'green_channel_value': float(win.green_channel_value.value()),
'gaussian_blur': float(win.gaussian_blur.value()),
}
def build_export_heightmap_params(win) -> Dict:
# Build params used by GenerateHeightmapWorker exports
return {
'size': int(win.size_spin.value()),
'noise_type': win.noise_type.currentText(),
'seed': int(win.seed_spin.value()),
'scale': float(win.scale_spin.value()),
'octaves': int(win.octaves_spin.value()),
'persistence': float(win.persistence_spin.value()),
'lacunarity': float(win.lacunarity_spin.value()),
'focus_x': float(getattr(win, 'focus_x', 0.5)),
'focus_y': float(getattr(win, 'focus_y', 0.5)),
'min_height': float(win.min_height_spin.value()),
'max_height': float(win.max_height_spin.value()),
'use_noise_grass': bool(win.use_noise_grass_cb.isChecked()),
'grass_amount': int(win.grass_amount_spin.value()),
'special_value': int(win.special_value_spin.value()),
'grass_noise_octaves': int(win.grass_noise_octaves.value()),
'grass_noise_persistence': float(win.grass_noise_persistence.value()),
'grass_noise_scale': float(win.grass_noise_scale.value()),
'noise_grass_density': float(win.noise_grass_density.value()),
'canyon_strength': float(win.canyon_strength_spin.value()),
'canyon_length': float(win.canyon_length_spin.value()),
'canyon_branch_density': float(win.canyon_branch_density_spin.value()),
'canyon_count': int(win.canyon_count_spin.value()),
'canyon_seed': int(win.canyon_seed_spin.value()),
'vignette_strength': float(win.vignette_strength_spin.value()),
'vignette_radius': float(win.vignette_radius_spin.value()),
}