chess_rpg_backend/room/services/room_create.py

66 lines
1.8 KiB
Python
Raw Normal View History

2022-06-24 01:04:35 +03:00
from asgiref.sync import sync_to_async
from random import randint
from common.generators import generate_charset
2022-07-08 01:16:41 +03:00
from game.models import Player, Deck
from room.models import Room, PlayerInRoom, GameState, HeroInGame
2022-06-24 01:04:35 +03:00
def sync_create_room(
2022-06-24 01:04:35 +03:00
deck_id_1: int,
player_id_1: int,
player_score_1: int,
deck_id_2: int,
player_id_2: int,
player_score_2: int,
):
2022-06-24 01:04:35 +03:00
room = Room.objects.create(slug=generate_charset(16))
player_1 = Player.objects.get(id=player_id_1)
player_2 = Player.objects.get(id=player_id_2)
first_player = randint(1, 2)
2022-07-08 01:16:41 +03:00
p1 = PlayerInRoom.objects.create(
2022-06-24 01:04:35 +03:00
player=player_1,
room=room,
score=player_score_1,
deck_id=deck_id_1,
first=first_player == 1,
)
2022-07-08 01:16:41 +03:00
p2 = PlayerInRoom.objects.create(
2022-06-24 01:04:35 +03:00
player=player_2,
room=room,
score=player_score_2,
deck_id=deck_id_2,
first=first_player == 2,
)
2022-07-08 01:16:41 +03:00
for p, d_id in [(p1, deck_id_1), (p2, deck_id_2)]:
2022-07-10 00:06:48 +03:00
GameState.objects.create(
room=room, player=p.player, round=0, message="Game started"
)
for hero_in_deck in Deck.objects.get(id=d_id).heroes():
2022-07-08 01:16:41 +03:00
if p.first:
HeroInGame.objects.create(
2022-07-10 00:06:48 +03:00
hero=hero_in_deck.hero,
player=p,
room=room,
x=hero_in_deck.x,
y=hero_in_deck.y,
2022-07-08 01:16:41 +03:00
)
else:
HeroInGame.objects.create(
2022-07-10 00:06:48 +03:00
hero=hero_in_deck.hero,
player=p,
room=room,
x=hero_in_deck.x,
y=8 - hero_in_deck.y,
2022-07-08 01:16:41 +03:00
)
2022-06-24 01:04:35 +03:00
return room.slug
@sync_to_async
def create_room(**kwargs):
return sync_create_room(**kwargs)