public static TimedValueInstanceList Load(TagCompound tag) { var instanceList = new TimedValueInstanceList { totalValue = tag.GetFloat("totalValue"), instances = new LinkedList <TimedValueInstance>(tag.GetList <TimedValueInstance>("instances")) }; return(instanceList); }
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); } }