Delete, apply and single click combine
This commit is contained in:
parent
53a54c2123
commit
a4b91065ff
@ -24,12 +24,13 @@ class StatBar extends Phaser.GameObjects.Graphics {
|
|||||||
super(scene);
|
super(scene);
|
||||||
this.crypObj = cryp;
|
this.crypObj = cryp;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
console.log(type);
|
||||||
|
|
||||||
if (type === 'HP') {
|
if (type === 'HP') {
|
||||||
this.val = this.crypObj.cryp.hp.base;
|
this.val = this.crypObj.cryp.hp.base;
|
||||||
this.max = this.crypObj.cryp.stamina.base;
|
this.max = this.crypObj.cryp.hp.base;
|
||||||
this.margin = 0;
|
this.margin = 0;
|
||||||
} else if (type === 'RedShield') {
|
} else if (type === 'Red Shield') {
|
||||||
this.val = this.crypObj.cryp.red_shield.base;
|
this.val = this.crypObj.cryp.red_shield.base;
|
||||||
this.max = this.crypObj.cryp.red_shield.base;
|
this.max = this.crypObj.cryp.red_shield.base;
|
||||||
this.margin = 1;
|
this.margin = 1;
|
||||||
|
|||||||
@ -20,7 +20,7 @@ const INV_Y = Y + ITEM_HEIGHT;
|
|||||||
const INV_ROWS = 3;
|
const INV_ROWS = 3;
|
||||||
const INV_COLUMNS = 3;
|
const INV_COLUMNS = 3;
|
||||||
|
|
||||||
const COMB_X = INV_X + ITEM_WIDTH * 6.75;
|
const COMB_X = INV_X + ITEM_WIDTH * 5.75;
|
||||||
const COMB_Y = INV_Y;
|
const COMB_Y = INV_Y;
|
||||||
const COMB_ROWS = 2;
|
const COMB_ROWS = 2;
|
||||||
const COMB_COLUMNS = 2;
|
const COMB_COLUMNS = 2;
|
||||||
@ -94,10 +94,20 @@ class CombinerHitBox extends Phaser.GameObjects.Rectangle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DeleteHitBox extends Phaser.GameObjects.Rectangle {
|
||||||
|
constructor(scene, x, y) {
|
||||||
|
super(scene, x, y, ITEM_WIDTH * 1.25, ITEM_HEIGHT * 1.25, 0x222222);
|
||||||
|
this.setOrigin(0);
|
||||||
|
this.itemSelect = () => this.setFillStyle(0xff0000);
|
||||||
|
this.itemDeselect = () => this.setFillStyle(0x222222);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const itemCheckHitbox = (scene, pointer) => {
|
const itemCheckHitbox = (scene, pointer) => {
|
||||||
const { list } = scene.scene.get('MenuCrypList').children;
|
const { list } = scene.scene.get('MenuCrypList').children;
|
||||||
const hitboxes = list.filter(c => c.cryp)
|
const hitboxes = list.filter(c => c.cryp)
|
||||||
.concat(scene.children.list.filter(c => c instanceof CombinerHitBox));
|
.concat(scene.children.list.filter(c => c instanceof CombinerHitBox || c instanceof DeleteHitBox));
|
||||||
|
|
||||||
let found;
|
let found;
|
||||||
for (let i = 0; i < hitboxes.length; i += 1) {
|
for (let i = 0; i < hitboxes.length; i += 1) {
|
||||||
@ -142,11 +152,11 @@ class ItemList extends Phaser.Scene {
|
|||||||
drawCombiner(graphics);
|
drawCombiner(graphics);
|
||||||
drawInventory(graphics);
|
drawInventory(graphics);
|
||||||
drawVbox(graphics);
|
drawVbox(graphics);
|
||||||
this.add.text(X + WIDTH / 10, Y, 'Inventory', TEXT.HEADER);
|
this.add.text(X + WIDTH * 0.1, Y, 'Inventory', TEXT.HEADER);
|
||||||
this.add.text(X + WIDTH * 11 / 20, Y, 'Combiner', TEXT.HEADER);
|
this.add.text(X + WIDTH * 0.47, Y, 'Combiner', TEXT.HEADER);
|
||||||
this.add.text(X + WIDTH * 7 / 20, Y + HEIGHT / 2, 'Varibox', TEXT.HEADER);
|
this.add.text(X + WIDTH * 0.35, Y + HEIGHT / 2, 'Varibox', TEXT.HEADER);
|
||||||
|
|
||||||
const reroll = this.add.rectangle(0, Y + HEIGHT * 2 / 3, ITEM_WIDTH * 1.5, ITEM_HEIGHT * 1.5, 0x222222)
|
const reroll = this.add.rectangle(WIDTH * 0.01, Y + HEIGHT * 0.775, ITEM_WIDTH * 1.25, ITEM_HEIGHT * 1.25, 0x222222)
|
||||||
.setInteractive()
|
.setInteractive()
|
||||||
.setOrigin(0)
|
.setOrigin(0)
|
||||||
.on('pointerdown', () => this.registry.get('ws').sendVboxDiscard(vbox.game));
|
.on('pointerdown', () => this.registry.get('ws').sendVboxDiscard(vbox.game));
|
||||||
@ -163,15 +173,19 @@ class ItemList extends Phaser.Scene {
|
|||||||
});
|
});
|
||||||
this.add.text(combine.getCenter().x, combine.getCenter().y, 'C', TEXT.HEADER)
|
this.add.text(combine.getCenter().x, combine.getCenter().y, 'C', TEXT.HEADER)
|
||||||
.setOrigin(0.5, 0.5);
|
.setOrigin(0.5, 0.5);
|
||||||
}
|
|
||||||
|
|
||||||
addItems(vbox) {
|
|
||||||
const ws = this.registry.get('ws');
|
|
||||||
for (let i = 0; i < 3; i += 1) {
|
for (let i = 0; i < 3; i += 1) {
|
||||||
const ITEM_X = ITEM_WIDTH * 1.1 * (i % COMB_COLUMNS) + COMB_X;
|
const ITEM_X = ITEM_WIDTH * 1.1 * (i % COMB_COLUMNS) + COMB_X;
|
||||||
const ITEM_Y = ITEM_HEIGHT * 1.1 * Math.floor(i / COMB_COLUMNS) + COMB_Y;
|
const ITEM_Y = ITEM_HEIGHT * 1.1 * Math.floor(i / COMB_COLUMNS) + COMB_Y;
|
||||||
this.add.existing(new CombinerHitBox(this, ITEM_X, ITEM_Y, i));
|
this.add.existing(new CombinerHitBox(this, ITEM_X, ITEM_Y, i));
|
||||||
}
|
}
|
||||||
|
const del = this.add.existing(new DeleteHitBox(this, WIDTH * 0.01, Y + HEIGHT * 0.6));
|
||||||
|
this.add.text(del.getCenter().x, del.getCenter().y, 'Del', TEXT.HEADER)
|
||||||
|
.setOrigin(0.5, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
addItems(vbox) {
|
||||||
|
const ws = this.registry.get('ws');
|
||||||
|
|
||||||
vbox.bound.forEach((action, i) => {
|
vbox.bound.forEach((action, i) => {
|
||||||
const ITEM_X = ITEM_WIDTH * 1.1 * (i % INV_COLUMNS) + INV_X + ITEM_WIDTH * 0.5;
|
const ITEM_X = ITEM_WIDTH * 1.1 * (i % INV_COLUMNS) + INV_X + ITEM_WIDTH * 0.5;
|
||||||
@ -209,6 +223,19 @@ class ItemList extends Phaser.Scene {
|
|||||||
item.setPosition(item.origX, item.origY);
|
item.setPosition(item.origX, item.origY);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const findUnallocated = () => {
|
||||||
|
for (let i = 0; i <= 2; i += 1) {
|
||||||
|
if (this.combinerItems[i] === -1) {
|
||||||
|
return this.children.list.filter(obj => obj instanceof CombinerHitBox).find(hb => hb.slot === i);
|
||||||
|
}
|
||||||
|
} return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
const allocate = (item, hitBox) => {
|
||||||
|
hitBox.allocate(item);
|
||||||
|
this.combinerItems[hitBox.slot] = item.index;
|
||||||
|
};
|
||||||
|
|
||||||
this.input.on('dragstart', (pointer, item) => {
|
this.input.on('dragstart', (pointer, item) => {
|
||||||
if (!(item instanceof Item)) return false;
|
if (!(item instanceof Item)) return false;
|
||||||
item.clickHandler();
|
item.clickHandler();
|
||||||
@ -225,18 +252,30 @@ class ItemList extends Phaser.Scene {
|
|||||||
|
|
||||||
this.input.on('dragend', (pointer, item) => {
|
this.input.on('dragend', (pointer, item) => {
|
||||||
if (!(item instanceof Item)) return false;
|
if (!(item instanceof Item)) return false;
|
||||||
|
|
||||||
item.deselect();
|
item.deselect();
|
||||||
|
// Allocate to combiner if clicked without movement form inventory (return 0)
|
||||||
|
if (!Math.hypot(item.x - item.origX, item.y - item.origY)) {
|
||||||
|
const cBox = findUnallocated();
|
||||||
|
if (cBox) allocate(item, cBox);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// Check for hitboxes
|
||||||
const hitBox = itemCheckHitbox(this, pointer);
|
const hitBox = itemCheckHitbox(this, pointer);
|
||||||
deallocate(item);
|
|
||||||
if (hitBox) {
|
if (hitBox) {
|
||||||
hitBox.itemDeselect();
|
hitBox.itemDeselect();
|
||||||
|
// Allocate to specific combiner slot
|
||||||
if (hitBox instanceof CombinerHitBox) {
|
if (hitBox instanceof CombinerHitBox) {
|
||||||
hitBox.allocate(item);
|
allocate(item, hitBox);
|
||||||
this.combinerItems[hitBox.slot] = item.index;
|
return true;
|
||||||
} else {
|
|
||||||
ws.sendItemUse(vbox.find(li => li.action === item.action).id, hitBox.cryp.id);
|
|
||||||
}
|
}
|
||||||
|
// Allocate to cryp hitbox
|
||||||
|
if (hitBox instanceof DeleteHitBox) ws.sendVboxDrop(vbox.game, item.index);
|
||||||
|
else ws.sendVboxApply(vbox.game, hitBox.cryp.id, item.index);
|
||||||
}
|
}
|
||||||
|
// If the item hasn't been allocated deallocate the item
|
||||||
|
// Scene will restart if there is vbox change
|
||||||
|
deallocate(item);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -89,6 +89,14 @@ function createSocket(events) {
|
|||||||
send({ method: 'vbox_state', params: { game_id: gameId } });
|
send({ method: 'vbox_state', params: { game_id: gameId } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sendVboxAccept(gameId, i) {
|
||||||
|
send({ method: 'vbox_accept', params: { game_id: gameId, index: i } });
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendVboxApply(gameId, crypId, index) {
|
||||||
|
send({ method: 'vbox_apply', params: { game_id: gameId, cryp_id: crypId, index } });
|
||||||
|
}
|
||||||
|
|
||||||
function sendVboxDiscard(gameId) {
|
function sendVboxDiscard(gameId) {
|
||||||
send({ method: 'vbox_discard', params: { game_id: gameId } });
|
send({ method: 'vbox_discard', params: { game_id: gameId } });
|
||||||
}
|
}
|
||||||
@ -97,10 +105,12 @@ function createSocket(events) {
|
|||||||
send({ method: 'vbox_combine', params: { game_id: gameId, indices } });
|
send({ method: 'vbox_combine', params: { game_id: gameId, indices } });
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendVboxAccept(gameId, i) {
|
|
||||||
send({ method: 'vbox_accept', params: { game_id: gameId, index: i } });
|
function sendVboxDrop(gameId, index) {
|
||||||
|
send({ method: 'vbox_drop', params: { game_id: gameId, index } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function sendPressR() {
|
function sendPressR() {
|
||||||
send({ method: 'press_r', params: { } });
|
send({ method: 'press_r', params: { } });
|
||||||
}
|
}
|
||||||
@ -293,8 +303,10 @@ function createSocket(events) {
|
|||||||
sendZoneClose,
|
sendZoneClose,
|
||||||
sendVboxState,
|
sendVboxState,
|
||||||
sendVboxAccept,
|
sendVboxAccept,
|
||||||
sendVboxDiscard,
|
sendVboxApply,
|
||||||
|
sendVboxDrop,
|
||||||
sendVboxCombine,
|
sendVboxCombine,
|
||||||
|
sendVboxDiscard,
|
||||||
connect,
|
connect,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user