public override void Update() { ObjectDataModel obj = DataModels.Objects[_slotIndex]; if (obj == null) { return; } string objectName = Config.ObjectAssociations.GetObjectName(obj.BehaviorCriteria); uint address = ObjectUtilities.GetObjectAddress(_slotIndex); string slotLabel = Config.ObjectSlotsManager.GetDescriptiveSlotLabelFromAddress(address, true); Name = String.Format("[{0}] {1}", slotLabel, objectName); BackColor = ObjectUtilities.GetProcessingGroupColorForObjAddress(address); Displayed = GetDisplayed(); Bitmap currentGraphics = Config.ObjectAssociations.GetObjectMapImage(obj.BehaviorCriteria) as Bitmap; if (currentGraphics != BitmapImage) { BitmapImage = currentGraphics; _iconGraphics.ChangeImage(currentGraphics); Rotates = Config.ObjectAssociations.GetObjectMapRotates(obj.BehaviorCriteria); } _iconGraphics.Rotation = Rotates ? (float)MoreMath.AngleUnitsToRadians(obj.FacingYaw) : 0; _iconGraphics.Position = new OpenTK.Vector3(obj.X, obj.Y, obj.Z); }
public static Color GetProcessingGroupColorForObjAddress(uint address) { ObjectDataModel obj = Config.ObjectSlotsManager.GetObjectFromAddress(address); byte? processGroup = obj?.CurrentProcessGroup; Color color = ObjectSlotsConfig.GetProcessingGroupColor(processGroup); return(color); }
public static Color GetColor(ObjectDataModel obj) { int?numRngUsages = GetNumRngUsages(obj); if (!numRngUsages.HasValue) { return(ObjectSlotsConfig.VacantSlotColor); } int index = MoreMath.Clamp(numRngUsages.Value, 0, ObjectSlotsConfig.RngUsageColors.Count - 1); return(ObjectSlotsConfig.RngUsageColors[index]); }
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 int?GetNumRngUsages(ObjectDataModel obj) { if (obj == null) { return(null); } int?objIndex = ObjectUtilities.GetObjectIndex(obj.Address); if (!objIndex.HasValue) { return(null); } uint memoryOffset = (uint)objIndex.Value * 4; return(Config.Stream.GetInt(0x803678A0 + memoryOffset)); }
public string GetSlotLabelFromObject(ObjectDataModel obj) { if (obj == null) { return(null); } switch (LabelMethod) { case SlotLabelType.Recommended: if (SortMethod == SortMethodType.MemoryOrder) { goto case SlotLabelType.SlotIndex; } else { goto case SlotLabelType.SlotPosVs; } case SlotLabelType.SlotIndex: return(String.Format("{0}", (obj.Address - ObjectSlotsConfig.ObjectSlotsStartAddress) / ObjectConfig.StructSize + (SavedSettingsConfig.StartSlotIndexsFromOne ? 1 : 0))); case SlotLabelType.SlotPos: return(String.Format("{0}", _lockedSlotIndices[obj.Address].Item1 + (SavedSettingsConfig.StartSlotIndexsFromOne ? 1 : 0))); case SlotLabelType.SlotPosVs: var vacantSlotIndex = _lockedSlotIndices[obj.Address].Item2; if (!vacantSlotIndex.HasValue) { goto case SlotLabelType.SlotPos; } return(String.Format("VS{0}", vacantSlotIndex.Value + (SavedSettingsConfig.StartSlotIndexsFromOne ? 1 : 0))); case SlotLabelType.RngUsage: return(ObjectRngUtilities.GetNumRngUsagesAsString(obj)); default: return(""); } }
protected override object HandleObjectUndisplaying(object value) { string slotName = value.ToString().ToLower(); if (slotName == "(no object)" || slotName == "no object") { return(0); } if (slotName == "(unused object)" || slotName == "unused object") { return(ObjectSlotsConfig.UnusedSlotAddress); } if (!slotName.StartsWith("slot")) { return(value); } slotName = slotName.Remove(0, "slot".Length); slotName = slotName.Trim(); ObjectDataModel obj = Config.ObjectSlotsManager.GetObjectFromLabel(slotName); return(obj != null ? obj.Address : value); }
private bool GetDisplayed() { ObjectDataModel obj = DataModels.Objects[_slotIndex]; switch (VisibilityType) { case MapTrackerVisibilityType.VisibleAlways: return(true); case MapTrackerVisibilityType.VisibleWhenLoaded: return(obj.IsActive); case MapTrackerVisibilityType.VisibleWhenThisBhvrIsLoaded: if (!_visibilityBehaviorCriteria.HasValue) { return(false); } return(obj.IsActive && obj.BehaviorCriteria == _visibilityBehaviorCriteria); default: throw new ArgumentOutOfRangeException(); } }
public MapObjectObject(uint objAddress) : base() { _obj = new ObjectDataModel(objAddress); _posAngle = PositionAngle.Obj(objAddress); }
/* * Returns a string that's either: * - the slot label if a slot has the address * - null if no slot has the address */ public string GetSlotLabelFromAddress(uint objAddress) { ObjectDataModel obj = GetObjectFromAddress(objAddress); return(GetSlotLabelFromObject(obj)); }
public int?GetSlotIndexFromObj(ObjectDataModel obj) { return(ObjectSlots.FirstOrDefault(o => o.CurrentObject?.Equals(obj) ?? false)?.Index); }
public MapObjectObject(PositionAngle posAngle) : base() { _obj = new ObjectDataModel(posAngle.GetObjAddress()); _posAngle = PositionAngle.Obj(posAngle.GetObjAddress()); }
/* * Returns a string that's either: * - the slot label if a slot has the address * - null if no slot has the address */ public string GetSlotLabelFromAddress(uint objAddress) { ObjectDataModel obj = GetObjectFromAddress(objAddress); return(Config.ObjectSlotsManager.GetSlotLabelFromObject(obj)); }
public static string GetNumRngUsagesAsString(ObjectDataModel obj) { int?numUsages = GetNumRngUsages(obj); return(numUsages?.ToString() ?? ""); }