Browse Source

Startegická: Update grafického zobrazovátka

master
Jiří Kalvoda 2 years ago
parent
commit
c4d3cd0172
  1. 5
      server/hra/db.py
  2. 16
      server/hra/web/game.py
  3. 4
      server/hra/web/pages.py
  4. 5
      server/static/occupy.css

5
server/hra/db.py

@ -165,6 +165,11 @@ class Team(Base):
game = relationship('Game', primaryjoin='Team.game_id == Game.game_id') game = relationship('Game', primaryjoin='Team.game_id == Game.game_id')
user = relationship('User', primaryjoin='Team.user_id == User.id') user = relationship('User', primaryjoin='Team.user_id == User.id')
def print(self):
if self.user is None:
return f"{self.team_id}: -"
return f"{self.team_id}: {self.user.username}"
class State(Base): class State(Base):
__tablename__ = 'states' __tablename__ = 'states'

16
server/hra/web/game.py

@ -10,7 +10,7 @@ import werkzeug.exceptions
import wtforms import wtforms
from wtforms.fields import EmailField from wtforms.fields import EmailField
from wtforms.widgets import NumberInput from wtforms.widgets import NumberInput
from typing import Optional, Any from typing import Optional, Any, List
import hra.config as config import hra.config as config
import hra.web.html as html import hra.web.html as html
@ -42,12 +42,13 @@ class WLogic:
@add_wlogic @add_wlogic
class Occupy(WLogic): class Occupy(WLogic):
def view(self, state: db.State, team: Optional[db.Team]): def view(self, state: db.State, team: Optional[db.Team], teams: List[db.Team]):
s = state.get_state() s = state.get_state()
if team is not None: if team is not None:
s = self.logic.personalize_state(s, team.team_id, state.round) s = self.logic.personalize_state(s, team.team_id, state.round)
b = BasePage() b = BasePage()
b.h2(f"Hra {self.game.print()} kolo {state.round}") b.h2(f"Hra {self.game.print()} kolo {state.round}")
b.p().b(_class=f"game_team_{team.team_id}")(f"Pohled týmu {team.print()}")
with b.table(_class="game_table"): with b.table(_class="game_table"):
for i, row in enumerate(s["map"]): for i, row in enumerate(s["map"]):
with b.tr(): with b.tr():
@ -58,6 +59,8 @@ class Occupy(WLogic):
with b.td(): with b.td():
classes = [] classes = []
with b.a(href=f"#cell_{i}_{j}"): with b.a(href=f"#cell_{i}_{j}"):
if x["protected_for_team"] is not None:
classes.append("game_protected")
if x["hill"]: if x["hill"]:
classes.append("game_hill") classes.append("game_hill")
b(Markup(" ")) b(Markup(" "))
@ -76,6 +79,7 @@ class Occupy(WLogic):
for i, row in enumerate(s["map"]): for i, row in enumerate(s["map"]):
for j, x in enumerate(row): for j, x in enumerate(row):
occupied_by_team = x["occupied_by_team"] occupied_by_team = x["occupied_by_team"]
protected_for_team = x["protected_for_team"]
home_for_team = x["home_for_team"] home_for_team = x["home_for_team"]
members = x["members"] members = x["members"]
with b.div(id=f"cell_{i}_{j}", _class="game_tab"): with b.div(id=f"cell_{i}_{j}", _class="game_tab"):
@ -84,13 +88,15 @@ class Occupy(WLogic):
b.p().b("Pohoří") b.p().b("Pohoří")
else: else:
if occupied_by_team is not None: if occupied_by_team is not None:
b.p(_class=f"game_team_{occupied_by_team}").b(f"Obsazeno týmem: {occupied_by_team}") b.p(_class=f"game_team_{occupied_by_team}").b(f"Obsazeno týmem: {teams[occupied_by_team].print()}")
if protected_for_team is not None:
b.p(_class=f"game_team_{protected_for_team}").b(f"Ochranné území týmu: {teams[protected_for_team].print()}")
if home_for_team is not None: if home_for_team is not None:
b.p(_class=f"game_team_{home_for_team}").b(f"Domov týmu: {home_for_team}") b.p(_class=f"game_team_{home_for_team}").b(f"Domov týmu: {teams[home_for_team].print()}")
b.p().b(f"Počet osob: {len(members)}") b.p().b(f"Počet osob: {len(members)}")
with b.ul(): with b.ul():
for m in members: for m in members:
b.li(_class=f"game_team_{home_for_team}")(f"Voják {m['id']} týmu {m['team']}") b.li(_class=f"game_team_{home_for_team}")(f"Voják {m['id']} týmu {teams[m['team']].print()}")
b.wrap( b.wrap(

4
server/hra/web/pages.py

@ -287,11 +287,11 @@ def web_game_step(game_id):
return redirect(app.url_for(web_game.__name__, game_id=game_id)) return redirect(app.url_for(web_game.__name__, game_id=game_id))
@app.route("/game/<int:game_id>/view", methods=['GET'])
@app.route("/game/<int:game_id>/view/<int:team_id>", methods=['GET']) @app.route("/game/<int:game_id>/view/<int:team_id>", methods=['GET'])
def web_game_view(game_id, team_id=None): def web_game_view(game_id, team_id=None):
ses = db.get_session() ses = db.get_session()
game = ses.query(db.Game).filter_by(game_id=game_id).one_or_none() game = ses.query(db.Game).filter_by(game_id=game_id).one_or_none()
teams = ses.query(db.Team).filter_by(game_id=game_id).order_by(db.Team.team_id).all()
if game is None: if game is None:
raise werkzeug.exceptions.NotFound() raise werkzeug.exceptions.NotFound()
if not right_for_game(game): if not right_for_game(game):
@ -314,7 +314,7 @@ def web_game_view(game_id, team_id=None):
if state is None: if state is None:
raise werkzeug.exceptions.NotFound() raise werkzeug.exceptions.NotFound()
return wl.view(state, team) return wl.view(state, team, teams)

5
server/static/occupy.css

@ -13,9 +13,10 @@ table.game_table tr td {
text-align: end; text-align: end;
} }
td.game_home { td.game_protected {
border: 4pt solid black; border: medium solid black !important;
} }
td.game_hill { td.game_hill {
background-color: black; background-color: black;
} }

Loading…
Cancel
Save