Browse Source

♻️ Refactor handlers

- Change their design pattern from static classes to singletons.
Pedro Schneider 3 years ago
parent
commit
02479064c8
3 changed files with 64 additions and 65 deletions
  1. 19 19
      index.html
  2. 22 25
      pandora/handlers/AssetHandler.js
  3. 23 21
      pandora/handlers/GameHandler.js

+ 19 - 19
index.html

@@ -11,42 +11,42 @@
     <!--******************************
       p5Js Modules
     *******************************-->
-    <script src="libraries/p5.min.js"></script>
-    <script src="libraries/p5.sound.min.js"></script>
-    <script src="libraries/p5.dom.min.js"></script>
+    <script type="text/javascript" src="libraries/p5.min.js"></script>
+    <script type="text/javascript" src="libraries/p5.sound.min.js"></script>
+    <script type="text/javascript" src="libraries/p5.dom.min.js"></script>
 
     <!--******************************
       Pandora Engine
     *******************************-->
     <!-- Components -->
-    <script src="pandora/components/Ellipse.js"></script>
-    <script src="pandora/components/Rect.js"></script>
-    <script src="pandora/components/Vector2.js"></script>
+    <script type="text/javascript" src="pandora/components/Ellipse.js"></script>
+    <script type="text/javascript" src="pandora/components/Rect.js"></script>
+    <script type="text/javascript" src="pandora/components/Vector2.js"></script>
     
     <!-- Game Objects -->
-    <script src="pandora/game_objects/GameObject.js"></script>
+    <script type="text/javascript" src="pandora/game_objects/GameObject.js"></script>
     <!-- 2D Game Objects -->
-    <script src="pandora/game_objects/2d_objects/Object2D.js"></script>
-    <script src="pandora/game_objects/2d_objects/Shape2D.js"></script>
-    <script src="pandora/game_objects/2d_objects/Sprite2D.js"></script>
+    <script type="text/javascript" src="pandora/game_objects/2d_objects/Object2D.js"></script>
+    <script type="text/javascript" src="pandora/game_objects/2d_objects/Shape2D.js"></script>
+    <script type="text/javascript" src="pandora/game_objects/2d_objects/Sprite2D.js"></script>
     <!-- UI Game Objects -->
-    <script src="pandora/game_objects/ui_objects/UIObject.js"></script>
-    <script src="pandora/game_objects/ui_objects/Button.js"></script>
+    <script type="text/javascript" src="pandora/game_objects/ui_objects/UIObject.js"></script>
+    <script type="text/javascript" src="pandora/game_objects/ui_objects/Button.js"></script>
 
     <!-- Handlers -->
-    <script src="pandora/handlers/GameHandler.js"></script>
-    <script src="pandora/handlers/AssetHandler.js"></script>
+    <script type="text/javascript" src="pandora/handlers/GameHandler.js"></script>
+    <script type="text/javascript" src="pandora/handlers/AssetHandler.js"></script>
 
     <!-- Resources -->
-    <script src="pandora/resources/AudioRes.js"></script>
-    <script src="pandora/resources/FontRes.js"></script>
-    <script src="pandora/resources/TextureRes.js"></script>
+    <script type="text/javascript" src="pandora/resources/AudioRes.js"></script>
+    <script type="text/javascript" src="pandora/resources/FontRes.js"></script>
+    <script type="text/javascript" src="pandora/resources/TextureRes.js"></script>
     
     <!-- Singletons -->
-    <script src="pandora/Enums.js"></script>
+    <script type="text/javascript" src="pandora/Enums.js"></script>
   </head>
   
   <body>
-    <script src="src/sketch.js"></script>
+    <script type="text/javascript" src="src/sketch.js"></script>
   </body>
 </html>

+ 22 - 25
pandora/handlers/AssetHandler.js

@@ -1,8 +1,9 @@
-class AssetHandler
-{
-    static cachedTextures = [];
+const AssetHandler = {
+    cachedTextures: [],
+    cachedAudio: [],
+    cachedFonts: [],
 
-    static loadTexture(name, link)
+    loadTexture: function(name, link)
     {
         let textRes = new TextureRes(name, null);
         this.cachedTextures.push(textRes);
@@ -10,9 +11,9 @@ class AssetHandler
         {
             textRes.P5Image = img;
         });
-    }
+    },
 
-    static getTextureByName(name)
+    getTextureByName: function(name)
     {
         for (let i = 0; i < this.cachedTextures.length; i++)
         {
@@ -22,9 +23,9 @@ class AssetHandler
             }
         }
         return null;
-    }
+    },
 
-    static getP5ImageByName(name)
+    getP5ImageByName: function(name)
     {
         for (let i = 0; i < this.cachedTextures.length; i++)
         {
@@ -34,17 +35,15 @@ class AssetHandler
             }
         }
         return null;
-    }
+    },
 
-    static cachedAudio = [];
-
-    static loadAudio(name, link)
+    loadAudio: function(name, link)
     {
         let audio = createAudio(link);
         this.cachedAudio.push(new AudioRes(name, audio));
-    }
+    },
 
-    static getAudioByName(name)
+    getAudioByName: function(name)
     {
         for (let i = 0; i < this.cachedAudio.length; i++)
         {
@@ -54,9 +53,9 @@ class AssetHandler
             }
         }
         return null;
-    }
+    },
 
-    static getP5AudioByName(name)
+    getP5AudioByName: function(name)
     {
         for (let i = 0; i < this.cachedAudio.length; i++)
         {
@@ -66,11 +65,9 @@ class AssetHandler
             }
         }
         return null;
-    }
+    },
 
-    static cachedFonts = [];
-    
-    static loadFont(name, link)
+    loadFont: function(name, link)
     {
         let fontRes = new FontRes(name, null);
         this.cachedFonts.push(fontRes);
@@ -78,9 +75,9 @@ class AssetHandler
         {
             fontRes.P5Font = font;
         })
-    }
+    },
 
-    static getFontByName(name)
+    getFontByName: function(name)
     {
         for (let i = 0; i < this.cachedFonts.length; i++)
         {
@@ -90,9 +87,9 @@ class AssetHandler
             }
         }
         return null;
-    }
+    },
 
-    static getP5FontByName(name)
+    getP5FontByName: function(name)
     {
         for (let i = 0; i < this.cachedFonts.length; i++)
         {
@@ -103,4 +100,4 @@ class AssetHandler
         }
         return null;
     }
-}
+};

+ 23 - 21
pandora/handlers/GameHandler.js

@@ -1,21 +1,25 @@
-class GameHandler
-{
-    static rootObjects = []
-    static nextId = 0;
+const GameHandler = {
+    nextId: 0,
+    rootObjects: [],
 
-    static renderMode = null;
-    static setRenderMode(mode)
+    renderMode: null,
+
+    bDrawDebugFPS: false,
+
+    prevMillis: 0,
+    delta: 0,
+
+    setRenderMode: function(mode)
     {
         this.renderMode = mode;
-    }
+    },
 
-    static bDrawDebugFPS = false;
-    static drawDebugFPS(val)
+    drawDebugFPS(val)
     {
         this.bDrawDebugFPS = val;
-    }
+    },
 
-    static init(fps = 60)
+    init: function(fps = 60)
     {
         if (!this.renderMode) this.renderMode = RENDER_MODES.P2D;
         switch (this.renderMode)
@@ -30,29 +34,27 @@ class GameHandler
         }
         frameRate(fps);
         smooth();
-    }
+    },
 
-    static instanceGameObject(obj)
+    instanceGameObject: function(obj)
     {
         obj.id = this.nextId;
         this.nextId++;
-    }
+    },
 
-    static addRootObject(obj)
+    addRootObject: function(obj)
     {
         this.rootObjects.push(obj);
-    }
+    },
 
-    static prevMillis = 0;
-    static delta = 0;
-    static update()
+    update: function()
     {
         this.delta = (millis() - this.prevMillis) / 1000;
         for (let i = 0; i < this.rootObjects.length; i++)
             this.rootObjects[i].update(this.delta);
-    }
+    },
 
-    static draw()
+    draw: function()
     {
         if (this.renderMode == RENDER_MODES.WEBGL) translate(-windowWidth / 2, -windowHeight / 2);
         if (this.bDrawDebugFPS)