public MapAllObjectsWithNameObject(ObjectBehaviorAssociation assoc) : base() { _objName = assoc.Name; _objImage = assoc.Image; _objMapImage = assoc.MapImage; InternalRotates = assoc.RotatesOnMap; }
public static MapAllObjectsWithNameObject Create(string objName) { if (objName == null) { return(null); } ObjectBehaviorAssociation assoc = Config.ObjectAssociations.GetObjectAssociation(objName); if (assoc == null) { return(null); } return(new MapAllObjectsWithNameObject(assoc)); }
protected override List <(float centerX, float centerZ, float radius, float minY, float maxY, Color color)> Get3DDimensions() { uint objAddress = _posAngle.GetObjAddress(); ObjectDataModel obj = new ObjectDataModel(objAddress); ObjectBehaviorAssociation assoc = Config.ObjectAssociations.FindObjectAssociation(obj.BehaviorCriteria); if (assoc == null || assoc.PushHitbox == null) { return(new List <(float centerX, float centerZ, float radius, float minY, float maxY, Color color)>()); } (float radius, float minY, float maxY) = assoc.PushHitbox.GetDetails(objAddress); return(new List <(float centerX, float centerZ, float radius, float minY, float maxY, Color color)>() { ((float)_posAngle.X, (float)_posAngle.Z, radius, minY, maxY, Color) }); }
public static MapMultipleObjects CreateByName() { string objName = DialogUtilities.GetStringFromDialog(labelText: "Enter the name of the object."); if (objName == null) { return(null); } ObjectBehaviorAssociation assoc = Config.ObjectAssociations.GetObjectAssociation(objName); if (assoc == null) { return(null); } var objByName = new MapMultipleObjects("All " + assoc.Name, assoc.Image, assoc.MapImage); objByName.predicate = _ => _.BehaviorAssociation.Name == objName; return(objByName); }
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); }