From 33cbd059ec4c25b8efa8e3f99d84dccccf0bed22 Mon Sep 17 00:00:00 2001 From: Zukero Date: Fri, 18 Aug 2017 17:22:06 +0200 Subject: [PATCH] More bug fixes in Requirement management for Key and Replace areas. Much better handling of the old school form, and smooth, automatic transitionning from old school to new school, but only when necessary! --- .../atcontentstudio/model/maps/KeyArea.java | 6 +- .../model/maps/ReplaceArea.java | 6 +- .../atcontentstudio/ui/map/TMXMapEditor.java | 77 ++++++++++++++++--- 3 files changed, 73 insertions(+), 16 deletions(-) diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/KeyArea.java b/src/com/gpl/rpg/atcontentstudio/model/maps/KeyArea.java index 6027745..ed3aa2e 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/KeyArea.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/KeyArea.java @@ -20,7 +20,7 @@ public class KeyArea extends MapObject { String requireId = obj.getProperties().getProperty("requireId"); String requireValue = obj.getProperties().getProperty("requireValue"); oldSchoolRequirement = false; - if (requireId == null) { + if (requireType == null) { String[] fields = obj.getName().split(":"); if (fields.length == 2) { requireType = Requirement.RequirementType.questProgress.toString(); @@ -76,7 +76,7 @@ public class KeyArea extends MapObject { } if (requirement != null) { if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) { - tmxObject.setName(requirement.required_obj_id+":"+Integer.toString(requirement.required_value)); + tmxObject.setName(requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value))); } else { if (requirement.type != null) { tmxObject.getProperties().setProperty("requireType", requirement.type.toString()); @@ -98,7 +98,7 @@ public class KeyArea extends MapObject { public void updateNameFromRequirementChange() { if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) { - name = requirement.required_obj_id+":"+Integer.toString(requirement.required_value); + name = requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value)); } else if (oldSchoolRequirement) { int i = 0; String futureName = requirement.type.toString() + "#" + Integer.toString(i); diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/ReplaceArea.java b/src/com/gpl/rpg/atcontentstudio/model/maps/ReplaceArea.java index 81e963e..34e0ef7 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/ReplaceArea.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/ReplaceArea.java @@ -20,7 +20,7 @@ public class ReplaceArea extends MapObject { String requireType = obj.getProperties().getProperty("requireType"); String requireId = obj.getProperties().getProperty("requireId"); String requireValue = obj.getProperties().getProperty("requireValue"); - if (requireId == null) { + if (requireType == null) { String[] fields = obj.getName().split(":"); if (fields.length == 2) { requireType = Requirement.RequirementType.questProgress.toString(); @@ -91,7 +91,7 @@ public class ReplaceArea extends MapObject { } if (requirement != null) { if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) { - tmxObject.setName(requirement.required_obj_id+":"+Integer.toString(requirement.required_value)); + tmxObject.setName(requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value))); } else { tmxObject.getProperties().setProperty("requireType", requirement.type.toString()); if (requirement.required_obj != null) { @@ -112,7 +112,7 @@ public class ReplaceArea extends MapObject { //Don't use yet ! public void updateNameFromRequirementChange() { if (oldSchoolRequirement && Requirement.RequirementType.questProgress.equals(requirement.type) && (requirement.negated == null || !requirement.negated)) { - name = requirement.required_obj_id+":"+Integer.toString(requirement.required_value); + name = requirement.required_obj_id+":"+((requirement.required_value == null) ? "" : Integer.toString(requirement.required_value)); } else if (oldSchoolRequirement) { int i = 0; String futureName = requirement.type.toString() + "#" + Integer.toString(i); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java index 35d245c..2aa5ac4 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java @@ -1813,6 +1813,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } + private int skipAreaFieldEvents = 0; public class MapFieldUpdater implements FieldUpdateListener { @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -1848,8 +1849,22 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe tmxViewer.revalidate(); tmxViewer.repaint(); } else if (source == areaField) { - selectedMapObject.name = (String) value; - groupObjectsListModel.objectChanged(selectedMapObject); + if (skipAreaFieldEvents > 0) skipAreaFieldEvents--; + else { + selectedMapObject.name = (String) value; + if (selectedMapObject instanceof KeyArea) { + KeyArea area = (KeyArea) selectedMapObject; + if (area.oldSchoolRequirement) { + area.oldSchoolRequirement = false; + } + } else if (selectedMapObject instanceof ReplaceArea) { + ReplaceArea area = (ReplaceArea) selectedMapObject; + if (area.oldSchoolRequirement) { + area.oldSchoolRequirement = false; + } + } + groupObjectsListModel.objectChanged(selectedMapObject); + } } else if (source == spawngroupField) { if (selectedMapObject instanceof SpawnArea) { SpawnArea area = (SpawnArea)selectedMapObject; @@ -1973,12 +1988,20 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe KeyArea area = (KeyArea) selectedMapObject; area.requirement.changeType((Requirement.RequirementType)requirementTypeCombo.getSelectedItem()); updateRequirementParamsPane(requirementParamsPane, area.requirement, this); - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } else if (selectedMapObject instanceof ReplaceArea) { ReplaceArea area = (ReplaceArea) selectedMapObject; area.requirement.changeType((Requirement.RequirementType)requirementTypeCombo.getSelectedItem()); updateRequirementParamsPane(requirementParamsPane, area.requirement, this); - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } } else if (source == requirementObj) { if (selectedMapObject instanceof KeyArea) { @@ -1989,7 +2012,11 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } else { area.requirement.required_obj_id = null; } - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } else if (selectedMapObject instanceof ReplaceArea) { ReplaceArea area = (ReplaceArea) selectedMapObject; area.requirement.required_obj = (GameDataElement) value; @@ -1998,17 +2025,31 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } else { area.requirement.required_obj_id = null; } - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } } else if (source == requirementObjId) { if (selectedMapObject instanceof KeyArea) { KeyArea area = (KeyArea) selectedMapObject; area.requirement.required_obj_id = (String) value; area.requirement.required_obj = null; + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } else if (selectedMapObject instanceof ReplaceArea) { ReplaceArea area = (ReplaceArea) selectedMapObject; area.requirement.required_obj_id = (String) value; area.requirement.required_obj = null; + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } } else if (source == requirementValue) { if (selectedMapObject instanceof KeyArea) { @@ -2027,7 +2068,11 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe stage = quest.getStage(area.requirement.required_value); if (stage != null) stage.addBacklink(map); } - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } else if (selectedMapObject instanceof ReplaceArea) { ReplaceArea area = (ReplaceArea) selectedMapObject; Quest quest = null; @@ -2044,17 +2089,29 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe stage = quest.getStage(area.requirement.required_value); if (stage != null) stage.addBacklink(map); } - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } } else if (source == requirementNegated) { if (selectedMapObject instanceof KeyArea) { KeyArea area = (KeyArea) selectedMapObject; area.requirement.negated = (Boolean) value; - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } else if (selectedMapObject instanceof ReplaceArea) { ReplaceArea area = (ReplaceArea) selectedMapObject; area.requirement.negated = (Boolean) value; - if (area.oldSchoolRequirement) area.updateNameFromRequirementChange(); + if (area.oldSchoolRequirement) { + area.updateNameFromRequirementChange(); + skipAreaFieldEvents+=2; + areaField.setText(area.name); + } } } else if (source == sourceLayer) { selectedReplacement.sourceLayer = (String)value;