forked from boku-ilen/landscapelab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLayer.gd
219 lines (159 loc) · 4.85 KB
/
Layer.gd
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
extends Resource
class_name Layer
#
# Does caching and some logic, is the basic resource for all other scenes that work with layers
#
var is_scored: bool = false
var is_visible: bool = true setget _set_visible
var name: String = "Not set"
var fields: Dictionary = {}
var color_tag: Color = Color.transparent
# NOTE: these RenderTypes have to be synchronous with the LL_render_types table in the geopackage except for NONE
enum RenderType {
NONE,
BASIC_TERRAIN,
REALISTIC_TERRAIN,
PARTICLES,
OBJECT,
PATH,
CONNECTED_OBJECT,
POLYGON,
VEGETATION,
TWODIMENSIONAL,
POLYGON_OBJECT
}
var render_type = RenderType.NONE
var render_info
var ui_info = UIInfo.new()
signal visibility_changed(visible)
signal layer_changed
signal refresh_view
func set_visible_quiet(visible: bool) -> void:
is_visible = visible
func is_valid():
return render_type == RenderType.NONE or (render_info and render_info.is_valid())
func _set_visible(visible: bool) -> void:
is_visible = visible
emit_signal("visibility_changed", is_visible)
# Implemented by child classes
func get_path():
pass
# Implemented by child classes
func get_name():
pass
class UIInfo:
var name_attribute
# RenderInfo data classes
class RenderInfo:
var lod = false
func get_geolayers() -> Array:
return []
func is_valid() -> bool:
return true
class BasicTerrainRenderInfo extends RenderInfo:
var height_layer: Layer
var texture_layer: Layer
# Data shading
var is_color_shaded: bool
var max_color: Color
var min_color: Color
var max_value: float
var min_value: float
var alpha: float
func get_geolayers():
return [height_layer, texture_layer]
func is_valid():
return height_layer != null and (is_color_shaded or texture_layer != null)
class RealisticTerrainRenderInfo extends RenderInfo:
var height_layer: Layer
var surface_height_layer: Layer
var texture_layer: Layer
var landuse_layer: Layer
# Road Network
var road_layer: Layer
var intersection_layer: Layer
var road_instance_scene: PackedScene
var intersection_instance_scene: PackedScene
func get_geolayers():
return [height_layer, surface_height_layer, texture_layer, landuse_layer]
func is_valid():
return height_layer and surface_height_layer and texture_layer and landuse_layer
class VegetationRenderInfo extends RenderInfo:
var height_layer: Layer
var landuse_layer: Layer
func get_geolayers():
return [height_layer, landuse_layer]
func is_valid():
return height_layer != null and landuse_layer != null
class ParticlesRenderInfo extends RenderInfo:
pass
class ObjectRenderInfo extends RenderInfo:
var object: PackedScene
var ground_height_layer: Layer
func get_geolayers():
return [ground_height_layer]
func is_valid():
return ground_height_layer != null
class WindTurbineRenderInfo extends ObjectRenderInfo:
var height_attribute_name
var diameter_attribute_name
class PolygonRenderInfo extends RenderInfo:
var height_attribute_name
var ground_height_layer: Layer
func get_geolayers():
return [ground_height_layer]
func is_valid():
return ground_height_layer != null
class BuildingRenderInfo extends PolygonRenderInfo:
var height_stdev_attribute_name
var slope_attribute_name
var red_attribute_name
var green_attribute_name
var blue_attribute_name
class PathRenderInfo extends RenderInfo:
var line_visualization: PackedScene
var ground_height_layer: Layer
func get_geolayers():
return [ground_height_layer]
func is_valid():
return ground_height_layer != null
class RoadNetworkRenderInfo extends RenderInfo:
var road_layer: Layer
var intersection_layer: Layer
var ground_height_layer: Layer
var road_instance_scene: PackedScene
var intersection_instance_scene: PackedScene
func get_geolayers():
return [ground_height_layer]
func is_valid():
return ground_height_layer != null
class ConnectedObjectInfo extends RenderInfo:
# The geodata-key-attribute that determines which connector/connection to use
var selector_attribute_name: String
# The specified connectors/connection attributes
# e.g. "minor-power-line": "LowVoltage.tscn", "power-line": "HighVoltage.tscn"
var connectors = {}
var connections = {}
# Should nothing be specified, take the fallbacks
var fallback_connector: PackedScene
var fallback_connection: PackedScene
var ground_height_layer: Layer
func get_geolayers():
return [ground_height_layer]
func is_valid():
return ground_height_layer != null
class TwoDimensionalInfo extends RenderInfo:
var texture_layer: Layer
func get_geolayers() -> Array:
return [texture_layer]
func is_valid() -> bool:
return texture_layer.is_valid()
class PolygonObjectInfo extends RenderInfo:
var polygon_layer: Layer
# "virtual" layer which serves solely for using gdal features
var object_layer: Layer
var object: PackedScene
var individual_rotation: float
var group_rotation: float
func get_geolayers() -> Array:
return [polygon_layer, object_layer]