public varChange this[statPart stat, bool setAll] { get { switch (stat) { case statPart.CURRENT: return currentChange; case statPart.MAX: return maxChange; case statPart.REGEN: return regenChange; default: return null; } } set { switch (stat) { case statPart.CURRENT: if (setAll) { currentChange = value; } else { currentChange += value; } break; case statPart.MAX: maxChange = setAll ? value : maxChange + value; break; case statPart.REGEN: regenChange = setAll ? value : regenChange + value; break; } } }
//Indexed Properties public float this[statPart stat] { get { switch (stat) { case statPart.CURRENT: return this.currentValue; case statPart.MAX: return this.maxValue; case statPart.REGEN: return this.regenPerSecond; default: return -1; } } set//TODO:add more checks to set { switch (stat) { case statPart.CURRENT: if (value > maxValue) value = maxValue; if (currentChange != null) currentChange(value, value - currentValue); currentValue = value; break; case statPart.MAX: if (maxChange != null) maxChange(value, value - maxValue); maxValue = value; break; case statPart.REGEN: if (regenChange != null) regenChange(value, value - regenPerSecond); regenPerSecond = value; break; } } }