private void RemoveComponentImmediate(GameComponent component) { if (!Components.ContainsKey(component.GlobalID)) { return; } Components.Remove(component.GlobalID); if (component is IUpdateableComponent) { var type = component.GetType(); if (UpdateableComponents.ContainsKey(type)) { UpdateableComponents[type].Remove(component as IUpdateableComponent); } } if (component is IRenderableComponent) { RenderableComponents.Remove(component as IRenderableComponent); } foreach (var child in component.GetAllChildrenRecursive()) { RemoveComponentImmediate(child); } }
protected virtual void OnWindowMouseButtonPressed(object sender, MouseButtonEventArgs e) { if (e.X < 0 || e.Y < 0) { return; } RenderableComponents.ProcessMouseClick((uint)e.X, (uint)e.Y); }
protected override void InnerUpdate() { // TODO: Encapsulate music component inside vertical line var musicComponent = NonRenderableComponents.FirstOfType <MusicComponent>(); var verticalLineComponent = RenderableComponents.FirstOfType <VerticalLineComponent>(); verticalLineComponent.LocationX = (uint)(musicComponent.TimeSeconds / musicComponent.Duration * SfmlWindow.Size.X); }
protected virtual void OnWindowResized(object sender, SizeEventArgs e) { var scaleX = e.Width / SfmlWindow.GetView().Size.X; var scaleY = e.Height / SfmlWindow.GetView().Size.Y; SfmlWindow.Size = new Vector2u(e.Width, e.Height); SfmlWindow.SetView(new View(new FloatRect(0, 0, e.Width, e.Height))); RenderableComponents.Resize(scaleX, scaleY); }
public void AddComponent(IComponent component) { if (component is IRenderableComponent displayableComponent) { RenderableComponents.AddComponent(displayableComponent); } else { NonRenderableComponents.AddComponent(component); } }
protected virtual void OnWindowKeyPressed(object sender, KeyEventArgs e) { Debug.WriteLine($"Processing key {e.Code}"); if (e.Code == Keyboard.Key.Escape) { SfmlWindow.Close(); } else { RenderableComponents.ProcessKeyPress(e.Code.ToString(), e.Control, e.Alt, e.Shift); NonRenderableComponents.ProcessKeyPress(e.Code.ToString(), e.Control, e.Alt, e.Shift); } }
public virtual void Run() { NonRenderableComponents.Init(); RenderableComponents.Init(); var clock = new Clock(); SfmlWindow.SetActive(true); while (SfmlWindow.IsOpen) { SfmlWindow.DispatchEvents(); SfmlWindow.Clear(Color.Black); var dt = clock.Restart().AsSeconds(); InnerUpdate(); RenderableComponents.Update(dt); NonRenderableComponents.Update(dt); RenderableComponents.Render(SfmlWindow); SfmlWindow.Display(); } }
private void AddComponentImmediate(GameComponent component) { if (Components.ContainsKey(component.GlobalID) && Components[component.GlobalID] != component) { throw new IndexOutOfRangeException("Component was added that already exists."); } else if (!Components.ContainsKey(component.GlobalID)) { Components[component.GlobalID] = component; if (component is IUpdateableComponent) { var type = component.GetType(); if (!UpdateableComponents.ContainsKey(type)) { UpdateableComponents.Add(type, new List <IUpdateableComponent>()); } UpdateableComponents[type].Add(component as IUpdateableComponent); } if (component is IRenderableComponent) { RenderableComponents.Add(component as IRenderableComponent); } } }