Add event flags
This commit is contained in:
		@@ -80,9 +80,9 @@ script = ExtResource("5_cg1ph")
 | 
			
		||||
 | 
			
		||||
[node name="EventFlagModify" type="Node" parent="Events/TestConversation"]
 | 
			
		||||
script = ExtResource("12_ncdgy")
 | 
			
		||||
action = 2
 | 
			
		||||
action = 4
 | 
			
		||||
event = 1
 | 
			
		||||
eventFlag = 1
 | 
			
		||||
eventFlag = 1539
 | 
			
		||||
metadata/_custom_type_script = "uid://0ygswaohp7kj"
 | 
			
		||||
 | 
			
		||||
[node name="Text 0" type="Node" parent="Events/TestConversation"]
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,11 @@
 | 
			
		||||
[gd_scene load_steps=6 format=3 uid="uid://b5bwpsh0gcicf"]
 | 
			
		||||
[gd_scene load_steps=7 format=3 uid="uid://b5bwpsh0gcicf"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" uid="uid://dahhuhiu8u88b" path="res://scripts/Singleton/UI.gd" id="1_g3au4"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://verg13jtqwvh" path="res://scenes/UI/DebugMenu.tscn" id="2_is0g4"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://bfioi52hjn2kf" path="res://scenes/UI/QuestMenu.tscn" id="2_mpokx"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://bkx3l0kckf4a8" path="res://scenes/UI/VNTextbox.tscn" id="3_btpxp"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://dl8iqhrpsplmk" path="res://scenes/UI/Inventory/FullInventoryMenu.tscn" id="5_6dyff"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://b6s1xdcfcp0xx" path="res://scenes/UI/EventFlagMenu.tscn" id="5_12prj"]
 | 
			
		||||
 | 
			
		||||
[node name="UI" type="Control"]
 | 
			
		||||
layout_mode = 3
 | 
			
		||||
@@ -30,6 +31,9 @@ anchors_preset = 0
 | 
			
		||||
visible = false
 | 
			
		||||
layout_mode = 1
 | 
			
		||||
 | 
			
		||||
[node name="EventFlagMenu" parent="." instance=ExtResource("5_12prj")]
 | 
			
		||||
layout_mode = 1
 | 
			
		||||
 | 
			
		||||
[node name="DebugMenu" parent="." instance=ExtResource("2_is0g4")]
 | 
			
		||||
visible = false
 | 
			
		||||
layout_mode = 0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										73
									
								
								scenes/UI/EventFlagMenu.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								scenes/UI/EventFlagMenu.tscn
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
			
		||||
[gd_scene load_steps=2 format=3 uid="uid://b6s1xdcfcp0xx"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="Script" uid="uid://b4a3ne2vn36mt" path="res://scripts/UI/EventFlagMenu.gd" id="1_nnw5f"]
 | 
			
		||||
 | 
			
		||||
[node name="EventFlagsMenu" type="Panel" node_paths=PackedStringArray("flagList", "grid")]
 | 
			
		||||
anchors_preset = 15
 | 
			
		||||
anchor_right = 1.0
 | 
			
		||||
anchor_bottom = 1.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
script = ExtResource("1_nnw5f")
 | 
			
		||||
flagList = NodePath("HBoxContainer/FlagList")
 | 
			
		||||
grid = NodePath("HBoxContainer/Control")
 | 
			
		||||
metadata/_custom_type_script = "uid://b4a3ne2vn36mt"
 | 
			
		||||
 | 
			
		||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
 | 
			
		||||
layout_mode = 1
 | 
			
		||||
anchors_preset = 15
 | 
			
		||||
anchor_right = 1.0
 | 
			
		||||
anchor_bottom = 1.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
 | 
			
		||||
[node name="FlagList" type="ItemList" parent="HBoxContainer"]
 | 
			
		||||
clip_contents = false
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
size_flags_horizontal = 0
 | 
			
		||||
size_flags_vertical = 3
 | 
			
		||||
auto_width = true
 | 
			
		||||
item_count = 2
 | 
			
		||||
item_0/text = "Item 0"
 | 
			
		||||
item_1/text = "Item 1"
 | 
			
		||||
 | 
			
		||||
[node name="Control" type="GridContainer" parent="HBoxContainer"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
size_flags_horizontal = 3
 | 
			
		||||
columns = 6
 | 
			
		||||
 | 
			
		||||
[node name="Flag0" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag1" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag2" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag3" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag4" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag5" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag6" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag7" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
 | 
			
		||||
[node name="Flag8" type="CheckBox" parent="HBoxContainer/Control"]
 | 
			
		||||
layout_mode = 2
 | 
			
		||||
text = "Flag 0"
 | 
			
		||||
@@ -10,10 +10,54 @@ enum Action {
 | 
			
		||||
 | 
			
		||||
@export var action:Action = Action.TURN_ON;
 | 
			
		||||
@export var event:EventSystem.SpecialEvent;
 | 
			
		||||
@export_flags("1:1", "2:2", "3:4", "4:8", "5:16", "6:32", "7:64", "8:128", "9:256", "10:512", "11:1024", "12:2048", "13:4096", "14:8192", "15:16384", "16:32768")
 | 
			
		||||
@export_flags(
 | 
			
		||||
	"1:1",
 | 
			
		||||
	"2:2",
 | 
			
		||||
	"3:4",
 | 
			
		||||
	"4:8",
 | 
			
		||||
	"5:16",
 | 
			
		||||
	"6:32",
 | 
			
		||||
	"7:64",
 | 
			
		||||
	"8:128",
 | 
			
		||||
	"9:256",
 | 
			
		||||
	"10:512",
 | 
			
		||||
	"11:1024",
 | 
			
		||||
	"12:2048",
 | 
			
		||||
	"13:4096",
 | 
			
		||||
	"14:8192",
 | 
			
		||||
	"15:16384",
 | 
			
		||||
	"16:32768",
 | 
			
		||||
	"17:65536",
 | 
			
		||||
	"18:131072",
 | 
			
		||||
	"19:262144",
 | 
			
		||||
	"20:524288",
 | 
			
		||||
	"21:1048576",
 | 
			
		||||
	"22:2097152",
 | 
			
		||||
	"23:4194304",
 | 
			
		||||
	"24:8388608",
 | 
			
		||||
	"25:16777216",
 | 
			
		||||
	"26:33554432",
 | 
			
		||||
	"27:67108864",
 | 
			
		||||
	"28:134217728",
 | 
			
		||||
	"29:268435456",
 | 
			
		||||
	"30:536870912",
 | 
			
		||||
	"31:1073741824",
 | 
			
		||||
	"32:2147483648"
 | 
			
		||||
)
 | 
			
		||||
var eventFlag:int = 0;
 | 
			
		||||
 | 
			
		||||
func start() -> void:
 | 
			
		||||
	super.start()
 | 
			
		||||
	pass
 | 
			
		||||
	# EVENT.eventFlagOn(event, eventFlag)
 | 
			
		||||
	match action:
 | 
			
		||||
		Action.TURN_ON:
 | 
			
		||||
			EVENT.eventFlagOn(event, eventFlag)
 | 
			
		||||
		Action.TURN_OFF:
 | 
			
		||||
			EVENT.eventFlagOff(event, eventFlag)
 | 
			
		||||
		Action.SET_TO:
 | 
			
		||||
			EVENT.eventFlagSetTo(event, eventFlag)
 | 
			
		||||
		Action.ALL_ON:
 | 
			
		||||
			EVENT.eventFlagSetTo(event, 0xffffffff)
 | 
			
		||||
		Action.ALL_OFF:
 | 
			
		||||
			EVENT.eventFlagSetTo(event, 0)
 | 
			
		||||
		_:
 | 
			
		||||
			print("Invalid action: %s" % str(action))
 | 
			
		||||
@@ -1,22 +1,33 @@
 | 
			
		||||
class_name EventSystem extends Node
 | 
			
		||||
 | 
			
		||||
const EVENT_FLAG_COUNT = 32
 | 
			
		||||
 | 
			
		||||
enum SpecialEvent {
 | 
			
		||||
	INVALID = 0,
 | 
			
		||||
	TEST_QUEST = 1,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var eventFlags:Dictionary[int, int] = {}
 | 
			
		||||
signal eventFlagUpdated(event:SpecialEvent, flags:int)
 | 
			
		||||
 | 
			
		||||
func eventFlagOn(event:SpecialEvent, flagsToTurnOn:int) -> void:
 | 
			
		||||
	if !eventFlags.has(event):
 | 
			
		||||
		eventFlags[event] = 0;
 | 
			
		||||
	
 | 
			
		||||
	eventFlags[event] |= flagsToTurnOn;
 | 
			
		||||
	eventFlagUpdated.emit(event, eventFlags[event]);
 | 
			
		||||
 | 
			
		||||
func eventFlagOff(event:SpecialEvent, flagsToTurnOff:int) -> void:
 | 
			
		||||
	if !eventFlags.has(event):
 | 
			
		||||
		eventFlags[event] = 0;
 | 
			
		||||
	eventFlags[event] &= ~flagsToTurnOff;
 | 
			
		||||
	eventFlagUpdated.emit(event, eventFlags[event]);
 | 
			
		||||
 | 
			
		||||
func eventFlagSetTo(event:SpecialEvent, flagsToSet:int) -> void:
 | 
			
		||||
	if !eventFlags.has(event):
 | 
			
		||||
		eventFlags[event] = 0;
 | 
			
		||||
	eventFlags[event] = flagsToSet;
 | 
			
		||||
	eventFlagUpdated.emit(event, eventFlags[event]);
 | 
			
		||||
 | 
			
		||||
func eventAreFlagsOn(event:SpecialEvent, flagsToCheck:int) -> bool:
 | 
			
		||||
	if !eventFlags.has(event):
 | 
			
		||||
 
 | 
			
		||||
@@ -3,11 +3,13 @@ class_name UISystem extends Control
 | 
			
		||||
var QUEST_MENU:QuestMenu
 | 
			
		||||
var DEBUG_MENU:DebugMenu
 | 
			
		||||
var INVENTORY_MENU:FullInventoryMenu
 | 
			
		||||
var EVENT_FLAG_MENU:EventFlagMenu
 | 
			
		||||
 | 
			
		||||
func _ready() -> void:
 | 
			
		||||
	QUEST_MENU = $QuestMenu
 | 
			
		||||
	DEBUG_MENU = $DebugMenu
 | 
			
		||||
	INVENTORY_MENU = $FullInventory
 | 
			
		||||
	EVENT_FLAG_MENU = $EventFlagMenu
 | 
			
		||||
 | 
			
		||||
func _process(delta: float) -> void:
 | 
			
		||||
	# This needs to always be at the end of the parent node's tree
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,11 @@ func _on_Battle_pressed():
 | 
			
		||||
	print("Battle pressed")
 | 
			
		||||
 | 
			
		||||
func _on_Event_pressed():
 | 
			
		||||
	print("Event pressed")
 | 
			
		||||
	close()
 | 
			
		||||
	if UI.EVENT_FLAG_MENU.isOpen():
 | 
			
		||||
		UI.EVENT_FLAG_MENU.close()
 | 
			
		||||
	else:
 | 
			
		||||
		UI.EVENT_FLAG_MENU.open()
 | 
			
		||||
 | 
			
		||||
func _on_Inventory_pressed():
 | 
			
		||||
	close()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										83
									
								
								scripts/UI/EventFlagMenu.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								scripts/UI/EventFlagMenu.gd
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
class_name EventFlagMenu extends Panel
 | 
			
		||||
 | 
			
		||||
@export var flagList:ItemList
 | 
			
		||||
@export var grid:GridContainer
 | 
			
		||||
var checkboxes:Array[CheckBox] = []
 | 
			
		||||
var selectedEvent:int = -1
 | 
			
		||||
 | 
			
		||||
func _ready() -> void:
 | 
			
		||||
	while grid.get_child_count() > 0:
 | 
			
		||||
		var child = grid.get_child(0)
 | 
			
		||||
		grid.remove_child(child)
 | 
			
		||||
		child.queue_free()
 | 
			
		||||
 | 
			
		||||
	for i in range(0, EventSystem.EVENT_FLAG_COUNT):
 | 
			
		||||
		var checkbox:CheckBox = CheckBox.new()
 | 
			
		||||
		checkbox.text = "Flag %s" % str(i)
 | 
			
		||||
		grid.add_child(checkbox)
 | 
			
		||||
		checkboxes.append(checkbox)
 | 
			
		||||
		checkbox.pressed.connect(_on_CheckboxPressed)
 | 
			
		||||
 | 
			
		||||
	hide()
 | 
			
		||||
	_updateEventList()
 | 
			
		||||
	_updateSelectedEvent()
 | 
			
		||||
 | 
			
		||||
	EVENT.eventFlagUpdated.connect(_on_EventFlagUpdated)
 | 
			
		||||
	flagList.item_selected.connect(_on_EventSelected)
 | 
			
		||||
 | 
			
		||||
func _exit_tree() -> void:
 | 
			
		||||
	EVENT.eventFlagUpdated.disconnect(_on_EventFlagUpdated)
 | 
			
		||||
	flagList.item_selected.disconnect(_on_EventSelected)
 | 
			
		||||
 | 
			
		||||
	for checkbox in checkboxes:
 | 
			
		||||
		grid.remove_child(checkbox)
 | 
			
		||||
		checkbox.queue_free()
 | 
			
		||||
	checkboxes.clear()
 | 
			
		||||
 | 
			
		||||
func _updateEventList() -> void:
 | 
			
		||||
	flagList.clear()
 | 
			
		||||
	flagList.deselect_all()
 | 
			
		||||
	
 | 
			
		||||
	for event in EventSystem.SpecialEvent:
 | 
			
		||||
		flagList.add_item(event)
 | 
			
		||||
 | 
			
		||||
func _updateSelectedEvent() -> void:
 | 
			
		||||
	if selectedEvent == -1:
 | 
			
		||||
		for i in range(0, EventSystem.EVENT_FLAG_COUNT):
 | 
			
		||||
			checkboxes[i].visible = false
 | 
			
		||||
		return
 | 
			
		||||
 | 
			
		||||
	for i in range(0, EventSystem.EVENT_FLAG_COUNT):
 | 
			
		||||
		var cb = checkboxes[i]
 | 
			
		||||
		cb.visible = true
 | 
			
		||||
		cb.button_pressed = EVENT.eventIsAnyOfFlagsOn(selectedEvent, 1 << i)
 | 
			
		||||
 | 
			
		||||
func open() -> void:
 | 
			
		||||
	show()
 | 
			
		||||
 | 
			
		||||
func close() -> void:
 | 
			
		||||
	selectedEvent = -1
 | 
			
		||||
	_updateSelectedEvent()
 | 
			
		||||
	hide()
 | 
			
		||||
 | 
			
		||||
func isOpen() -> bool:
 | 
			
		||||
	return self.visible
 | 
			
		||||
 | 
			
		||||
func _on_EventFlagUpdated(event:EventSystem.SpecialEvent, flags:int) -> void:
 | 
			
		||||
	_updateEventList()
 | 
			
		||||
	_updateSelectedEvent()
 | 
			
		||||
 | 
			
		||||
func _on_EventSelected(index:int) -> void:
 | 
			
		||||
	selectedEvent = index
 | 
			
		||||
	_updateSelectedEvent()
 | 
			
		||||
 | 
			
		||||
func _on_CheckboxPressed() -> void:
 | 
			
		||||
	if selectedEvent == -1:
 | 
			
		||||
		return
 | 
			
		||||
	
 | 
			
		||||
	var value = 0
 | 
			
		||||
	for i in range(0, EventSystem.EVENT_FLAG_COUNT):
 | 
			
		||||
		if checkboxes[i].button_pressed:
 | 
			
		||||
			value |= (1 << i)
 | 
			
		||||
 | 
			
		||||
	EVENT.eventFlagSetTo(selectedEvent, value)
 | 
			
		||||
							
								
								
									
										1
									
								
								scripts/UI/EventFlagMenu.gd.uid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								scripts/UI/EventFlagMenu.gd.uid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
uid://b4a3ne2vn36mt
 | 
			
		||||
		Reference in New Issue
	
	Block a user