diff --git a/Characters/Player/Player.gd b/Characters/Player/Player.gd index 225aa95..58ede2b 100644 --- a/Characters/Player/Player.gd +++ b/Characters/Player/Player.gd @@ -57,6 +57,13 @@ func process_input(): # sprinting _is_sprinting = Input.is_action_pressed("move_sprint") + + # Taking a pill + # TODO: Should be moved to a different component which only handles pills - this script should only do movement + # Only here for testing purposes! + if Input.is_action_just_pressed("take_pill"): + Pills.take_pill() + Logger.info("Player took a pill; new level: %s" % [Pills.get_round_level()]) func process_movement(delta): diff --git a/Global/Pills.gd b/Global/Pills.gd new file mode 100644 index 0000000..8b78ea3 --- /dev/null +++ b/Global/Pills.gd @@ -0,0 +1,37 @@ +extends Node + + +var _level: float setget _set_level, get_level +var _min: float = 0.0 +var _max: float = 6.0 +var _decrease_per_second: float = 0.2 +var _pill_add_amount: float = 2.0 + + +# Returns the exact current level as a floating point number between min and max +func get_level(): + return _level + + +# Returns the rounded level, e.g. for behavior which changes stepwise (X at level 6, Y at level 5, ...) +func get_round_level(): + return ceil(get_level()) + + +func _set_level(new_level: float): + # Make sure the level stays between min and max + _level = clamp(new_level, _min, _max) + + +func _ready() -> void: + # Start with the maximum druggedness + _set_level(_max) + + +func _process(delta: float) -> void: + # Gradually decrease the level by the decrease per second + _set_level(_level - _decrease_per_second * delta) + + +func take_pill(): + _set_level(_level + _pill_add_amount) \ No newline at end of file diff --git a/project.godot b/project.godot index a496b14..e737144 100644 --- a/project.godot +++ b/project.godot @@ -69,6 +69,7 @@ config/icon="res://icon.png" [autoload] Logger="*res://Util/gs-logger-3.1-R3/gs_logger/logger.gd" +Pills="*res://Global/Pills.gd" [input] @@ -106,6 +107,11 @@ move_sprint={ "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null) ] } +take_pill={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"unicode":0,"echo":false,"script":null) + ] +} [layer_names]