]> git.lizzy.rs Git - dragonblocks.git/blobdiff - engine/player.js
Code style overhaul
[dragonblocks.git] / engine / player.js
index 493c52290f5fb9b1f780cc5fdc3b9be596409eb2..5ea986cc29f536a7c11f0539d0d6cfcebf7c48ff 100644 (file)
@@ -1,24 +1,24 @@
 /*
  * player.js
- * 
+ *
  * Copyright 2020 Elias Fleckenstein <eliasfleckenstein@web.de>
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
- * 
- * 
+ *
+ *
  */
 dragonblocks.registerTool({
        name: "dragonblocks:hand",
@@ -56,43 +56,62 @@ dragonblocks.registerEntity({
                creative: false,
        }
 });
+
 dragonblocks.Player = class extends dragonblocks.SpawnedEntity{
-       constructor(){
-               if(dragonblocks.worldIsLoaded){
-                       super(dragonblocks.world.spawnedEntities.filter(entity => { return entity.name == "dragonblocks:player" })[0]);
-                       dragonblocks.world.spawnedEntities = dragonblocks.world.spawnedEntities.filter(entity => { return entity.name != "dragonblocks:player" });
-               }
-               else
+       constructor()
+       {
+               if (dragonblocks.worldIsLoaded) {
+                       super(dragonblocks.world.spawnedEntities.filter(entity => {
+                               return entity.name == "dragonblocks:player";
+                       })[0]);
+
+                       dragonblocks.world.spawnedEntities = dragonblocks.world.spawnedEntities.filter(entity => {
+                               return entity.name != "dragonblocks:player";
+                       });
+               } else {
                        super(dragonblocks.entities["dragonblocks:player"], dragonblocks.map.width / 2, 5);
-               dragonblocks.player = this;
+               }
+
                let self = this;
+
                // Skin
                this.skin = this.meta.skin;
+
                // Inventory
-               this.tmp.inventory = new dragonblocks.InventoryGroup();                 // Create Inventory Group that can hold multible Inventories
+               this.tmp.inventory = new dragonblocks.InventoryGroup();                                                                 // Create Inventory Group that can hold multible Inventories
+
                // Main Inventory
-               this.tmp.mainInventory = new dragonblocks.Inventory(32, 8);             // The Standard Inventory
-               for(let stack of this.tmp.mainInventory.list){
-                       stack.addUpdateListener(_ => {
-                               if(dragonblocks.player.gamemode == "creative" && stack.count > 1)               // Keep itemcount of every stack at one when in creative
-                                       stack.count = 1;
-                       });
-               }
-               if(this.meta.mainInventory)
-                       this.tmp.mainInventory.parse(this.meta.mainInventory);                  // Load saved Inventory
-               this.tmp.mainInventory.addUpdateListener(_ => {
-                       self.meta.mainInventory = this.tmp.mainInventory.stringify();                   // Save inventory after every change
+               this.tmp.mainInventory = new dragonblocks.Inventory(32, 8);                                                             // The Main Inventory
+
+               if (this.meta.mainInventory)
+                       this.tmp.mainInventory.deserialize(this.meta.mainInventory);                                            // Load saved Inventory
+
+               this.tmp.mainInventory.addEventListener("updateStack", event => {
+                       self.meta.mainInventory = this.tmp.mainInventory.serialize();                                           // Save inventory after every change
+
+                       if (self.gamemode == "creative" && event.stack.count > 1)                       // Keep itemcount of every stack at one when in creative
+                               event.stack.count = 1;
                });
-               this.tmp.mainInventory.addUpdateListener(_ => {
-                       if(self.tmp.hudbar)
+
+               this.tmp.mainInventory.addEventListener("updateStack", _ => {
+                       if (self.tmp.hudbar)
                                self.tmp.hudbar.update();
                });
+
                // Hudbar
-               this.tmp.hudbar = new dragonblocks.Hudbar(this.tmp.mainInventory, 8);           // The hudbar has 8 slots
+               this.tmp.hudbar = new dragonblocks.Hudbar(this.tmp.mainInventory, 8);                                   // The hudbar has 8 slots
+
                // Creative Inventory
                let creativelist = [];
-               dragonblocks.registeredItems.filter(item => {return ! item.hidden}).forEach(item => {creativelist.push(item.name)});
-               this.tmp.creativeInventory = new dragonblocks.CreativeInventory(32, creativelist, 8);           // The creative Inventory contains every registered item that is not marked as hidden
+
+               dragonblocks.registeredItems.filter(item => {
+                       return ! item.hidden;
+               }).forEach(item => {
+                       creativelist.push(item.name);
+               });
+
+               this.tmp.creativeInventory = new dragonblocks.CreativeInventory(32, creativelist, 8);   // The creative Inventory contains every registered item that is not marked as hidden
+
                // Survival Inventory
                this.tmp.survivalInventory = new dragonblocks.InventoryContainer({
                        inventory: new dragonblocks.Craftfield(3, 3),
@@ -101,156 +120,251 @@ dragonblocks.Player = class extends dragonblocks.SpawnedEntity{
                        left: 1,
                        right: 2,
                });
-               if(this.meta.survivalInventory)
-                       this.tmp.survivalInventory.parse(this.meta.survivalInventory);
-               this.tmp.survivalInventory.addUpdateListener(_ => {
-                       self.meta.survivalInventory = this.tmp.survivalInventory.stringify();
+
+               if (this.meta.survivalInventory)
+                       this.tmp.survivalInventory.deserialize(this.meta.survivalInventory);
+
+               this.tmp.survivalInventory.addEventListener("updateStack", _ => {
+                       self.meta.survivalInventory = this.tmp.survivalInventory.serialize();
                });
-               //Init Inventory
+
+               // Init Inventory
                this.resetInventoryElements();
+
                // Map Interaction
                this.tmp.tool = null;
-               this.tmp.defaultTool = this.meta.creative ? dragonblocks.getTool("dragonblocks:creative_hand") : dragonblocks.getTool("dragonblocks:hand");
+               this.tmp.defaultTool = dragonblocks.tools[this.meta.creative ? "dragonblocks:creative_hand" : "dragonblocks:hand"];
                this.initMapInteraction();
+
                // Map Scroll
                setInterval(_ => {
-                       if(dragonblocks.map.displayLeft + dragonblocks.map.displayWidth < dragonblocks.player.x + dragonblocks.player.width + 3)
-                               dragonblocks.map.displayLeft = parseInt(dragonblocks.player.x + dragonblocks.player.width + 3 - dragonblocks.map.displayWidth);
-                       else if(dragonblocks.map.displayLeft > dragonblocks.player.x - 2)
-                               dragonblocks.map.displayLeft = parseInt(dragonblocks.player.x - 2);
-                       if(dragonblocks.map.displayTop + dragonblocks.map.displayHeight < dragonblocks.player.y + dragonblocks.player.height + 3)
-                               dragonblocks.map.displayTop = parseInt(dragonblocks.player.y + dragonblocks.player.height + 3 - dragonblocks.map.displayHeight);
-                       else if(dragonblocks.map.displayTop > dragonblocks.player.y - 2)
-                               dragonblocks.map.displayTop = parseInt(dragonblocks.player.y - 2);
-                       dragonblocks.map.graphicsUpdate();
+                       if (dragonblocks.map.displayLeft + dragonblocks.map.displayWidth < self.x + self.width + 3)
+                               dragonblocks.map.displayLeft = parseInt(self.x + self.width + 3 - dragonblocks.map.displayWidth);
+                       else if (dragonblocks.map.displayLeft > self.x - 2)
+                               dragonblocks.map.displayLeft = parseInt(self.x - 2);
+                       if (dragonblocks.map.displayTop + dragonblocks.map.displayHeight < self.y + self.height + 3)
+                               dragonblocks.map.displayTop = parseInt(self.y + self.height + 3 - dragonblocks.map.displayHeight);
+                       else if (dragonblocks.map.displayTop > self.y - 2)
+                               dragonblocks.map.displayTop = parseInt(self.y - 2);
+
+                       dragonblocks.map.updateGraphics();
                });
+
                // Controls
-               dragonblocks.keyHandler.down(" ", _ => { dragonblocks.player.jump() });
-               dragonblocks.keyHandler.up(" ", _ => { dragonblocks.player.stopJump() });
-               dragonblocks.keyHandler.down("ArrowLeft", _ => { dragonblocks.player.moveLeft() });
-               dragonblocks.keyHandler.down("ArrowRight", _ => { dragonblocks.player.moveRight() });
-               dragonblocks.keyHandler.up("ArrowLeft", _ => { dragonblocks.player.stop() });
-               dragonblocks.keyHandler.up("ArrowRight", _ => { dragonblocks.player.stop() });
-               dragonblocks.keyHandler.down("i", _ => { dragonblocks.player.toggleInventory(); });
-               dragonblocks.keyHandler.down("n", _ => { dragonblocks.player.nextItem() });
-               dragonblocks.keyHandler.down("b", _=>{ dragonblocks.player.previousItem() });
-               dragonblocks.keyHandler.down("scroll", _ => { dragonblocks.player.nextItem() });
-               dragonblocks.keyHandler.up("scroll", _=>{ dragonblocks.player.previousItem() });
-               for(let i = 1; i < 9; i++)
-                       dragonblocks.keyHandler.down(i.toString(), _ => { dragonblocks.player.select(i - 1) });
+               dragonblocks.keyHandler.down(" ", _ => {
+                       self.jump();
+               });
+
+               dragonblocks.keyHandler.up(" ", _ => {
+                       self.stopJump();
+               });
+
+               dragonblocks.keyHandler.down("ArrowLeft", _ => {
+                       self.moveLeft();
+               });
+
+               dragonblocks.keyHandler.down("ArrowRight", _ => {
+                       self.moveRight();
+               });
+
+               dragonblocks.keyHandler.up("ArrowLeft", _ => {
+                       self.stop();
+               });
+
+               dragonblocks.keyHandler.up("ArrowRight", _ => {
+                       self.stop();
+               });
+
+               dragonblocks.keyHandler.down("i", _ => {
+                       self.toggleInventory();
+               });
+
+               dragonblocks.keyHandler.down("n", _ => {
+                       self.nextItem();
+               });
+
+               dragonblocks.keyHandler.down("b", _=> {
+                       self.previousItem();
+               });
+
+               dragonblocks.keyHandler.down("scroll", _ => {
+                       self.nextItem();
+               });
+
+               dragonblocks.keyHandler.up("scroll", _=>{
+                       self.previousItem();
+               });
+
+               for (let i = 1; i < 9; i++) {
+                       dragonblocks.keyHandler.down(i.toString(), _ => {
+                               self.select(i - 1);
+                       });
+               }
+
                let mapDisplay = document.getElementById("dragonblocks.map");
+
                addEventListener("mouseup", event => {
-                       if(event.which == 1)
-                               dragonblocks.player.digStop();
+                       if (event.which == 1)
+                               self.digStop();
                });
+
                addEventListener("keydown", event => {
-                       if(event.key == "Escape" && dragonblocks.player.inventoryIsOpen())
-                               dragonblocks.player.closeInventory();
+                       if (event.key == "Escape" && self.inventoryIsOpen())
+                               self.closeInventory();
                });
+
                // Map Interaction Controls
-               for(let x = 0; x < dragonblocks.map.displayWidth; x++){
-                       for(let y = 0; y < dragonblocks.map.displayHeight; y++){
+               for (let x = 0; x < dragonblocks.map.displayWidth; x++) {
+                       for (let y = 0; y < dragonblocks.map.displayHeight; y++) {
                                let nodeDisplay = document.getElementById("dragonblocks.map.node[" + x + "][" + y + "]");
+
                                nodeDisplay.addEventListener("mouseover", event => {
-                                       if(dragonblocks.player.canReach(x + dragonblocks.map.displayLeft, y + dragonblocks.map.displayTop))
+                                       if (self.canReach(x + dragonblocks.map.displayLeft, y + dragonblocks.map.displayTop))
                                                event.srcElement.style.boxShadow = "0 0 0 1px black inset";
                                });
+
                                nodeDisplay.addEventListener("mouseleave", event => {
                                        event.srcElement.style.boxShadow = "none";
                                });
+
                                nodeDisplay.addEventListener("mousedown", event => {
-                                       let [ix, iy] = [x + dragonblocks.map.displayLeft, y + dragonblocks.map.displayTop]
-                                       switch(event.which){
+                                       let [ix, iy] = [x + dragonblocks.map.displayLeft, y + dragonblocks.map.displayTop];
+
+                                       switch(event.which) {
                                                case 1:
-                                                       dragonblocks.player.digStart(ix, iy);
+                                                       self.digStart(ix, iy);
                                                        break;
+
                                                case 3:
-                                                       dragonblocks.player.build(ix, iy);
+                                                       self.build(ix, iy);
                                                        break;
-                                       }
+                                       };
                                });
                        }
                }
        }
-       set skin(value){
+
+       set skin(value)
+       {
                this.meta.skin = value;
-               this.texture = dragonblocks.skins[value].texture;
+               this.texture = dragonblocks.registeredSkins[value].texture;
                this.updateTexture();
        }
-       get skin(){
+
+       get skin()
+       {
                return this.meta.skin;
        }
-       set gamemode(mode){
+
+       set gamemode(mode)
+       {
                this.setGamemode(mode);
        }
-       get gamemode(){
+
+       get gamemode()
+       {
                return this.meta.creative ? "creative" : "survival";
        }
-       get tool(){
-               return dragonblocks.getTool(this.getWieldedItem().item) || this.tmp.defaultTool;
+
+       get tool()
+       {
+               return dragonblocks.tools[this.getWieldedItem().item] || this.tmp.defaultTool;
        }
-       setGamemode(mode){
-               switch(mode.toString().toLowerCase()){
+
+       setGamemode(mode)
+       {
+               switch (mode.toString().toLowerCase()) {
                        case "0":
                        case "survival":
                                this.meta.creative = false;
                                break;
+
                        case "1":
                        case "creative":
                                this.meta.creative = true;
                                break;
+
                        default:
                                return false;
                }
+
                this.resetInventoryElements();
-               this.tmp.defaultTool = dragonblocks.getTool(this.meta.creative ? "dragonblocks:creative_hand" : "dragonblocks:hand");
+               this.tmp.defaultTool = dragonblocks.tools[this.meta.creative ? "dragonblocks:creative_hand" : "dragonblocks:hand"];
+
                return true;
        }
-       inventoryIsOpen(){
+
+       inventoryIsOpen()
+       {
                return this.tmp.inventory.opened;
        }
-       openInventory(){
+
+       openInventory()
+       {
                this.tmp.inventory.open();
                dragonblocks.keyHandler.lockAll();
                dragonblocks.keyHandler.unlock("i");
                dragonblocks.gui.showLayer();
        }
-       closeInventory(){
+
+       closeInventory()
+       {
                this.tmp.inventory.close();
                dragonblocks.keyHandler.unlockAll();
                dragonblocks.gui.hideLayer();
        }
-       toggleInventory(){
+
+       toggleInventory()
+       {
                this.inventoryIsOpen() ? this.closeInventory() : this.openInventory();
        }
-       give(itemstring){
+
+       give(itemstring)
+       {
                return this.tmp.mainInventory.add(itemstring);
        }
-       clearInventory(){
+
+       clearInventory()
+       {
                this.tmp.mainInventory.clear();
        }
-       setInventoryElements(elems){
+
+       setInventoryElements(elems)
+       {
                this.tmp.inventory.elements = elems;
        }
-       resetInventoryElements(){
+
+       resetInventoryElements()
+       {
                let elems = [this.tmp.mainInventory];
                elems.unshift(this.gamemode == "creative" ? this.tmp.creativeInventory : this.tmp.survivalInventory);
                this.setInventoryElements(elems);
        }
-       previousItem(){
+
+       previousItem()
+       {
                this.tmp.hudbar.previousItem();
        }
-       nextItem(){
+
+       nextItem()
+       {
                this.tmp.hudbar.nextItem();
        }
-       select(i){
+
+       select(i)
+       {
                this.tmp.hudbar.select(i);
        }
-       getWieldedItem(){
+
+       getWieldedItem()
+       {
                return this.tmp.hudbar.getSelectedItem();
        }
-       set onNextInventoryClose(func){
+
+       set onNextInventoryClose(func)
+       {
                this.tmp.inventory.onNextClose = func;
        }
-}
-Object.assign(dragonblocks.Player.prototype, dragonblocks.MapIntercation);     //Mixin
+};
+
+Object.assign(dragonblocks.Player.prototype, dragonblocks.MapInteraction);     //Mixin