public static string WriteDiscountRange(Item item, Shop shop) { if (item == null || shop == null) { return(""); } var info = new StringBuilder(); CatalogEntry entry = shop.Catalog?.Entries.FirstOrDefault(x => x.ItemId == item.Id); if (entry == null) { return(""); } if (entry.DiscountChance <= 0) { return(""); } info.Append($"(**{entry.MinDiscount ?? CatalogEntry.DefaultMinDiscount}**% to "); info.Append($"**{entry.MaxDiscount ?? CatalogEntry.DefaultMaxDiscount}**% discount range"); info.Append($", **{RangeF.Convert(0, 1, 0, 100, entry.DiscountChance):##,0.##}**% chance of discount)"); return(info.ToString()); }
public static long GetCost(long cost, int discount) { discount = Math.Clamp(discount, 0, 100); if (discount == 0) { return(cost); } float d = RangeF.Convert(0, 100, 0, 1, discount); return((long)MathF.Floor(cost * (1 - d))); }
private static long GetCost(long value, int discountUpper) { discountUpper = Math.Clamp(discountUpper, 0, 100); if (discountUpper == 0) { return(value); } float discount = RangeF.Convert(0, 100, 0, 1, discountUpper); return((long)MathF.Floor(value * (1 - discount))); }
// 0% complete. private static string GetProgress(QuestData data) { Quest quest = GetQuest(data.Id); long sum = 0; long total = 0; foreach (VarCriterion criterion in quest.Criteria) { sum += data.Progress[criterion.Id]; total += criterion.ExpectedValue; } return($"**{RangeF.Convert(0, total, 0, 100, sum):##,0}**% complete"); }
// TODO: Implement travel speed calculation. public Vector2 GetCurrentPosition(DateTime startedAt) { float elapsedSeconds = (float)((DateTime.UtcNow - startedAt).TotalSeconds); if (elapsedSeconds > GetTotalTime()) { return(To); } // a float from 0 to 1. this helps correlate position float progress = RangeF.Convert(0.0f, GetTotalTime(), 0.0f, 1.0f, elapsedSeconds); return(GetPositionAt(progress)); }
public static AffinityLevel GetLevel(float value) { return((AffinityLevel)((int)MathF.Floor(RangeF.Convert(-1.0f, 1.0f, -3, 3, RangeF.Clamp(-1.0f, 1.0f, value))))); }
private static string GetProgress(MeritGroup group, int collected, int total) => CanShowProgress(group) ? $" (`{RangeF.Convert(0, total, 0.0f, 100.0f, collected)}%`)" : "";
// gets the desired point based on the completion of this route. private Vector2 GetPositionAt(float progress) { // converts the progress into the total distance travelled based on progress. float travelled = RangeF.Convert(0.0f, 1.0f, 0.0f, GetTotalDistance(), progress); float dist = 0.0f; Vector2 from = From; int i = 0; // TODO: Create a sub-list referencing Points, and simply insert the From/To values foreach (Vector2 to in Points) { dist += CalcF.Distance(from, to); from = to; if (dist >= travelled) { break; } i++; } if (Points.Count == 0) // if there aren't any points specified { float pathProgress = RangeF.Convert(0.0f, GetTotalDistance(), 0.0f, 1.0f, travelled); return(new Vector2(RangeF.Convert(0.0f, 1.0f, From.X, To.X, pathProgress), RangeF.Convert(0.0f, 1.0f, From.Y, To.Y, pathProgress))); } else if (i == 0) // if the total travelled was less than the first checkpoint. { float pathProgress = RangeF.Convert(0.0f, GetDistanceAt(i), 0.0f, 1.0f, travelled); return(new Vector2(RangeF.Convert(0.0f, 1.0f, From.X, Points[i].X, pathProgress), RangeF.Convert(0.0f, 1.0f, From.Y, Points[i].Y, pathProgress))); } else if (dist < travelled) // if the total travelled is greater than all points { dist += CalcF.Distance(from, To); if (travelled >= dist) { return(To); } else { float pathProgress = RangeF.Convert(GetDistanceAt(i), GetTotalDistance(), 0.0f, 1.0f, travelled); return(new Vector2(RangeF.Convert(0.0f, 1.0f, Points[i].X, To.X, pathProgress), RangeF.Convert(0.0f, 1.0f, Points[i].Y, To.Y, pathProgress))); } } else // if the travelled amount if within the points specified. { float pathProgress = RangeF.Convert(GetDistanceAt(i - 1), GetDistanceAt(i), 0.0f, 1.0f, travelled); return(new Vector2(RangeF.Convert(0.0f, 1.0f, Points[i - 1].X, Points[i].X, pathProgress), RangeF.Convert(0.0f, 1.0f, Points[i - 1].Y, Points[i].Y, pathProgress))); } }
private static float GetCurrentValue(float last, float next, float progress) => RangeF.Convert(0.0f, 1.0f, last, next, progress);
private static float GetTickProgress(long last, long next, long current) => RangeF.Convert(last, next, 0.0f, 1.0f, current);