This shows you the differences between two versions of the page.
Next revision | Previous revision Last revision Both sides next revision | ||
events:getting_started_with_godot_in_3d_part_2 [2020/03/31 18:05] admin created |
events:getting_started_with_godot_in_3d_part_2 [2020/03/31 18:12] admin |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== Notes for everyone ==== | ==== Notes for everyone ==== | ||
- | * on the player object: | + | * on the player object, add raycast to camera |
- | * Add raycast to camera | + | |
* enable it | * enable it | ||
* set cast to to -100 on Z axis (y=0) | * set cast to to -100 on Z axis (y=0) | ||
Line 8: | Line 7: | ||
* add a script to weapon (default empty) | * add a script to weapon (default empty) | ||
* set up some variables for the weapon, track ammo code | * set up some variables for the weapon, track ammo code | ||
- | <code> | + | <code python> |
export var fire_rate = 0.5 | export var fire_rate = 0.5 | ||
export var clip_size = 5 | export var clip_size = 5 | ||
Line 21: | Line 20: | ||
</code> | </code> | ||
+ | * Test that out | ||
+ | <code python> | ||
+ | func _process(delta): | ||
+ | if Input.is_action_just_pressed("primary_fire") and can_fire: | ||
+ | print "Fired weapon" | ||
+ | can_fire = false | ||
+ | | ||
+ | yield(get_tree().create_timer(fire_rate), "timeout") | ||
+ | can_fire = true | ||
+ | </code> | ||
+ | |||
+ | * Test those changes (try changing the fire rate in the properties box) | ||
+ | * Simulate reloading | ||
+ | <code python> | ||
+ | func _process(delta): | ||
+ | if Input.is_action_just_pressed("primary_fire") and can_fire: | ||
+ | if current_ammo > 0: | ||
+ | print "Fired weapon" | ||
+ | can_fire = false | ||
+ | current_ammo -= 1 | ||
+ | | ||
+ | yield(get_tree().create_timer(fire_rate), "timeout") | ||
+ | can_fire = true | ||
+ | else: | ||
+ | print "Reloading" | ||
+ | yield(get_tree().create_timer(reload_rate), "timeout") | ||
+ | current_ammo = clip_size | ||
+ | print "Reload complete" | ||
+ | |||
+ | </code> | ||
+ | * Fix a reload issue (race condition): | ||
+ | <code python> | ||
+ | export var fire_rate = 0.5 | ||
+ | export var clip_size = 5 | ||
+ | export var reload_rate = 1 | ||
+ | |||
+ | var current_ammo = clip_size | ||
+ | var can_fire = true | ||
+ | var reloading = false | ||
+ | |||
+ | func _process(delta): | ||
+ | if Input.is_action_just_pressed("primary_fire") and can_fire: | ||
+ | if current_ammo > 0 and not reloading: | ||
+ | print "Fired weapon" | ||
+ | can_fire = false | ||
+ | current_ammo -= 1 | ||
+ | elif not reloading: | ||
+ | print "Reloading" | ||
+ | reloading = true | ||
+ | yield(get_tree().create_timer(reload_rate), "timeout") | ||
+ | current_ammo = clip_size | ||
+ | reloading = false | ||
+ | print "Reload complete" | ||
+ | |||
+ | |||
+ | </code> |