User Tools

Site Tools


events:getting_started_with_godot_in_3d_part_2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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>​
events/getting_started_with_godot_in_3d_part_2.txt · Last modified: 2020/03/31 18:18 by admin