From bf4bed27661eaeda1466712c55d2f7bf8a1ead1b Mon Sep 17 00:00:00 2001 From: Thaum Date: Tue, 10 Mar 2015 15:09:49 +0000 Subject: [PATCH] Implemented Basic Drag and Drop for inventory Items --- rpg-docs/.meteor/packages | 1 - rpg-docs/.meteor/versions | 1 - rpg-docs/client/views/GeneralCSS/general.css | 4 ++ .../views/character/inventory/inventory.html | 32 ++++----- .../views/character/inventory/inventory.js | 65 ++++++++++++++++++- 5 files changed, 80 insertions(+), 23 deletions(-) diff --git a/rpg-docs/.meteor/packages b/rpg-docs/.meteor/packages index edb7af8a..affc3ee2 100644 --- a/rpg-docs/.meteor/packages +++ b/rpg-docs/.meteor/packages @@ -11,7 +11,6 @@ accounts-ui random dburles:collection-helpers reactive-var -cw4gn3r:jquery-event-drag underscore aldeed:collection2 differential:vulcanize diff --git a/rpg-docs/.meteor/versions b/rpg-docs/.meteor/versions index bf4aa9d9..d9a93476 100644 --- a/rpg-docs/.meteor/versions +++ b/rpg-docs/.meteor/versions @@ -15,7 +15,6 @@ boilerplate-generator@1.0.2 callback-hook@1.0.2 check@1.0.4 conielo:autoform-polymer-paper@0.1.1 -cw4gn3r:jquery-event-drag@2.2.0 dburles:collection-helpers@1.0.2 dburles:mongo-collection-instances@0.3.1 ddp@1.0.14 diff --git a/rpg-docs/client/views/GeneralCSS/general.css b/rpg-docs/client/views/GeneralCSS/general.css index fa7cfc20..eca9cbb5 100644 --- a/rpg-docs/client/views/GeneralCSS/general.css +++ b/rpg-docs/client/views/GeneralCSS/general.css @@ -140,6 +140,10 @@ paper-button { visibility: hidden; } +.hidden{ + opacity: 0; +} + @media (max-width: 640px) { html /deep/ paper-action-dialog[global-dialog] { top: 0 !important; diff --git a/rpg-docs/client/views/character/inventory/inventory.html b/rpg-docs/client/views/character/inventory/inventory.html index 19adb60e..6985f18f 100644 --- a/rpg-docs/client/views/character/inventory/inventory.html +++ b/rpg-docs/client/views/character/inventory/inventory.html @@ -21,7 +21,7 @@ - +
Equipment @@ -32,24 +32,16 @@
{{#if armor}} {{#with armor}} -
- - {{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}} - -
+ {{>inventoryItem}} {{/with}} {{/if}} {{#each equipment}} -
- - {{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}} - -
+ {{>inventoryItem}} {{/each}}
{{#each containers}} - +
{{name}}
{{valueString totalValue}}
@@ -57,11 +49,7 @@
{{#each items ../_id _id}} -
- - {{#if ne1 quantity}}{{quantity}} {{/if}}{{pluralName}} - -
+ {{>inventoryItem}} {{/each}}
@@ -74,4 +62,12 @@
- \ No newline at end of file + + + diff --git a/rpg-docs/client/views/character/inventory/inventory.js b/rpg-docs/client/views/character/inventory/inventory.js index 0b858e87..67c9a54c 100644 --- a/rpg-docs/client/views/character/inventory/inventory.js +++ b/rpg-docs/client/views/character/inventory/inventory.js @@ -18,9 +18,6 @@ Template.inventory.helpers({ showAddButtons: function(){ return Template.instance().showAddButtons.get(); }, - ne1: function(num){ - return num !== 1; - }, colorClass: function(){ return getColorClass(this.color) }, @@ -102,3 +99,65 @@ Template.inventory.events({ }); } }); + +Template.inventoryItem.helpers({ + ne1: function(num){ + return num !== 1; + }, + hidden: function(){ + return Session.equals("inventory.dragItemId", this._id)? "hidden" : null; + } +}); + +Template.layout.events({ + "dragstart .inventoryItem": function(event, instance){ + Session.set("inventory.dragItemId", this._id); + Session.set("inventory.dragItemOriginalContainer", this.container); + Session.set("inventory.dragItemOriginalCharacter", this.charId); + }, + "dragend .inventoryItem": function(event, instance){ + resetInvetorySession(); + }, + "dragover .itemContainer": function(event, instance){ + event.preventDefault(); + }, + "dragover .equipmentContainer": function(event, instance){ + var containerId = Session.get("inventory.dragItemOriginalContainer"); + var charId = Session.get("inventory.dragItemOriginalCharacter"); + + if (this._id !== charId) return; //we can't equip something we don't own + + var item = Items.findOne(Session.get("inventory.dragItemId")); + if (item.equipmentSlot === "none") return; //we can't equip this + + event.preventDefault(); //this is a valid drop zone + }, + "drop .container": function(event, instacne){ + var item = Items.findOne(Session.get("inventory.dragItemId")); + if (item.container === this._id && !item.equipped) return; //the item is already here + if(Containers.findOne(this._id)){//the container exists + Items.update(item._id, {$set: {container: this._id, charId: this.charId, equipped: false}}); + } + resetInvetorySession(); + }, + "drop .equipmentContainer": function(event, instance){ + var containerId = Session.get("inventory.dragItemOriginalContainer"); + var charId = Session.get("inventory.dragItemOriginalCharacter"); + + if (this._id !== charId) return; //we can't equip something we don't own + + var item = Items.findOne(Session.get("inventory.dragItemId")); + if (item.equipmentSlot === "none") return; //we can't equip this + //equip the item if it's not equipped + if(!item.equipped) Items.update(item._id, {$set: {equipped: true, container: containerId, charId: charId}}); + resetInvetorySession(); + } +}) + +var resetInvetorySession = function(){ + _.defer(function(){ + Session.set("inventory.dragItemId", null); + Session.set("inventory.dragItemOriginalContainer", null); + Session.set("inventory.dragItemOriginalCharacter", null); + }) +}