From ff1d85a325109f52a1b136707dc6d68e7319cd64 Mon Sep 17 00:00:00 2001 From: karl Date: Mon, 11 Nov 2019 21:51:53 +0100 Subject: [PATCH] Add Pill singleton with basic behavior A pill can be taken (key 'E', currently in Player.gd for testing) to increase the level up to the max level (currently 6). The drugged level gradually decreases down to the min level (currently 0). --- Characters/Player/Player.gd | 7 +++++++ Global/Pills.gd | 37 +++++++++++++++++++++++++++++++++++++ project.godot | 6 ++++++ 3 files changed, 50 insertions(+) create mode 100644 Global/Pills.gd 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]