private void resetSelected() { foreach (var c in Children) { ScrollingTeam st = c as ScrollingTeam; if (st == null) { continue; } if (st.Selected) { st.Selected = false; RemoveTeam(st.Team); } } }
public void RemoveTeam(Country team) { availableTeams.Remove(team); foreach (var c in Children) { ScrollingTeam st = c as ScrollingTeam; if (st == null) { continue; } if (st.Team == team) { st.FadeOut(200); st.Expire(); } } }
private void setScrollState(ScrollState newState) { if (scrollState == newState) { return; } delayedStateChangeDelegate?.Cancel(); switch (scrollState = newState) { case ScrollState.Scrolling: resetSelected(); OnScrollStarted?.Invoke(); speedTo(1000f, 200); tracker.FadeOut(100); break; case ScrollState.Stopping: speedTo(0f, 2000); tracker.FadeIn(200); delayedStateChangeDelegate = Scheduler.AddDelayed(() => setScrollState(ScrollState.Stopped), 2300); break; case ScrollState.Stopped: // Find closest to center if (!Children.Any()) { break; } ScrollingTeam closest = null; foreach (var c in Children) { if (!(c is ScrollingTeam stc)) { continue; } if (closest == null) { closest = stc; continue; } float o = Math.Abs(c.Position.X + c.DrawWidth / 2f - DrawWidth / 2f); float lastOffset = Math.Abs(closest.Position.X + closest.DrawWidth / 2f - DrawWidth / 2f); if (o < lastOffset) { closest = stc; } } Trace.Assert(closest != null, "closest != null"); // ReSharper disable once PossibleNullReferenceException offset += DrawWidth / 2f - (closest.Position.X + closest.DrawWidth / 2f); ScrollingTeam st = closest; availableTeams.RemoveAll(at => at == st.Team); st.Selected = true; OnSelected?.Invoke(st.Team); delayedStateChangeDelegate = Scheduler.AddDelayed(() => setScrollState(ScrollState.Idle), 10000); break; case ScrollState.Idle: resetSelected(); OnScrollStarted?.Invoke(); speedTo(40f, 200); tracker.FadeOut(100); break; } }