]> git.lizzy.rs Git - dragonblocks.git/commitdiff
Merge pull request #3 from EliasFleckenstein03/item-entity
authorHimbeerserverDE <52707839+HimbeerserverDE@users.noreply.github.com>
Sun, 5 Jul 2020 15:51:44 +0000 (17:51 +0200)
committerGitHub <noreply@github.com>
Sun, 5 Jul 2020 15:51:44 +0000 (17:51 +0200)
Item Entity

engine/init.js
engine/item_entity.js [new file with mode: 0644]
engine/map_interaction.js

index 0a5061c7f3a205329e24209be6d468a4dbe8376b..26977659ef6b56af8c3c72707dfc976ed0be8cc4 100755 (executable)
@@ -161,7 +161,7 @@ dragonblocks.loadMod = function(modname){
        dragonblocks.loadedMods.push(modname);
        dragonblocks.loadingMods[modname] = false;
 }
-dragonblocks.modules = ["ressources", "key_handler", "gui", "mapgen", "world", "item", "node", "tool", "group", "builtin", "map_node", "map", "itemstack", "inventory", "inventory_group", "hudbar", "inventory_container", "creative_inventory", "recipe", "craftfield", "menu", "skin", "entity", "map_interaction", "spawned_entity", "timer", "player", "pixel_manipulator", "chat", "chatcommands", "mainmenu"];
+dragonblocks.modules = ["ressources", "key_handler", "gui", "mapgen", "world", "item", "node", "tool", "group", "builtin", "map_node", "map", "itemstack", "inventory", "inventory_group", "hudbar", "inventory_container", "creative_inventory", "recipe", "craftfield", "menu", "skin", "entity", "map_interaction", "spawned_entity", "item_entity", "timer", "player", "pixel_manipulator", "chat", "chatcommands", "mainmenu"];
 dragonblocks.moduleCount = dragonblocks.modules.length;
 dragonblocks.loadModule = function(){
        if(dragonblocks.modules[0]){
diff --git a/engine/item_entity.js b/engine/item_entity.js
new file mode 100644 (file)
index 0000000..2e790c3
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * item_entity.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.registerEntity({
+       name: "dragonblocks:item_entity",
+       width: 0.4,
+       height: 0.4,
+       gravity: true,
+       verticalSpeed: 2,
+       onpunch: self => {
+               dragonblocks.dropItem(dragonblocks.player.give(self.meta.itemstring), self.x, self.y);
+               self.despawn();
+       },
+       oncollide: self => {
+               self.jump();
+       },
+});
+
+dragonblocks.dropItem = function(itemstack, x, y) {
+       if (! itemstack || ! itemstack.item || ! itemstack.count)
+               return;
+       let entity = dragonblocks.spawnEntity("dragonblocks:item_entity", x, y);
+       entity.meta.itemstring = itemstack.stringify();
+       entity.texture = itemstack.toItem().texture;
+       entity.updateTexture();
+}
index a2e200f643c008a3a9bacf1809a4367ee5a8569a..3f2023a50e0fdee3b650525f9e4edf427a4c4cb4 100644 (file)
@@ -102,12 +102,8 @@ dragonblocks.MapIntercation = {
                if(! mapNode)
                        return;
                let node = mapNode.toNode();
-               if(this.dig(x, y)){
-                       if(node.drops instanceof Function)
-                               this.tmp.mainInventory.add(node.drops());
-                       else
-                               this.tmp.mainInventory.add(node.drops);
-               }
+               if (this.dig(x, y))
+                       dragonblocks.handleNodeDrop(this.tmp.mainInventory, node, x, y);
                document.getElementById("dragonblocks.crack[" + this.id + "]").style.visibility = "hidden";
        },
        digStop(){
@@ -158,3 +154,7 @@ dragonblocks.MapIntercation = {
                return (Math.sqrt(Math.pow(x - this.x, 2) + Math.pow(y - this.y, 2)) <= this.tool.range) || this.meta.creative;
        },
 } 
+
+dragonblocks.handleNodeDrop = function(inventory, node, x, y) {
+       dragonblocks.dropItem(inventory.add((node.drops instanceof Function) ? node.drops() : node.drops), x + 0.2, y + 0.2);
+}