Add item moving to master view
This commit is contained in:
parent
96a1b49693
commit
f1430cd49b
56
model.py
56
model.py
@ -107,6 +107,60 @@ class Model(object):
|
||||
client.session = sessionid
|
||||
session.clients.append(client.id)
|
||||
|
||||
|
||||
@ApiMethod
|
||||
async def move_item(self, clientid, fromplayer, toplayer, itemid, toslot, fromslot):
|
||||
client = self.clients[clientid]
|
||||
fromclient = next((client for client in self.clients.values() if client.name == fromplayer), None)
|
||||
toclient = next((client for client in self.clients.values() if client.name == toplayer), None)
|
||||
if fromplayer == "master":
|
||||
# create item
|
||||
if not toclient:
|
||||
raise Exception("to-client is illegal")
|
||||
session = self.sessions[client.session]
|
||||
if not session:
|
||||
raise Exception("move item must be used in session")
|
||||
if client.id != session.owner:
|
||||
raise Exception("Only owner can move items")
|
||||
toslot -= 1
|
||||
if toslot > len(session.inventories[toclient.id]):
|
||||
raise Exception("Index out of toplayers range")
|
||||
session.inventories[toclient.id].insert(toslot, itemid)
|
||||
elif toplayer == "master":
|
||||
if not fromclient:
|
||||
raise Exception("from-client is illegal")
|
||||
session = self.sessions[client.session]
|
||||
if not session:
|
||||
raise Exception("move item must be used in session")
|
||||
if client.id != session.owner:
|
||||
raise Exception("Only owner can move items")
|
||||
if itemid not in session.inventories[fromclient.id]:
|
||||
raise Exception("he does not have that item")
|
||||
fromslot -= 1
|
||||
if fromslot > len(session.inventories[fromclient.id]):
|
||||
raise Exception("Index out of fromplayer range")
|
||||
session.inventories[fromclient.id].pop(fromslot)
|
||||
else:
|
||||
if not fromclient and not toclient:
|
||||
raise Exception("from- or to-client are illegal")
|
||||
session = self.sessions[client.session]
|
||||
if not session:
|
||||
raise Exception("move item must be used in session")
|
||||
if client.id != session.owner:
|
||||
raise Exception("Only owner can move items")
|
||||
if itemid not in session.inventories[fromclient.id]:
|
||||
raise Exception("he does not have that item")
|
||||
toslot -= 1
|
||||
if toslot > len(session.inventories[toclient.id]):
|
||||
raise Exception("Index out of toplayers range")
|
||||
fromslot -= 1
|
||||
if fromslot > len(session.inventories[fromclient.id]):
|
||||
raise Exception("Index out of fromplayer range")
|
||||
session.inventories[fromclient.id].pop(fromslot)
|
||||
session.inventories[toclient.id].insert(toslot, itemid)
|
||||
|
||||
|
||||
|
||||
@ApiMethod
|
||||
async def draw(self, clientid):
|
||||
await self.send_state(clientid)
|
||||
@ -220,8 +274,6 @@ class Session:
|
||||
raise Exception("Illegal session constructor")
|
||||
|
||||
def get_items(self, playerid):
|
||||
print(f"get_items(self, {playerid}) called")
|
||||
print(f"{self.inventories=}")
|
||||
if playerid in self.inventories:
|
||||
return self.inventories[playerid]
|
||||
else:
|
||||
|
@ -1,8 +1,27 @@
|
||||
var text = document.getElementById("msg").innerText
|
||||
msg = JSON.parse(text)
|
||||
|
||||
function onDrag (evt) {
|
||||
var item = evt.item; // dragged HTMLElement
|
||||
fromplayer = evt.from.getAttribute("inventory")
|
||||
toplayer = evt.to.getAttribute("inventory")
|
||||
itemid = item.getAttribute("itemid")
|
||||
toslot = evt.newIndex
|
||||
fromslot = evt.oldIndex
|
||||
data = {
|
||||
"fromplayer": fromplayer,
|
||||
"toplayer": toplayer,
|
||||
"itemid": itemid,
|
||||
"fromslot": fromslot,
|
||||
"toslot": toslot,
|
||||
}
|
||||
fetch('api/move_item', {
|
||||
method: 'POST',
|
||||
body: JSON.stringify(data),
|
||||
});
|
||||
}
|
||||
function draw_item(item) {
|
||||
const itemdiv = document.createElement('div');
|
||||
const itemdiv = document.createElement('itemdiv');
|
||||
var name = item["name"]
|
||||
var description = item["description"]
|
||||
var image = item["image"] || "../static/empty.jpg"
|
||||
@ -27,6 +46,7 @@ function draw_item(item) {
|
||||
itemdiv.appendChild(descriptionspan);
|
||||
itemdiv.style.display = "inline-block"
|
||||
itemdiv.style.background = "lightcoral"
|
||||
itemdiv.setAttribute("itemid", item["id"]);
|
||||
return itemdiv
|
||||
}
|
||||
|
||||
@ -64,7 +84,15 @@ Object.keys(items).forEach( item => {
|
||||
itemsdiv.appendChild(itemdiv);
|
||||
|
||||
});
|
||||
Sortable.create(itemsdiv, {"group": "items"});
|
||||
Sortable.create(itemsdiv,
|
||||
{
|
||||
"group": "items",
|
||||
"sort": "false",
|
||||
"draggable": "itemdiv",
|
||||
"onEnd": onDrag,
|
||||
|
||||
});
|
||||
itemsdiv.setAttribute("inventory", "master");
|
||||
wrapper.appendChild(itemsheading);
|
||||
wrapper.appendChild(itemsdiv);
|
||||
|
||||
@ -84,13 +112,21 @@ Object.keys(msg.inventories).forEach( name => {
|
||||
Object.keys(inventory).forEach( item => {
|
||||
item = inventory[item];
|
||||
var thediv = draw_item(item);
|
||||
thediv.style.display = "block";
|
||||
//thediv.style.display = "block";
|
||||
inventorydiv.appendChild(thediv);
|
||||
inventorydiv.style.display = "inline-block";
|
||||
});
|
||||
Sortable.create(inventorydiv, {"group": "items"});
|
||||
|
||||
inventorydiv.style.background = "lightgreen";
|
||||
|
||||
Sortable.create(inventorydiv,
|
||||
{
|
||||
"group": "items",
|
||||
"sort": "false",
|
||||
"draggable": "itemdiv",
|
||||
"onEnd": onDrag,
|
||||
});
|
||||
inventorydiv.setAttribute("inventory", name);
|
||||
|
||||
inventories.appendChild(inventorydiv);
|
||||
|
||||
|
@ -1 +1 @@
|
||||
{"sessions": {"2b7jrklcn6eulwbw": {"id": "2b7jrklcn6eulwbw", "name": "Die coole session von Player 1", "clients": ["bkrqopf5j6q3tpta", "hmrcjnvo2ngs7265"], "owner": "bkrqopf5j6q3tpta", "inventories": {"cho2o2ntflm4mq3u": ["hr3gqfed4zelzdcz", "hr3gqfed4zelzdcz"], "bkrqopf5j6q3tpta": ["7htnswtslkla6rqh", "tuqjjll2cltlw6i6"]}}}, "clients": {"bkrqopf5j6q3tpta": {"id": "bkrqopf5j6q3tpta", "name": "Player 1", "session": "2b7jrklcn6eulwbw"}, "cho2o2ntflm4mq3u": {"id": "cho2o2ntflm4mq3u", "name": "uiae", "session": ""}, "hmrcjnvo2ngs7265": {"id": "hmrcjnvo2ngs7265", "name": "Joe", "session": "2b7jrklcn6eulwbw"}}, "items": {"hr3gqfed4zelzdcz": {"id": "hr3gqfed4zelzdcz", "name": "Revive", "description": "Revives a KO pokemon and brings it to 50% health", "image": "https://1.bp.blogspot.com/-Hz8sIf0g7cY/VsyVIWiLsnI/AAAAAAAAnII/DjW20xLr0R4/s1600/max_revive_by_peetzaahhh2010-d8oki1o.png", "tags": {}}, "7htnswtslkla6rqh": {"id": "7htnswtslkla6rqh", "name": "Potion", "description": "Heals your Pokey-Man by 20 hp", "image": "https://cdn.bulbagarden.net/upload/thumb/4/45/PotionBaseSet94.jpg/200px-PotionBaseSet94.jpg", "tags": {}}, "tuqjjll2cltlw6i6": {"id": "tuqjjll2cltlw6i6", "name": "Revive\u2122", "description": "When mom tells you that there is Max-Revive at home", "image": "https://www.pokewiki.de/images/5/58/Vitalkraut_Traumwelt.png", "tags": {}}}}
|
||||
{"sessions": {"2b7jrklcn6eulwbw": {"id": "2b7jrklcn6eulwbw", "name": "Die coole session von Player 1", "clients": ["bkrqopf5j6q3tpta", "hmrcjnvo2ngs7265"], "owner": "bkrqopf5j6q3tpta", "inventories": {"cho2o2ntflm4mq3u": ["7htnswtslkla6rqh", "7htnswtslkla6rqh", "7htnswtslkla6rqh", "7htnswtslkla6rqh", "7htnswtslkla6rqh"], "bkrqopf5j6q3tpta": ["tuqjjll2cltlw6i6", "tuqjjll2cltlw6i6", "tuqjjll2cltlw6i6", "hr3gqfed4zelzdcz", "hr3gqfed4zelzdcz", "hr3gqfed4zelzdcz"]}}}, "clients": {"bkrqopf5j6q3tpta": {"id": "bkrqopf5j6q3tpta", "name": "Player 1", "session": "2b7jrklcn6eulwbw"}, "cho2o2ntflm4mq3u": {"id": "cho2o2ntflm4mq3u", "name": "uiae", "session": ""}, "hmrcjnvo2ngs7265": {"id": "hmrcjnvo2ngs7265", "name": "Joe", "session": "2b7jrklcn6eulwbw"}}, "items": {"hr3gqfed4zelzdcz": {"id": "hr3gqfed4zelzdcz", "name": "Revive", "description": "Revives a KO pokemon and brings it to 50% health", "image": "https://1.bp.blogspot.com/-Hz8sIf0g7cY/VsyVIWiLsnI/AAAAAAAAnII/DjW20xLr0R4/s1600/max_revive_by_peetzaahhh2010-d8oki1o.png", "tags": {}}, "7htnswtslkla6rqh": {"id": "7htnswtslkla6rqh", "name": "Potion", "description": "Heals your Pokey-Man by 20 hp", "image": "https://cdn.bulbagarden.net/upload/thumb/4/45/PotionBaseSet94.jpg/200px-PotionBaseSet94.jpg", "tags": {}}, "tuqjjll2cltlw6i6": {"id": "tuqjjll2cltlw6i6", "name": "Revive\u2122", "description": "When mom tells you that there is Max-Revive at home", "image": "https://www.pokewiki.de/images/5/58/Vitalkraut_Traumwelt.png", "tags": {}}}}
|
Loading…
Reference in New Issue
Block a user