Пример #1
0
            public static TimedValueInstanceList Load(TagCompound tag)
            {
                var instanceList = new TimedValueInstanceList
                {
                    totalValue = tag.GetFloat("totalValue"),
                    instances  = new LinkedList <TimedValueInstance>(tag.GetList <TimedValueInstance>("instances"))
                };

                return(instanceList);
            }
Пример #2
0
        public void AddInstance(Type type, float value, int durationTicks)
        {
            TimedValueInstanceList timedValueInstanceList;

            if (!instances.TryGetValue(type, out timedValueInstanceList))
            {
                timedValueInstanceList = new TimedValueInstanceList();
                instances.Add(type, timedValueInstanceList);
            }
            TimedValueInstance instance = new TimedValueInstance(Main.GameUpdateCount + (uint)durationTicks, value);

            if (typeof(InstanceType.IStack).IsAssignableFrom(type))
            {
                timedValueInstanceList.totalValue += value;
            }
            else if (typeof(InstanceType.IGetMinValue).IsAssignableFrom(type))
            {
                if (value < timedValueInstanceList.totalValue)
                {
                    timedValueInstanceList.totalValue = value;
                }
            }
            else
            {
                if (value > timedValueInstanceList.totalValue)
                {
                    timedValueInstanceList.totalValue = value;
                }
            }

            //Add instance into list sorted
            LinkedListNode <TimedValueInstance> lastNode = timedValueInstanceList.instances.Last;

            while (lastNode != null && instance.endTime < lastNode.Value.endTime)
            {
                lastNode = lastNode.Previous;
            }

            if (lastNode == null)
            {
                timedValueInstanceList.instances.AddFirst(instance);
            }
            else if (instance.endTime >= lastNode.Value.endTime)
            {
                timedValueInstanceList.instances.AddAfter(lastNode, instance);
            }
        }