update
This commit is contained in:
@@ -476,10 +476,12 @@ func freeze_dice(seat: int) -> void:
|
||||
|
||||
|
||||
## Der Topf liegt als Häufchen Messing in der Tischmitte. Jede Münze trägt
|
||||
## ihre Wurfnummer; was nicht mehr in der Liste steht, ist beim Gewinner.
|
||||
## ihre Wurfnummer; was nicht mehr in der Liste steht, ist beim Gewinner -
|
||||
## dorthin fliegt sie dann auch (`ziel`), sonst verschwindet sie einfach.
|
||||
## Lage und Drehung kommen aus der Nummer, damit Host und Clients dasselbe
|
||||
## Häufchen sehen.
|
||||
func set_topf(liste: Array) -> void:
|
||||
## Häufchen sehen. Wappen-Münzen tragen einen geprägten Ring und leuchten
|
||||
## stärker: so sieht man den Wurfausgang auf dem Tisch, nicht nur im Text.
|
||||
func set_topf(liste: Array, ziel := -1) -> void:
|
||||
var bleibt := {}
|
||||
for m in liste:
|
||||
var nr := int(m.get("nr", 0))
|
||||
@@ -490,21 +492,43 @@ func set_topf(liste: Array) -> void:
|
||||
r.seed = nr * 7919
|
||||
var ang := r.randf() * TAU
|
||||
var rad := r.randf_range(0.30, 0.55)
|
||||
var ziel := Vector3(cos(ang) * rad, TABLE_H + 0.006, sin(ang) * rad)
|
||||
var wappen: bool = m.get("stark", false)
|
||||
var lage := Vector3(cos(ang) * rad, TABLE_H + 0.007, sin(ang) * rad)
|
||||
var mi := MeshInstance3D.new()
|
||||
mi.mesh = _muenz_form()
|
||||
mi.material_override = _muenz_stoff()
|
||||
mi.position = ziel + Vector3(0, 0.35, 0)
|
||||
mi.material_override = _muenz_stoff(wappen)
|
||||
mi.position = lage + Vector3(0, 0.45, 0)
|
||||
mi.rotation.y = r.randf() * TAU
|
||||
add_child(mi)
|
||||
if wappen:
|
||||
var ring := MeshInstance3D.new()
|
||||
ring.mesh = _praegung()
|
||||
ring.material_override = _praegung_stoff()
|
||||
ring.position = Vector3(0, 0.008, 0)
|
||||
mi.add_child(ring)
|
||||
topf_muenzen[nr] = mi
|
||||
# Fällt aus der Hand auf den Tisch.
|
||||
create_tween().tween_property(mi, "position", ziel, 0.35) \
|
||||
.set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN)
|
||||
# Fällt drehend aus der Hand und bleibt flach liegen.
|
||||
var tw := create_tween().set_parallel(true)
|
||||
tw.tween_property(mi, "position", lage, 0.55).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN)
|
||||
tw.tween_property(mi, "rotation:x", TAU * 3.0, 0.55).from(0.0)
|
||||
for nr in topf_muenzen.keys():
|
||||
if not bleibt.has(nr):
|
||||
topf_muenzen[nr].queue_free()
|
||||
topf_muenzen.erase(nr)
|
||||
if bleibt.has(nr):
|
||||
continue
|
||||
var mi: MeshInstance3D = topf_muenzen[nr]
|
||||
topf_muenzen.erase(nr)
|
||||
if ziel < 0 or ziel >= zones.size():
|
||||
mi.queue_free()
|
||||
continue
|
||||
# Zum Gewinner fliegen, dann weg.
|
||||
var hin: Vector3 = zones[ziel].global_position + Vector3(0, 0.25, 0)
|
||||
var tw := create_tween()
|
||||
tw.tween_property(mi, "global_position", hin, 0.6).set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN_OUT)
|
||||
tw.tween_callback(mi.queue_free)
|
||||
|
||||
|
||||
static var _muenz_mat_wappen: StandardMaterial3D
|
||||
static var _praeg_mesh: TorusMesh
|
||||
static var _praeg_mat: StandardMaterial3D
|
||||
|
||||
|
||||
static func _muenz_form() -> CylinderMesh:
|
||||
@@ -519,7 +543,7 @@ static func _muenz_form() -> CylinderMesh:
|
||||
return _muenz_mesh
|
||||
|
||||
|
||||
static func _muenz_stoff() -> StandardMaterial3D:
|
||||
static func _muenz_stoff(wappen: bool) -> StandardMaterial3D:
|
||||
if _muenz_mat == null:
|
||||
_muenz_mat = StandardMaterial3D.new()
|
||||
_muenz_mat.albedo_color = Color(0.80, 0.62, 0.26)
|
||||
@@ -528,7 +552,27 @@ static func _muenz_stoff() -> StandardMaterial3D:
|
||||
_muenz_mat.emission_enabled = true
|
||||
_muenz_mat.emission = Color(0.55, 0.40, 0.12)
|
||||
_muenz_mat.emission_energy_multiplier = 0.35
|
||||
return _muenz_mat
|
||||
_muenz_mat_wappen = _muenz_mat.duplicate()
|
||||
_muenz_mat_wappen.emission_energy_multiplier = 0.9
|
||||
return _muenz_mat_wappen if wappen else _muenz_mat
|
||||
|
||||
|
||||
static func _praegung() -> TorusMesh:
|
||||
if _praeg_mesh == null:
|
||||
_praeg_mesh = TorusMesh.new()
|
||||
_praeg_mesh.inner_radius = 0.035
|
||||
_praeg_mesh.outer_radius = 0.065
|
||||
_praeg_mesh.rings = 20
|
||||
_praeg_mesh.ring_segments = 6
|
||||
return _praeg_mesh
|
||||
|
||||
|
||||
static func _praegung_stoff() -> StandardMaterial3D:
|
||||
if _praeg_mat == null:
|
||||
_praeg_mat = StandardMaterial3D.new()
|
||||
_praeg_mat.albedo_color = Color(0.20, 0.14, 0.05)
|
||||
_praeg_mat.roughness = 0.8
|
||||
return _praeg_mat
|
||||
|
||||
|
||||
## Beim Zählen leuchten die passenden Würfel nacheinander auf, mit einem
|
||||
|
||||
Reference in New Issue
Block a user