update
This commit is contained in:
@@ -8,7 +8,8 @@ const WALL_SEGS := 20 ## Bandensegmente - Godot kennt keinen hohlen Zylin
|
||||
const WALL_H := 0.55 ## unsichtbare Begrenzung, damit nichts herausspringt
|
||||
const SEAT_ARC := ZONE_RAD * 2.0 + 0.85 ## Bogenlänge, die ein Platz am Tischrand braucht
|
||||
const MIN_ZONE_R := 1.15
|
||||
const Stoffe = preload("res://scripts/stoffe.gd") ## Holz, Filz, Messing aus Rauschen
|
||||
const Stoffe = preload("res://scripts/stoffe.gd") ## Materialien aus Regeln, ohne Dateien
|
||||
const Formen = preload("res://scripts/formen.gd") ## Becher, Fass, Laterne aus Primitiven
|
||||
const RIM_RUHE := Color(0.22, 0.15, 0.09) ## Zonenrand, wenn der Platz wartet
|
||||
const RIM_ZUG := Color(0.85, 0.66, 0.22) ## Zonenrand des Platzes, der dran ist
|
||||
const TILT_DEG := 15.0 ## Neigung der Kamera gegen die Senkrechte
|
||||
@@ -33,7 +34,7 @@ var plates: Array[Sprite3D] = []
|
||||
var rims: Array[MeshInstance3D] = [] ## Rand der Zone, leuchtet beim Zug
|
||||
var topf_muenzen: Dictionary = {} ## Wurfnummer -> Münze in der Tischmitte
|
||||
static var _muenz_mesh: CylinderMesh
|
||||
static var _muenz_mat: ShaderMaterial
|
||||
static var _muenz_mat: StandardMaterial3D
|
||||
var dice: Array = [] ## seat -> Array[Die]
|
||||
|
||||
var camera: Camera3D
|
||||
@@ -52,9 +53,19 @@ func build(count: int, local_index: int) -> void:
|
||||
for i in count:
|
||||
_build_seat(i)
|
||||
dice.append([])
|
||||
_deko()
|
||||
_build_camera()
|
||||
|
||||
|
||||
## Eine Laterne am Tischrand - weit genug draussen, dass sie keine Zone
|
||||
## verdeckt, nah genug, dass ihr Schein den Filz erreicht. Das Fass aus den
|
||||
## Formregeln bleibt weg: vom Boden aus ist es aus Kamerahöhe nur ein Fleck.
|
||||
func _deko() -> void:
|
||||
var laterne := Formen.laterne()
|
||||
laterne.position = Vector3(-(table_r + 0.35), TABLE_H, table_r * 0.55)
|
||||
add_child(laterne)
|
||||
|
||||
|
||||
func _build_room() -> void:
|
||||
var env := WorldEnvironment.new()
|
||||
var e := Environment.new()
|
||||
@@ -64,6 +75,10 @@ func _build_room() -> void:
|
||||
e.ambient_light_color = Color(0.35, 0.38, 0.45)
|
||||
e.ambient_light_energy = 1.1
|
||||
e.tonemap_mode = Environment.TONE_MAPPER_FILMIC
|
||||
e.glow_enabled = true
|
||||
e.glow_intensity = 0.45
|
||||
e.glow_bloom = 0.05
|
||||
e.glow_hdr_threshold = 0.9
|
||||
e.fog_enabled = true
|
||||
e.fog_light_color = Color(0.05, 0.06, 0.09)
|
||||
e.fog_density = 0.02
|
||||
@@ -81,6 +96,9 @@ func _build_room() -> void:
|
||||
lamp.shadow_enabled = true
|
||||
add_child(lamp)
|
||||
|
||||
# Kein sichtbarer Lampenschirm: die Kamera schaut fast senkrecht von oben,
|
||||
# alles über der Tischmitte hinge ihr vor der Linse.
|
||||
|
||||
var fill := DirectionalLight3D.new()
|
||||
fill.rotation_degrees = Vector3(-55, 35, 0)
|
||||
fill.light_energy = 0.25
|
||||
@@ -98,6 +116,8 @@ func _build_room() -> void:
|
||||
var fpm := PlaneMesh.new()
|
||||
fpm.size = Vector2(24, 24)
|
||||
floor_mi.mesh = fpm
|
||||
# Bewusst glatt und dunkel: eine Maserung auf der riesigen Fläche wird aus
|
||||
# Kamerahöhe zu Rauschen, und der Nebel soll den Boden ohnehin schlucken.
|
||||
floor_mi.material_override = _mat(Color(0.08, 0.07, 0.09), 0.9)
|
||||
floor_body.add_child(floor_mi)
|
||||
add_child(floor_body)
|
||||
@@ -118,7 +138,7 @@ func _build_room() -> void:
|
||||
tcm.height = 0.12
|
||||
tmi.mesh = tcm
|
||||
tmi.position = Vector3(0, TABLE_H - 0.06, 0)
|
||||
tmi.material_override = Stoffe.filz(Color(0.10, 0.28, 0.17), table_r, 0.35)
|
||||
tmi.material_override = Stoffe.filz()
|
||||
table.add_child(tmi)
|
||||
add_child(table)
|
||||
|
||||
@@ -130,7 +150,7 @@ func _build_room() -> void:
|
||||
lcm.height = TABLE_H - 0.12
|
||||
leg.mesh = lcm
|
||||
leg.position = Vector3(0, (TABLE_H - 0.12) * 0.5, 0)
|
||||
leg.material_override = Stoffe.holz(Color(0.30, 0.19, 0.09), Color(0.16, 0.10, 0.05), 0.5, 4.0)
|
||||
leg.material_override = Stoffe.holz()
|
||||
add_child(leg)
|
||||
|
||||
|
||||
@@ -167,7 +187,7 @@ func _build_seat(i: int) -> void:
|
||||
fm.radial_segments = 32
|
||||
felt.mesh = fm
|
||||
felt.position = Vector3(0, 0.006, 0)
|
||||
felt.material_override = Stoffe.filz(Color(0.07, 0.20, 0.13), ZONE_RAD, 0.6)
|
||||
felt.material_override = Stoffe.filz()
|
||||
zone.add_child(felt)
|
||||
|
||||
# Sichtbarer Rand
|
||||
@@ -179,7 +199,7 @@ func _build_seat(i: int) -> void:
|
||||
tm.ring_segments = 8
|
||||
rim.mesh = tm
|
||||
rim.position = Vector3(0, 0.02, 0)
|
||||
rim.material_override = _mat(RIM_RUHE, 0.6)
|
||||
rim.material_override = Stoffe.rand()
|
||||
zone.add_child(rim)
|
||||
rims.append(rim)
|
||||
|
||||
@@ -187,17 +207,7 @@ func _build_seat(i: int) -> void:
|
||||
var cup := Node3D.new()
|
||||
cup.position = Vector3(0, 0.02, 0)
|
||||
zone.add_child(cup)
|
||||
var cup_mi := MeshInstance3D.new()
|
||||
var cm := CylinderMesh.new()
|
||||
cm.top_radius = 0.33
|
||||
cm.bottom_radius = 0.42
|
||||
cm.height = 0.44
|
||||
cup_mi.mesh = cm
|
||||
cup_mi.position = Vector3(0, 0.22, 0)
|
||||
# Enge, weiche Maserung: die Ringe laufen am Becher senkrecht, zu grob sähe
|
||||
# das nach Fassdauben aus.
|
||||
cup_mi.material_override = Stoffe.holz(Color(0.40, 0.17, 0.11), Color(0.30, 0.12, 0.08), 0.5, 5.0)
|
||||
cup.add_child(cup_mi)
|
||||
cup.add_child(Formen.becher())
|
||||
cups.append(cup)
|
||||
cup_tweens.append(null)
|
||||
|
||||
@@ -550,7 +560,7 @@ func set_topf(liste: Array, ziel := -1) -> void:
|
||||
tw.tween_callback(mi.queue_free)
|
||||
|
||||
|
||||
static var _muenz_mat_wappen: ShaderMaterial
|
||||
static var _muenz_mat_wappen: StandardMaterial3D
|
||||
static var _praeg_mesh: TorusMesh
|
||||
static var _praeg_mat: StandardMaterial3D
|
||||
|
||||
@@ -567,9 +577,9 @@ static func _muenz_form() -> CylinderMesh:
|
||||
return _muenz_mesh
|
||||
|
||||
|
||||
static func _muenz_stoff(wappen: bool) -> ShaderMaterial:
|
||||
static func _muenz_stoff(wappen: bool) -> StandardMaterial3D:
|
||||
if _muenz_mat == null:
|
||||
_muenz_mat = Stoffe.messing(0.35)
|
||||
_muenz_mat = Stoffe.messing(0.25)
|
||||
_muenz_mat_wappen = Stoffe.messing(0.9)
|
||||
return _muenz_mat_wappen if wappen else _muenz_mat
|
||||
|
||||
@@ -620,12 +630,8 @@ func hervorhebung_weg() -> void:
|
||||
func set_active_seat(seat: int) -> void:
|
||||
for i in rims.size():
|
||||
var m: StandardMaterial3D = rims[i].material_override
|
||||
var dran: bool = i == seat
|
||||
m.albedo_color = RIM_ZUG if dran else RIM_RUHE
|
||||
m.emission_enabled = dran
|
||||
if dran:
|
||||
m.emission = Color(1.0, 0.78, 0.30)
|
||||
m.emission_energy_multiplier = 1.1
|
||||
m.emission_enabled = i == seat
|
||||
m.emission_energy_multiplier = 1.2
|
||||
|
||||
|
||||
func set_dice_visible(seat: int, on: bool) -> void:
|
||||
|
||||
Reference in New Issue
Block a user