public int ApplySpeedMod(Entity source, SpeedModType type, float timeout) { var mod = SpeedModifier.GenerateUnique(type, timeout); mod.Owner = source; if (timeout > 0) { RevokeAllSpeedMods(source); } _speedMods.Add(mod); RecalculateSpeed(); return mod.ID; }
public static SpeedModifier GenerateUnique(SpeedModType type, float timeout) { var id = 0; while (UsedIDs.Contains(id)) { id++; } UsedIDs.Add(id); switch (type) { case SpeedModType.NoSpeed: return new SpeedModifier(Static, id, timeout); case SpeedModType.DoubleSpeed: return new SpeedModifier(DoubleSpeed, id, timeout); case SpeedModType.QuarterSlower: return new SpeedModifier(QuarterSlower, id, timeout); case SpeedModType.QuarterFaster: return new SpeedModifier(QuarterFaster, id, timeout); case SpeedModType.HalfSlower: return new SpeedModifier(HalfSlower, id, timeout); case SpeedModType.HalfFaster: return new SpeedModifier(HalfFaster, id, timeout); default: throw new ArgumentOutOfRangeException("type", type, null); } }