tile-types #15
							
								
								
									
										13
									
								
								gdd.md
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								gdd.md
									
									
									
									
									
								
							@ -8,6 +8,19 @@
 | 
			
		||||
* Education
 | 
			
		||||
* Supply chains
 | 
			
		||||
 | 
			
		||||
## Interaction Modes
 | 
			
		||||
 | 
			
		||||
Interaction modes can be changed via keyboard shortcut.
 | 
			
		||||
 | 
			
		||||
### Selection Mode
 | 
			
		||||
 | 
			
		||||
This is the default interaction mode.
 | 
			
		||||
It can be accessed at any time by pressing the `esc` key.
 | 
			
		||||
 | 
			
		||||
### Build Mode
 | 
			
		||||
 | 
			
		||||
Build mode can be entered by pressing the `b` key.
 | 
			
		||||
 | 
			
		||||
## Critical Path
 | 
			
		||||
 | 
			
		||||
### Grid
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,22 @@ anchor_bottom = 1.0
 | 
			
		||||
script = ExtResource( 1 )
 | 
			
		||||
TicksLabelPath = NodePath("Ticks")
 | 
			
		||||
PauseLabelPath = NodePath("Paused")
 | 
			
		||||
InteractionModeLabelPath = NodePath("Interaction Mode")
 | 
			
		||||
 | 
			
		||||
[node name="Interaction Mode" type="Label" parent="."]
 | 
			
		||||
anchor_left = 1.0
 | 
			
		||||
anchor_top = 1.0
 | 
			
		||||
anchor_right = 1.0
 | 
			
		||||
anchor_bottom = 1.0
 | 
			
		||||
margin_left = -94.0
 | 
			
		||||
margin_top = -64.0
 | 
			
		||||
margin_right = -10.0
 | 
			
		||||
margin_bottom = -50.0
 | 
			
		||||
grow_horizontal = 0
 | 
			
		||||
grow_vertical = 0
 | 
			
		||||
text = "mode: SELECT"
 | 
			
		||||
align = 2
 | 
			
		||||
valign = 2
 | 
			
		||||
 | 
			
		||||
[node name="Ticks" type="Label" parent="."]
 | 
			
		||||
anchor_left = 1.0
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,10 @@
 | 
			
		||||
[gd_scene load_steps=5 format=2]
 | 
			
		||||
[gd_scene load_steps=6 format=2]
 | 
			
		||||
 | 
			
		||||
[ext_resource path="res://nodes/grid.tscn" type="PackedScene" id=1]
 | 
			
		||||
[ext_resource path="res://nodes/grid_cursor.tscn" type="PackedScene" id=2]
 | 
			
		||||
[ext_resource path="res://nodes/debug_ui.tscn" type="PackedScene" id=3]
 | 
			
		||||
[ext_resource path="res://nodes/clock.tscn" type="PackedScene" id=4]
 | 
			
		||||
[ext_resource path="res://nodes/interaction_mode.tscn" type="PackedScene" id=5]
 | 
			
		||||
 | 
			
		||||
[node name="Root" type="Node"]
 | 
			
		||||
 | 
			
		||||
@ -18,6 +19,9 @@ Grid = NodePath("../Grid")
 | 
			
		||||
[node name="Clock" parent="." instance=ExtResource( 4 )]
 | 
			
		||||
_autoTick = true
 | 
			
		||||
 | 
			
		||||
[node name="Interaction Mode" parent="." instance=ExtResource( 5 )]
 | 
			
		||||
 | 
			
		||||
[connection signal="OnPauseChanged" from="Clock" to="Debug UI" method="_on_Clock_OnPauseChanged"]
 | 
			
		||||
[connection signal="OnTick" from="Clock" to="Grid" method="_on_Clock_OnTick"]
 | 
			
		||||
[connection signal="OnTick" from="Clock" to="Debug UI" method="_on_Clock_OnTick"]
 | 
			
		||||
[connection signal="OnInteractionModeChanged" from="Interaction Mode" to="Debug UI" method="_on_Interaction_Mode_OnInteractionModeChanged"]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								half-earth/nodes/interaction_mode.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								half-earth/nodes/interaction_mode.tscn
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
[gd_scene load_steps=2 format=2]
 | 
			
		||||
 | 
			
		||||
[ext_resource path="res://scripts/InteractionMode.cs" type="Script" id=1]
 | 
			
		||||
 | 
			
		||||
[node name="Interaction Mode" type="Node"]
 | 
			
		||||
script = ExtResource( 1 )
 | 
			
		||||
_buildMode = 66
 | 
			
		||||
@ -11,27 +11,29 @@ public class DebugUI : Control
 | 
			
		||||
    public NodePath PauseLabelPath { private get; set; }
 | 
			
		||||
    private Label _pauseLabel;
 | 
			
		||||
 | 
			
		||||
    [Export]
 | 
			
		||||
    public NodePath InteractionModeLabelPath { private get; set; }
 | 
			
		||||
    private Label _interactionModeLabel;
 | 
			
		||||
    public override void _Ready()
 | 
			
		||||
    {
 | 
			
		||||
        _ticksLabel = GetNode<Label>(TicksLabelPath);
 | 
			
		||||
        _pauseLabel = GetNode<Label>(PauseLabelPath);
 | 
			
		||||
 | 
			
		||||
        SetTicksText(0);
 | 
			
		||||
        SetPauseText(false);
 | 
			
		||||
        _interactionModeLabel = GetNode<Label>(InteractionModeLabelPath);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #region Signals
 | 
			
		||||
    public void _on_Clock_OnPauseChanged(bool paused) => SetPauseText(paused);
 | 
			
		||||
    public void _on_Clock_OnTick(int ticks) => SetTicksText(ticks);
 | 
			
		||||
    public void _on_Clock_OnPauseChanged(bool paused) =>
 | 
			
		||||
        SetLabelText(_pauseLabel, "pause", paused);
 | 
			
		||||
 | 
			
		||||
    public void _on_Clock_OnTick(int ticks) =>
 | 
			
		||||
        SetLabelText(_ticksLabel, "ticks", ticks);
 | 
			
		||||
 | 
			
		||||
    public void _on_Interaction_Mode_OnInteractionModeChanged(InteractionMode.Mode oldMode, InteractionMode.Mode newMode) =>
 | 
			
		||||
        SetLabelText(_interactionModeLabel, "mode", newMode);
 | 
			
		||||
    #endregion
 | 
			
		||||
 | 
			
		||||
    private void SetTicksText(int ticks)
 | 
			
		||||
    private void SetLabelText(Label label, string key, object value)
 | 
			
		||||
    {
 | 
			
		||||
        _ticksLabel.Text = $"ticks: {ticks}";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void SetPauseText(bool paused)
 | 
			
		||||
    {
 | 
			
		||||
        _pauseLabel.Text = $"pause: {paused}";
 | 
			
		||||
        label.Text = $"{key}: {value}";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										58
									
								
								half-earth/scripts/InteractionMode.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								half-earth/scripts/InteractionMode.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
using Godot;
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
public class InteractionMode : Node
 | 
			
		||||
{
 | 
			
		||||
    [Export]
 | 
			
		||||
    private KeyList _buildMode;
 | 
			
		||||
 | 
			
		||||
    [Signal]
 | 
			
		||||
    delegate void OnInteractionModeChanged(Mode oldMode, Mode newMode);
 | 
			
		||||
 | 
			
		||||
    public enum Mode
 | 
			
		||||
    {
 | 
			
		||||
        SELECT = 0,
 | 
			
		||||
        BUILD = 1
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Mode Current
 | 
			
		||||
    {
 | 
			
		||||
        get => _current;
 | 
			
		||||
        set
 | 
			
		||||
        {
 | 
			
		||||
            if (_current == value)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var old = _current;
 | 
			
		||||
            _current = value;
 | 
			
		||||
 | 
			
		||||
            EmitSignal(nameof(OnInteractionModeChanged), old, _current);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    private Mode _current = Mode.SELECT;
 | 
			
		||||
 | 
			
		||||
    public override void _Input(InputEvent @event)
 | 
			
		||||
    {
 | 
			
		||||
        base._Input(@event);
 | 
			
		||||
 | 
			
		||||
        if (!(@event is InputEventKey keyEvent))
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        if (!keyEvent.Pressed)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        var key = (KeyList)keyEvent.Scancode;
 | 
			
		||||
 | 
			
		||||
        // TODO: this should be developed into a UI stack
 | 
			
		||||
        if (key == KeyList.Escape)
 | 
			
		||||
        {
 | 
			
		||||
            Current = Mode.SELECT;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (key == _buildMode)
 | 
			
		||||
        {
 | 
			
		||||
            Current = Mode.BUILD;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user