Skip to content

Commit

Permalink
- Reldens - Items System
Browse files Browse the repository at this point in the history
  • Loading branch information
Damian A. Pastorini committed May 24, 2020
1 parent d01beb8 commit b3e53cf
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 29 deletions.
31 changes: 20 additions & 11 deletions lib/client/receiver.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
const ItemsManager = require('../manager');
const ItemsConst = require('../constants');
const ItemBase = require('../item/type/item-base');
const { ErrorManager } = require('@reldens/utils');
const { Logger, ErrorManager } = require('@reldens/utils');

class Receiver
{
Expand Down Expand Up @@ -66,12 +66,11 @@ class Receiver
onSetItems(message)
{
let tempItemsList = {};
for(let idx in message.items){
let messageItem = message.items[idx];
let itemsProps = Object.assign({manager: this.manager}, messageItem, {uid: idx});
for(let i of Object.keys(message.items)){
let messageItem = message.items[i];
let itemsProps = Object.assign({manager: this.manager}, messageItem, {uid: i});
let itemClass = this.getItemClass(itemsProps.key);
let tmpItem = new itemClass(itemsProps);
tempItemsList[idx] = tmpItem;
tempItemsList[i] = new itemClass(itemsProps);
}
this.manager.setItems(tempItemsList);
}
Expand All @@ -82,27 +81,37 @@ class Receiver
let itemsProps = Object.assign({manager: this.manager}, message.item, {uid: message.item.idx});
let itemClass = this.getItemClass(itemsProps.key);
let tmpItem = new itemClass(itemsProps);
this.manager.addItem(tmpItem);
this.manager.addItem(tmpItem).catch((err) => {
Logger.error(['Error receiver onAddItem.', err]);
});
}

onRemoveItem(message)
{
this.manager.removeItem(message.item.idx);
this.manager.removeItem(message.item.idx).catch((err) => {
Logger.error(['Error receiver onRemoveItem.', err]);
});
}

onSetQty(message)
{
this.manager.setItemQty(message.item.idx, message.item.qty);
this.manager.setItemQty(message.item.idx, message.item.qty).catch((err) => {
Logger.error(['Error receiver onSetQty.', err]);
});
}

onEquipItem(message)
{
this.manager.items[message.item.idx].equip(false);
this.manager.items[message.item.idx].equip(false).catch((err) => {
Logger.error(['Error receiver onEquipItem.', err]);
});
}

onUnequipItem(message)
{
this.manager.items[message.item.idx].unequip(false);
this.manager.items[message.item.idx].unequip(false).catch((err) => {
Logger.error(['Error receiver onUnequipItem.', err]);
});
}

// @NOTE: override to apply custom behaviors on these.
Expand Down
2 changes: 2 additions & 0 deletions lib/item/inventory.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ class Inventory
// @NOTE: -1 is for disable, 0 is reserved for possible items "seat" or "placeholder".
this.limitPerItem = {}.hasOwnProperty.call(props, 'limitPerItem') ? props.limitPerItem : -1;
this.itemsLimit = {}.hasOwnProperty.call(props, 'itemsLimit') ? props.itemsLimit : -1;
this.applyModifiersAuto = true;
this.revertModifiersAuto = true;
}

async validate(item)
Expand Down
15 changes: 8 additions & 7 deletions lib/item/type/equipment.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,22 +21,23 @@ class Equipment extends ItemBase

async equip(applyMods)
{
this.equipped = true;
await this.manager.events.emit(ItemsEvents.EQUIP_ITEM, this);
// apply modifiers automatically by default:
if(applyMods !== false){
this.equipped = true;
// apply modifiers automatically or not:
if(!applyMods && !this.manager.applyModifiersAuto){
return false;
}
await this.applyModifiers();
}

async unequip(revertMods)
{
this.equipped = false;
await this.manager.events.emit(ItemsEvents.UNEQUIP_ITEM, this);
// revert modifiers automatically by default:
if(revertMods !== false){
await this.revertModifiers();
// revert modifiers automatically or not:
if(!revertMods && !this.manager.revertModifiersAuto){
return false;
}
this.equipped = false;
}

async applyModifiers()
Expand Down
11 changes: 8 additions & 3 deletions lib/item/type/item-base.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ class ItemBase

setProperties(props)
{
for(let k in props){
for(let k of Object.keys(props)){
this[k] = props[k];
}
}
Expand All @@ -74,8 +74,8 @@ class ItemBase
async changeModifiers(revert)
{
await this.manager.events.emit(ItemsEvents.EQUIP_BEFORE+(revert ? 'Revert': 'Apply')+'Modifiers', this);
for(let idx in this.modifiers){
let modifier = this.modifiers[idx];
for(let i of Object.keys(this.modifiers)){
let modifier = this.modifiers[i];
let ownerProperty = this.getOwnerProperty(modifier.propertyKey);
let newValue = this.modifyValue(modifier, ownerProperty, revert);
this.setOwnerProperty(modifier.propertyKey, newValue);
Expand Down Expand Up @@ -181,6 +181,11 @@ class ItemBase
return obj[propName];
}

isType(type)
{
return this.type === type;
}

}

module.exports = ItemBase;
12 changes: 5 additions & 7 deletions lib/server/sender.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ class Sender
let broadcast = ItemsConst.BEHAVIOR_BROADCAST;
// @NOTE: so far I didn't find a case where I would need to broadcast let's say the item key that's been used
// and some different data to the client, but I'll contemplate that case may happen and keep this as feature.
// eslint-disable-next-line no-unused-vars
let both = ItemsConst.BEHAVIOR_BOTH;
// let both = ItemsConst.BEHAVIOR_BOTH;
let addProperties = ['id', 'key', 'qty', 'label', 'description'];
this.setPropertyBehavior(ItemsConst.ACTION_ADD, props, {behavior: send, send: addProperties});
this.setPropertyBehavior(ItemsConst.ACTION_REMOVE, props, {behavior: send, send: ['id', 'key']});
Expand Down Expand Up @@ -80,7 +79,7 @@ class Sender
Logger.error(['Undefined property:', prop, 'Item:', item.getInventoryId()]);
}
}
return itemProps
return itemProps;
}

listenEvents()
Expand Down Expand Up @@ -123,8 +122,8 @@ class Sender
return false;
}
let itemsToSend = {};
for(let idx in data.items){
let item = data.items[idx];
for(let i of Object.keys(data.items)){
let item = data.items[i];
let itemData = this.getItemProperties(item, ItemsConst.ACTION_ADD, ItemsConst.BEHAVIOR_SEND);
itemData.singleInstance = item.singleInstance;
itemsToSend[item.getInventoryId()] = itemData;
Expand Down Expand Up @@ -172,8 +171,7 @@ class Sender
let behavior = actionBehavior === ItemsConst.BEHAVIOR_BOTH ?
ItemsConst.BEHAVIOR_BROADCAST : ItemsConst.BEHAVIOR_SEND;
if({}.hasOwnProperty.call(this.sendTargetProps, behavior) && this.sendTargetProps[behavior].length){
for (let i in this.sendTargetProps[behavior]){
let tProp = this.sendTargetProps[behavior][i];
for (let tProp of this.sendTargetProps[behavior]){
if(tProp === 'id'){
tProp = this.manager.ownerIdProperty;
}
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@reldens/items-system",
"version": "0.2.0",
"version": "0.3.0",
"description": "Reldens - Items System",
"source": true,
"homepage": "https://github.com/damian-pastorini/reldens-items",
Expand Down

0 comments on commit b3e53cf

Please sign in to comment.