Beispiel #1
0
        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);
        }
Beispiel #2
0
        public static Color GetProcessingGroupColorForObjAddress(uint address)
        {
            ObjectDataModel obj          = Config.ObjectSlotsManager.GetObjectFromAddress(address);
            byte?           processGroup = obj?.CurrentProcessGroup;
            Color           color        = ObjectSlotsConfig.GetProcessingGroupColor(processGroup);

            return(color);
        }
Beispiel #3
0
        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)
            });
        }
Beispiel #5
0
        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);
        }
Beispiel #8
0
        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();
            }
        }
Beispiel #9
0
 public MapObjectObject(uint objAddress)
     : base()
 {
     _obj      = new ObjectDataModel(objAddress);
     _posAngle = PositionAngle.Obj(objAddress);
 }
Beispiel #10
0
        /*
         * 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));
        }
Beispiel #11
0
 public int?GetSlotIndexFromObj(ObjectDataModel obj)
 {
     return(ObjectSlots.FirstOrDefault(o => o.CurrentObject?.Equals(obj) ?? false)?.Index);
 }
Beispiel #12
0
 public MapObjectObject(PositionAngle posAngle)
     : base()
 {
     _obj      = new ObjectDataModel(posAngle.GetObjAddress());
     _posAngle = PositionAngle.Obj(posAngle.GetObjAddress());
 }
Beispiel #13
0
        /*
         * 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));
        }
Beispiel #14
0
        public static string GetNumRngUsagesAsString(ObjectDataModel obj)
        {
            int?numUsages = GetNumRngUsages(obj);

            return(numUsages?.ToString() ?? "");
        }