Пример #1
0
        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);
            }
        }
Пример #2
0
 protected virtual void OnWindowMouseButtonPressed(object sender, MouseButtonEventArgs e)
 {
     if (e.X < 0 || e.Y < 0)
     {
         return;
     }
     RenderableComponents.ProcessMouseClick((uint)e.X, (uint)e.Y);
 }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 public void AddComponent(IComponent component)
 {
     if (component is IRenderableComponent displayableComponent)
     {
         RenderableComponents.AddComponent(displayableComponent);
     }
     else
     {
         NonRenderableComponents.AddComponent(component);
     }
 }
Пример #6
0
 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);
     }
 }
Пример #7
0
        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();
            }
        }
Пример #8
0
 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);
         }
     }
 }