diff --git a/Data/Modules/data_manager.py b/Data/Modules/data_manager.py index 53732db..28071bf 100644 --- a/Data/Modules/data_manager.py +++ b/Data/Modules/data_manager.py @@ -71,7 +71,7 @@ def fp_api(): "fp_total": get_data()["fp_total"] }) -@app.route('/status_screenshot') +@app.route('/flyff/status') def status_screenshot(): """ Returns an HTML page that displays the stored screenshot and @@ -80,23 +80,23 @@ def status_screenshot(): html = """ - Live Flyff Character Status + Borealis - Live Status - + """ return html -@app.route('/status_screenshot_data') +@app.route('/flyff/status_rawdata') def status_screenshot_data(): """ Serves the raw PNG bytes (decoded from base64) used by in /status_screenshot. diff --git a/Data/Nodes/Flyff/flyff_character_status_node.py b/Data/Nodes/Flyff/flyff_character_status_node.py index fc331d6..9d5511c 100644 --- a/Data/Nodes/Flyff/flyff_character_status_node.py +++ b/Data/Nodes/Flyff/flyff_character_status_node.py @@ -2,9 +2,8 @@ """ Flyff Character Status Node: - Creates an OCR region in data_collector. -- Periodically grabs raw text from that region and updates status. -- ALSO: Captures a screenshot from the same region, converts to base64, - and updates data_manager so the Flask server can serve it. +- Periodically captures a screenshot and updates Flask. +- If OCR is enabled, it extracts character status and updates the data_manager. """ import re @@ -13,7 +12,7 @@ from io import BytesIO from OdenGraphQt import BaseNode from PyQt5.QtWidgets import QMessageBox -from PyQt5.QtCore import QTimer # Corrected import +from PyQt5.QtCore import QTimer # Import the existing modules from Modules import data_manager, data_collector @@ -30,6 +29,10 @@ class FlyffCharacterStatusNode(BaseNode): raise Exception("Duplicate Character Status Node.") data_manager.character_status_collector_exists = True + # Add the Data Collection dropdown menu + self.add_combo_menu("data_collection", "Data Collection", items=["Disabled", "Enabled"]) + self.set_property("data_collection", "Disabled") # Default to Disabled + self.add_text_input("hp", "HP", text="HP: 0/0") self.add_text_input("mp", "MP", text="MP: 0/0") self.add_text_input("fp", "FP", text="FP: 0/0") @@ -90,14 +93,25 @@ class FlyffCharacterStatusNode(BaseNode): def process_input(self): """ - Called periodically to update character status from OCR, - and also capture the screenshot to display via Flask. + Called periodically to capture a screenshot and update character status (if enabled). """ - # 1) Update the text-based status (same as before). + # Always capture the screenshot, regardless of OCR status + screenshot_img = data_collector.capture_region_as_image(self.region_id) + if screenshot_img: + buf = BytesIO() + screenshot_img.save(buf, format='PNG') + image_b64 = base64.b64encode(buf.getvalue()).decode('utf-8') + data_manager.set_status_screenshot(image_b64) + + # If OCR is disabled, return early (skip OCR processing) + if self.get_property("data_collection") == "Disabled": + return + + # Process OCR if enabled raw_text = data_collector.get_raw_text(self.region_id) hp_c, hp_t, mp_c, mp_t, fp_c, fp_t, exp_v = self.parse_character_stats(raw_text) - # Update data_manager with the parsed values + # Update data_manager with parsed values data_manager.set_data_bulk({ "hp_current": hp_c, "hp_total": hp_t, @@ -113,12 +127,3 @@ class FlyffCharacterStatusNode(BaseNode): self.set_property("mp", f"MP: {mp_c}/{mp_t}") self.set_property("fp", f"FP: {fp_c}/{fp_t}") self.set_property("exp", f"EXP: {exp_v}%") - - # 2) Capture the screenshot used by OCR and store as base64 - screenshot_img = data_collector.capture_region_as_image(self.region_id) - if screenshot_img: - # Convert PIL image to base64 - buf = BytesIO() - screenshot_img.save(buf, format='PNG') - image_b64 = base64.b64encode(buf.getvalue()).decode('utf-8') - data_manager.set_status_screenshot(image_b64)