public void LoadConfig(LoadingForm loadingForm) { int statusNum = 0; // Read configuration loadingForm.UpdateStatus("Loading main configuration", statusNum++); XmlConfigParser.OpenConfig(@"Config/Config.xml"); loadingForm.UpdateStatus("Loading Miscellaneous Data", statusNum++); _miscData = XmlConfigParser.OpenWatchVarData(@"Config/MiscData.xml", "MiscDataSchema.xsd"); loadingForm.UpdateStatus("Loading Object Data", statusNum++); _objectData = XmlConfigParser.OpenWatchVarData(@"Config/ObjectData.xml", "ObjectDataSchema.xsd", "objectOffset"); loadingForm.UpdateStatus("Loading Object Associations", statusNum++); _objectAssoc = XmlConfigParser.OpenObjectAssoc(@"Config/ObjectAssociations.xml", _slotManagerGui); loadingForm.UpdateStatus("Loading Mario Data", statusNum++); _marioData = XmlConfigParser.OpenWatchVarData(@"Config/MarioData.xml", "MarioDataSchema.xsd", "marioOffset"); loadingForm.UpdateStatus("Loading Camera Data", statusNum++); _cameraData = XmlConfigParser.OpenWatchVarData(@"Config/CameraData.xml", "CameraDataSchema.xsd"); loadingForm.UpdateStatus("Loading HUD Data", statusNum++); _triangleData = XmlConfigParser.OpenWatchVarData(@"Config/TrianglesData.xml", "TrianglesDataSchema.xsd", "triangleOffset"); loadingForm.UpdateStatus("Loading Triangles Data", statusNum++); _hudData = XmlConfigParser.OpenWatchVarData(@"Config/HudData.xml", "HudDataSchema.xsd"); loadingForm.UpdateStatus("Loading Map Associations", statusNum++); _mapAssoc = XmlConfigParser.OpenMapAssoc(@"Config/MapAssociations.xml"); loadingForm.UpdateStatus("Loading Scripts", statusNum++); _scriptParser = XmlConfigParser.OpenScripts(@"Config/Scripts.xml"); loadingForm.UpdateStatus("Loading Hacks", statusNum++); _romHacks = XmlConfigParser.OpenHacks(@"Config/Hacks.xml"); loadingForm.UpdateStatus("Finishing", statusNum); }
public ObjectSlotsManager(ProcessStream stream, ObjectAssociations objAssoc, ObjectManager objManager, ObjectSlotManagerGui managerGui, MapManager mapManager, MiscManager miscManager) { ObjectAssoc = objAssoc; _stream = stream; _objManager = objManager; ManagerGui = managerGui; _mapManager = mapManager; _miscManager = miscManager; // Add MapToggleModes ManagerGui.MapObjectToggleModeComboBox.DataSource = Enum.GetValues(typeof(MapToggleModeType)); ManagerGui.MapObjectToggleModeComboBox.SelectedItem = MapToggleModeType.Single; // Add SortMethods ManagerGui.SortMethodComboBox.DataSource = Enum.GetValues(typeof(ObjectSlotsManager.SortMethodType)); ManagerGui.SortMethodComboBox.SelectedItem = SortMethodType.ProcessingOrder; // Add LabelMethods ManagerGui.LabelMethodComboBox.DataSource = Enum.GetValues(typeof(ObjectSlotsManager.SlotLabelType)); ManagerGui.LabelMethodComboBox.SelectedItem = SlotLabelType.Recommended; // Create and setup object slots ObjectSlots = new ObjectSlot[Config.ObjectSlots.MaxSlots]; for (int i = 0; i < Config.ObjectSlots.MaxSlots; i++) { var objectSlot = new ObjectSlot(i, this, ManagerGui, new Size(DefaultSlotSize, DefaultSlotSize)); ObjectSlots[i] = objectSlot; objectSlot.Click += (sender, e) => OnClick(sender, e); ManagerGui.FlowLayoutContainer.Controls.Add(objectSlot); } // Change default ChangeSlotSize(DefaultSlotSize); }
public MapManager(ProcessStream stream, MapAssociations mapAssoc, ObjectAssociations objAssoc, MapGui mapGui) { _stream = stream; MapAssoc = mapAssoc; _mapGui = mapGui; _marioMapObj = new MapObject(objAssoc.MarioMapImage, 1); _marioMapObj.UsesRotation = true; _holpMapObj = new MapObject(objAssoc.HolpImage, 2); _cameraMapObj = new MapObject(objAssoc.CameraMapImage, 1); _cameraMapObj.UsesRotation = true; _floorTriangleMapObj = new TriangleMapObject(Color.FromArgb(200, Color.Yellow), 3); }
public ObjectManager(ProcessStream stream, ObjectAssociations objAssoc, List <WatchVariable> objectData, ObjectDataGui objectGui) : base(stream, objectData, objectGui.ObjectFlowLayout) { _objGui = objectGui; _objAssoc = objAssoc; // Register controls on the control (for drag-and-drop) RegisterControlEvents(_objGui.ObjectBorderPanel); foreach (Control control in _objGui.ObjectBorderPanel.Controls) { RegisterControlEvents(control); } _objGui.ObjAddressLabelValue.Click += ObjAddressLabel_Click; _objGui.ObjAddressLabel.Click += ObjAddressLabel_Click; // Register buttons objectGui.CloneButton.Click += CloneButton_Click; objectGui.UnloadButton.Click += UnloadButton_Click; objectGui.MoveMarioToButton.Click += MoveMarioToButton_Click; objectGui.MoveToMarioButton.Click += MoveToMarioButton_Click; }
public static ObjectAssociations OpenObjectAssoc(string path, ObjectSlotManagerGui objectSlotManagerGui) { var assoc = new ObjectAssociations(); var assembly = Assembly.GetExecutingAssembly(); // Create schema set var schemaSet = new XmlSchemaSet() { XmlResolver = new ResourceXmlResolver() }; schemaSet.Add("http://tempuri.org/ReusableTypes.xsd", "ReusableTypes.xsd"); schemaSet.Add("http://tempuri.org/ObjectAssociationsSchema.xsd", "ObjectAssociationsSchema.xsd"); schemaSet.Compile(); // Load and validate document var doc = XDocument.Load(path); doc.Validate(schemaSet, Validation); // Create Behavior-ImagePath list string defaultImagePath = "", emptyImagePath = "", imageDir = "", mapImageDir = "", overlayImageDir = "", marioImagePath = "", holpMapImagePath = "", hudImagePath = "", debugImagePath = "", miscImagePath = "", cameraImagePath = "", marioMapImagePath = "", cameraMapImagePath = "", selectedOverlayImagePath = "", standingOnOverlayImagePath = "", holdingOverlayImagePath = "", interactingOverlayImagePath = "", usingOverlayImagePath = "", closestOverlayImagePath = ""; uint ramToBehaviorOffset = 0; uint marioBehavior = 0; foreach (XElement element in doc.Root.Elements()) { switch (element.Name.ToString()) { case "Config": foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString()) { case "ImageDirectory": imageDir = subElement.Value; break; case "DefaultImage": defaultImagePath = subElement.Value; break; case "MapImageDirectory": mapImageDir = subElement.Value; break; case "OverlayImageDirectory": overlayImageDir = subElement.Value; break; case "EmptyImage": emptyImagePath = subElement.Value; break; case "RamToBehaviorOffset": ramToBehaviorOffset = ParsingUtilities.ParseHex(subElement.Value); assoc.RamOffset = ramToBehaviorOffset; break; } } break; case "Mario": marioImagePath = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value; marioMapImagePath = element.Element(XName.Get("MapImage")) != null? element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value : null; assoc.MarioColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value); marioBehavior = ParsingUtilities.ParseHex(element.Attribute(XName.Get("behaviorScriptAddress")).Value); break; case "Hud": hudImagePath = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value; assoc.HudColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value); break; case "Debug": debugImagePath = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value; assoc.DebugColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value); break; case "Misc": miscImagePath = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value; assoc.MiscColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value); break; case "Camera": cameraImagePath = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value; assoc.CameraColor = ColorTranslator.FromHtml(element.Element(XName.Get("Color")).Value); cameraMapImagePath = element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value; break; case "Holp": holpMapImagePath = element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value; break; case "Overlays": foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString()) { case "Selected": selectedOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value; break; case "StandingOn": standingOnOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value; break; case "Holding": holdingOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value; break; case "Interacting": interactingOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value; break; case "Using": usingOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value; break; case "Closest": closestOverlayImagePath = subElement.Element(XName.Get("OverlayImage")).Attribute(XName.Get("path")).Value; break; } } break; case "Object": uint behaviorAddress = (ParsingUtilities.ParseHex(element.Attribute(XName.Get("behaviorScriptAddress")).Value) - ramToBehaviorOffset) & 0x00FFFFFF; uint?gfxId = null; int? subType = null, appearance = null; if (element.Attribute(XName.Get("gfxId")) != null) { gfxId = ParsingUtilities.ParseHex(element.Attribute(XName.Get("gfxId")).Value) | 0x80000000U; } if (element.Attribute(XName.Get("subType")) != null) { subType = ParsingUtilities.TryParseInt(element.Attribute(XName.Get("subType")).Value); } if (element.Attribute(XName.Get("appearance")) != null) { appearance = ParsingUtilities.TryParseInt(element.Attribute(XName.Get("appearance")).Value); } string imagePath = element.Element(XName.Get("Image")).Attribute(XName.Get("path")).Value; string mapImagePath = null; bool rotates = false; if (element.Element(XName.Get("MapImage")) != null) { mapImagePath = element.Element(XName.Get("MapImage")).Attribute(XName.Get("path")).Value; rotates = bool.Parse(element.Element(XName.Get("MapImage")).Attribute(XName.Get("rotates")).Value); } string name = element.Attribute(XName.Get("name")).Value; var watchVars = new List <WatchVariable>(); foreach (var subElement in element.Elements().Where(x => x.Name == "Data")) { var watchVar = GetWatchVariableFromElement(subElement); watchVar.OtherOffset = (subElement.Attribute(XName.Get("objectOffset")) != null) ? bool.Parse(subElement.Attribute(XName.Get("objectOffset")).Value) : false; watchVars.Add(watchVar); } var newBehavior = new ObjectBehaviorAssociation() { BehaviorCriteria = new BehaviorCriteria() { BehaviorAddress = behaviorAddress, GfxId = gfxId, SubType = subType, Appearance = appearance }, ImagePath = imagePath, MapImagePath = mapImagePath, Name = name, RotatesOnMap = rotates, WatchVariables = watchVars }; if (!assoc.AddAssociation(newBehavior)) { throw new Exception("More than one behavior address was defined."); } break; } } // Load Images // TODO: Exceptions assoc.DefaultImage = Bitmap.FromFile(imageDir + defaultImagePath); assoc.EmptyImage = Bitmap.FromFile(imageDir + emptyImagePath); assoc.MarioImage = Bitmap.FromFile(imageDir + marioImagePath); assoc.CameraImage = Bitmap.FromFile(imageDir + cameraImagePath); assoc.MarioMapImage = marioMapImagePath == "" ? assoc.MarioImage : Bitmap.FromFile(mapImageDir + marioMapImagePath); assoc.HudImage = Bitmap.FromFile(imageDir + hudImagePath); assoc.DebugImage = Bitmap.FromFile(imageDir + debugImagePath); assoc.MiscImage = Bitmap.FromFile(imageDir + miscImagePath); assoc.HolpImage = Bitmap.FromFile(mapImageDir + holpMapImagePath); assoc.CameraMapImage = Bitmap.FromFile(mapImageDir + cameraMapImagePath); assoc.MarioBehavior = marioBehavior - ramToBehaviorOffset; objectSlotManagerGui.SelectedObjectOverlayImage = Bitmap.FromFile(overlayImageDir + selectedOverlayImagePath); objectSlotManagerGui.StandingOnObjectOverlayImage = Bitmap.FromFile(overlayImageDir + standingOnOverlayImagePath); objectSlotManagerGui.HoldingObjectOverlayImage = Bitmap.FromFile(overlayImageDir + holdingOverlayImagePath); objectSlotManagerGui.InteractingObjectOverlayImage = Bitmap.FromFile(overlayImageDir + interactingOverlayImagePath); objectSlotManagerGui.UsingObjectOverlayImage = Bitmap.FromFile(overlayImageDir + usingOverlayImagePath); objectSlotManagerGui.ClosestObjectOverlayImage = Bitmap.FromFile(overlayImageDir + closestOverlayImagePath); foreach (var obj in assoc.BehaviorAssociations) { if (obj.ImagePath == null || obj.ImagePath == "") { continue; } using (var preLoad = Bitmap.FromFile(imageDir + obj.ImagePath)) { float scale = Math.Max(preLoad.Height / 128f, preLoad.Width / 128f); obj.Image = new Bitmap(preLoad, new Size((int)(preLoad.Width / scale), (int)(preLoad.Height / scale))); } if (obj.MapImagePath == "" || obj.MapImagePath == null) { obj.MapImage = obj.Image; } else { using (var preLoad = Bitmap.FromFile(mapImageDir + obj.MapImagePath)) { float scale = Math.Max(preLoad.Height / 128f, preLoad.Width / 128f); obj.MapImage = new Bitmap(preLoad, new Size((int)(preLoad.Width / scale), (int)(preLoad.Height / scale))); } } obj.TransparentImage = obj.Image.GetOpaqueImage(0.5f); obj.TransparentMapImage = obj.Image.GetOpaqueImage(0.5f); } return(assoc); }
public void AssociateWithObject(TreeListViewRow destination) { try { foreach (var objectItem in ObjectViewModelLocator.GetObjectVM().SelectedItems) { switch (Globals.DraggedItem.Type) { case "Template": foreach (var templateItem in TemplateViewModelLocator.GetTemplateVM().SelectedItems) { ObjectAssociationModel objectAssociationItem = new ObjectAssociationModel { IsNew = true, IsChanged = false, IsDeleted = false, ID = Guid.NewGuid(), Project_ID = Globals.Project_ID, Object_ID = objectItem.ID, AssociationType = Globals.DraggedItem.Type, Value = "", ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>(), }; objectAssociationItem.Association_ID = templateItem.ID; objectAssociationItem.Name = templateItem.TemplateName; objectAssociationItem.Description = templateItem.Description; objectAssociationItem.AssociationType_ID = templateItem.TemplateType_ID; foreach (var childItem in templateItem.ChildTemplates) { ObjectAssociationModel objectAssociationChildItem = new ObjectAssociationModel { IsNew = true, IsChanged = false, IsDeleted = false, ID = Guid.NewGuid(), AssociationType = "Template", Project_ID = Globals.Project_ID, Object_ID = objectItem.ID, Association_ID = childItem.ID, Name = childItem.TemplateName, Description = childItem.Description, AssociationType_ID = childItem.TemplateType_ID, Value = "", ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>() }; objectAssociationItem.ChildAssociations.Add(objectAssociationChildItem); LoadTemplateProperties(objectAssociationChildItem); } ; ObjectAssociations.Add(objectAssociationItem); LoadTemplateProperties(objectAssociationItem); } break; case "Property": foreach (var propertyItem in PropertyViewModelLocator.GetPropertyVM().SelectedItems) { ObjectAssociationModel objectAssociationItem = new ObjectAssociationModel { IsNew = true, IsChanged = false, IsDeleted = false, ID = Guid.NewGuid(), Project_ID = Globals.Project_ID, Object_ID = objectItem.ID, AssociationType = Globals.DraggedItem.Type, Value = "", ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>(), }; objectAssociationItem.Association_ID = propertyItem.ID; objectAssociationItem.Name = propertyItem.PropertyName; objectAssociationItem.Description = propertyItem.Description; objectAssociationItem.AssociationType_ID = propertyItem.PropertyType_ID; foreach (var childItem in propertyItem.ChildProperties) { ObjectAssociationModel objectAssociationChildItem = new ObjectAssociationModel { IsNew = true, IsChanged = false, IsDeleted = false, AssociationType = "Property", Project_ID = Globals.Project_ID, Object_ID = objectItem.ID, Association_ID = childItem.ID, Name = childItem.PropertyName, Description = childItem.Description, AssociationType_ID = childItem.PropertyType_ID, Value = "", ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>() }; objectAssociationItem.ChildAssociations.Add(objectAssociationChildItem); } ObjectAssociations.Add(objectAssociationItem); } break; } } } catch (Exception ex) { RadWindow.Alert(ex.Message); } }
/// <summary> /// /// </summary> public void Refresh() { ObjectAssociations.Clear(); Load(null); FilteredObjectAssociations.View.Refresh(); }
private void Load(Guid?associationParent_ID) { // Check if the templates and properties have ben loaded. Necessary because of the various background workers //while (!TemplateViewModelLocator.IsLoaded() || !PropertyViewModelLocator.IsLoaded()); try { using (EDBEntities eDB = new EDBEntities()) { foreach (tblObjectAssociation Rec in (from o in eDB.tblObjectAssociations where (o.Project_ID == Globals.Project_ID) orderby o.AssociationType select o)) { ObjectAssociationModel objectAssociationItem = new ObjectAssociationModel { ID = Rec.ID, Project_ID = Rec.Project_ID, Object_ID = Rec.Object_ID, Association_ID = Rec.Association_ID, AssociationType = Rec.AssociationType, IsChanged = false, IsNew = false, IsDeleted = false, ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>() }; switch (objectAssociationItem.AssociationType) { case "Template": // Get detail info of the template var templateItem = TemplateViewModelLocator.GetTemplateVM().GetTemplate(objectAssociationItem.Association_ID, null); if (templateItem != null) { objectAssociationItem.Name = templateItem.TemplateName; objectAssociationItem.Description = templateItem.Description; objectAssociationItem.AssociationType_ID = templateItem.TemplateType_ID; // and get any child items foreach (var childItem in templateItem.ChildTemplates) { ObjectAssociationModel item = new ObjectAssociationModel { ID = Rec.ID, Project_ID = childItem.Project_ID, Object_ID = objectAssociationItem.Object_ID, Association_ID = childItem.ID, Name = childItem.TemplateName, Description = childItem.Description, AssociationType = "Template", AssociationType_ID = childItem.TemplateType_ID, ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>() }; objectAssociationItem.ChildAssociations.Add(item); LoadTemplateProperties(item); } LoadTemplateProperties(objectAssociationItem); } else { throw new System.InvalidOperationException(String.Format("Association without source\nTemplate ID: {0}\nFix in database", objectAssociationItem.Association_ID)); } break; case "Property": var propertyItem = PropertyViewModelLocator.GetPropertyVM().GetProperty(objectAssociationItem.Association_ID, null); if (propertyItem != null) { objectAssociationItem.Name = propertyItem.PropertyName; objectAssociationItem.Description = propertyItem.Description; objectAssociationItem.AssociationType_ID = propertyItem.PropertyType_ID; // If the Object Association has a value in the table, use this as the associated value // otherwise use the value defined in the property if (!String.IsNullOrEmpty(Rec.Value)) { objectAssociationItem.Value = Rec.Value; } else { objectAssociationItem.Value = propertyItem.Value; } foreach (var childItem in propertyItem.ChildProperties) { ObjectAssociationModel item = new ObjectAssociationModel { ID = Rec.ID, Project_ID = childItem.Project_ID, Object_ID = objectAssociationItem.Object_ID, Association_ID = childItem.ID, Name = childItem.PropertyName, Description = childItem.Description, AssociationType = "Property", AssociationType_ID = childItem.PropertyType_ID, ChildAssociations = new TD.ObservableItemCollection <ObjectAssociationModel>() }; objectAssociationItem.ChildAssociations.Add(item); } } else { throw new System.InvalidOperationException(String.Format("Association without source\nProperty ID: {0}\nFix in database", objectAssociationItem.Association_ID)); } break; case "TemplateProperty": break; } ObjectAssociations.Add(objectAssociationItem); } } } catch (Exception ex) { Application.Current.Dispatcher.Invoke((Action) delegate { RadWindow.Alert(ex.Message); }); } }