Create an example of scene with dissovle apply for 3 meshes
This commit is contained in:
+49
-23
@@ -1,28 +1,54 @@
|
||||
extends Spatial
|
||||
|
||||
var dissolve = null
|
||||
var time_max = 2000 # msec
|
||||
var tick_reference = null
|
||||
var value = 0.1
|
||||
const time_max = 3000 # msec
|
||||
|
||||
func _on_Area_input_event(_camera, event, _click_position, _click_normal, _shape_idx):
|
||||
if event is InputEventMouseButton or event is InputEventScreenTouch:
|
||||
dissolve = true
|
||||
onready var meshes = {
|
||||
"dagger": {
|
||||
"mesh": $dagger,
|
||||
"value": 0.0,
|
||||
"label": "Dagger",
|
||||
"lock": false,
|
||||
"tick_reference": null
|
||||
},
|
||||
"coin": {
|
||||
"mesh": $coin,
|
||||
"value": 0.0,
|
||||
"label": "Coin",
|
||||
"lock": false,
|
||||
"tick_reference": null
|
||||
},
|
||||
"book": {
|
||||
"mesh": $book,
|
||||
"value": 0.0,
|
||||
"label": "Book",
|
||||
"lock": false,
|
||||
"tick_reference": null
|
||||
}
|
||||
}
|
||||
|
||||
func _on_Dagger_Area_input_event(_camera, event, _click_position, _click_normal, _shape_idx):
|
||||
_initialize_mesh_ref("dagger", event)
|
||||
|
||||
func _on_Coin_Area_input_event(_camera, event, _click_position, _click_normal, _shape_idx):
|
||||
_initialize_mesh_ref("coin", event)
|
||||
|
||||
func _on_Book_Area_input_event(_camera, event, _click_position, _click_normal, _shape_idx):
|
||||
_initialize_mesh_ref("book", event)
|
||||
|
||||
func _initialize_mesh_ref(meshInstance, event):
|
||||
if meshes[meshInstance]["lock"] == false and (event is InputEventMouseButton or event is InputEventScreenTouch):
|
||||
meshes[meshInstance]["lock"] = true
|
||||
|
||||
func _process(_delta):
|
||||
if dissolve == true:
|
||||
if tick_reference == null:
|
||||
tick_reference = OS.get_ticks_msec()
|
||||
print("[Dagger#_process] Reference tick to " + String(tick_reference))
|
||||
|
||||
var tick = OS.get_ticks_msec()
|
||||
|
||||
print("[Dagger#_process] Dissolve ... " + String(tick) + " < " + String(tick_reference + time_max))
|
||||
|
||||
if tick < tick_reference + time_max:
|
||||
print("[Dagger#_process] Apply value to "+ String(value))
|
||||
value += 0.01
|
||||
$dagger.mesh.surface_get_material(0).set("shader_param/dissolve_amount", value)
|
||||
else:
|
||||
print("[Dagger#_process] animation ending !!")
|
||||
dissolve = null
|
||||
for mesh in meshes:
|
||||
if meshes[mesh]["lock"] == true and meshes[mesh]["mesh"] != null:
|
||||
|
||||
if meshes[mesh]["tick_reference"] == null:
|
||||
meshes[mesh]["tick_reference"] = OS.get_ticks_msec()
|
||||
|
||||
if OS.get_ticks_msec() < meshes[mesh]["tick_reference"] + time_max:
|
||||
meshes[mesh]["value"] += 0.01
|
||||
meshes[mesh]["mesh"].get_surface_material(0).set("shader_param/dissolve_amount", meshes[mesh]["value"])
|
||||
else:
|
||||
meshes[mesh]["mesh"].call_deferred("free")
|
||||
meshes[mesh]["mesh"] = null
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user