event cards
This commit is contained in:
		
							parent
							
								
									9f15925bf1
								
							
						
					
					
						commit
						6562f5c1e8
					
				| @ -82,6 +82,7 @@ def get_me(sid, room): | ||||
|                 sio.get_session(sid).game = de_games[0] | ||||
|                 sio.enter_room(sid, de_games[0].name) | ||||
|                 de_games[0].notify_room(sid) | ||||
|             de_games[0].notify_event_card() | ||||
|         else: | ||||
|             create_room(sid, room['name']) | ||||
|         if sio.get_session(sid).game == None: | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| from typing import List, Set, Dict, Tuple, Optional | ||||
| import random | ||||
| import bang.cards as cs | ||||
| import bang.expansions.fistful_of_cards.card_events as ce | ||||
| 
 | ||||
| class Deck: | ||||
|     def __init__(self, game): | ||||
| @ -18,10 +19,19 @@ class Deck: | ||||
|             if c.name not in self.all_cards_str: | ||||
|                 self.all_cards_str.append(c.name) | ||||
|         self.game = game | ||||
|         self.event_cards: List[ce.CardEvent] = [] | ||||
|         if 'fistful_of_cards' in game.expansions: | ||||
|             self.event_cards.extend(ce.get_all_events()) | ||||
|         random.shuffle(self.event_cards) | ||||
|         random.shuffle(self.cards) | ||||
|         self.scrap_pile: List[cs.Card] = [] | ||||
|         print(f'Deck initialized with {len(self.cards)} cards') | ||||
| 
 | ||||
|     def flip_event(self): | ||||
|         if len(self.event_cards) > 0: | ||||
|             self.event_cards.append(self.event_cards.pop(0)) | ||||
|             self.game.notify_event_card() | ||||
| 
 | ||||
|     def peek(self, n_cards: int) -> list: | ||||
|         return self.cards[:n_cards] | ||||
| 
 | ||||
|  | ||||
| @ -1,96 +1,115 @@ | ||||
| from abc import ABC, abstractmethod | ||||
| 
 | ||||
| def CardEvent(ABC): | ||||
| class CardEvent(ABC): | ||||
|     def __init__(self, name, icon): | ||||
|         self.name = name | ||||
|         self.icon = icon | ||||
| 
 | ||||
| def Agguato(CardEvent): | ||||
| class Agguato(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Agguato', '🛁') | ||||
|         super().__init__('Agguato', '🛁') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def Cecchino(CardEvent): | ||||
| class Cecchino(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Cecchino', '👁') | ||||
|         super().__init__('Cecchino', '👁') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def DeadMan(CardEvent): | ||||
| class DeadMan(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Dead Man', '⚰️') | ||||
|         super().__init__('Dead Man', '⚰️') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def FratelliDiSangue(CardEvent): | ||||
| class FratelliDiSangue(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Fratelli Di Sangue', '🩸') | ||||
|         super().__init__('Fratelli Di Sangue', '🩸') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def IlGiudice(CardEvent): | ||||
| class IlGiudice(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Il Giudice', '👨⚖️') | ||||
|         super().__init__('Il Giudice', '👨⚖️') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def Lazo(CardEvent): | ||||
| class Lazo(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Lazo', '📿') | ||||
|         super().__init__('Lazo', '📿') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def LeggeDelWest(CardEvent): | ||||
| class LeggeDelWest(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Legge Del West', '⚖️') | ||||
|         super().__init__('Legge Del West', '⚖️') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def LiquoreForte(CardEvent): | ||||
| class LiquoreForte(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Liquore Forte', '🥃') | ||||
|         super().__init__('Liquore Forte', '🥃') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def MinieraAbbandonata(CardEvent): | ||||
| class MinieraAbbandonata(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Miniera Abbandonata', '⛏') | ||||
|         super().__init__('Miniera Abbandonata', '⛏') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def PerUnPugnoDiCarte(CardEvent): | ||||
| class PerUnPugnoDiCarte(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Per Un Pugno Di Carte', '🎴') | ||||
|         super().__init__('Per Un Pugno Di Carte', '🎴') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def Peyote(CardEvent): | ||||
| class Peyote(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Peyote', '🌵') | ||||
|         super().__init__('Peyote', '🌵') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def Ranch(CardEvent): | ||||
| class Ranch(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Ranch', '🐮') | ||||
|         super().__init__('Ranch', '🐮') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def Rimbalzo(CardEvent): | ||||
| class Rimbalzo(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Rimbalzo', '⏮') | ||||
|         super().__init__('Rimbalzo', '⏮') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def RouletteRussa(CardEvent): | ||||
| class RouletteRussa(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Roulette Russa', '🇷🇺') | ||||
|         super().__init__('Roulette Russa', '🇷🇺') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def Vendetta(CardEvent): | ||||
| class Vendetta(CardEvent): | ||||
|     def __init__(self): | ||||
|         super.__init__('Vendetta', '😤') | ||||
|         super().__init__('Vendetta', '😤') | ||||
|         self.desc = '' | ||||
|         self.desc_eng = '' | ||||
| 
 | ||||
| def get_all_events(): | ||||
|     return [ | ||||
|         Agguato(), | ||||
|         Cecchino(), | ||||
|         DeadMan(), | ||||
|         FratelliDiSangue(), | ||||
|         IlGiudice(), | ||||
|         Lazo(), | ||||
|         LeggeDelWest(), | ||||
|         LiquoreForte(), | ||||
|         MinieraAbbandonata(), | ||||
|         PerUnPugnoDiCarte(), | ||||
|         Peyote(), | ||||
|         Ranch(), | ||||
|         Rimbalzo(), | ||||
|         RouletteRussa(), | ||||
|         Vendetta(), | ||||
|     ] | ||||
| @ -95,7 +95,7 @@ class Game: | ||||
|             current_roles = [type(x.role).__name__ for x in self.players] | ||||
|             current_roles = {x:current_roles.count(x) for x in current_roles} | ||||
|             self.sio.emit('chat_message', room=self.name, data=f'_allroles|{current_roles}') | ||||
|             self.players[self.turn].play_turn() | ||||
|             self.play_turn() | ||||
| 
 | ||||
|     def choose_characters(self): | ||||
|         char_cards = random.sample(characters.all_characters(self.expansions), len(self.players)*2) | ||||
| @ -216,6 +216,8 @@ class Game: | ||||
|         return self.players[(self.turn + 1) % len(self.players)] | ||||
| 
 | ||||
|     def play_turn(self): | ||||
|         if isinstance(self.players[self.turn].role, roles.Sheriff): | ||||
|             self.deck.flip_event() | ||||
|         self.players[self.turn].play_turn() | ||||
| 
 | ||||
|     def next_turn(self): | ||||
| @ -224,6 +226,10 @@ class Game: | ||||
|             self.turn = (self.turn + 1) % len(self.players) | ||||
|             self.play_turn() | ||||
| 
 | ||||
|     def notify_event_card(self): | ||||
|         if len(self.deck.event_cards) > 0: | ||||
|             self.sio.emit('event_card', room=self.name, data=self.deck.event_cards[0].__dict__) | ||||
| 
 | ||||
|     def notify_scrap_pile(self): | ||||
|         print('scrap') | ||||
|         if self.deck.peek_scrap_pile(): | ||||
|  | ||||
| @ -73,12 +73,12 @@ export default { | ||||
| 		0 0 0 3pt  #6aa16e, 0 0 0 6pt white, 0 0 5pt 6pt #aaa | ||||
| } | ||||
| .card.high-noon{ | ||||
| 	box-shadow: 0 0 0pt 6pt #181a1b, 0 0 5pt 6pt #aaa; | ||||
| 	box-shadow: 0 0 0pt 4pt white, 0 0 5pt 4pt #aaa; | ||||
| 	border: 2pt dotted rgb(198 78 45); | ||||
| } | ||||
| .card.fistful-of-cards{ | ||||
| 	box-shadow: 0 0 0pt 6pt #181a1b, 0 0 5pt 6pt #aaa; | ||||
| 	border: 2pt dotted rgb(50 122 172); | ||||
| 	box-shadow: 0 0 0pt 4pt white, 0 0 5pt 4pt #aaa; | ||||
| 	border: 2pt dashed rgb(50 122 172); | ||||
| } | ||||
| .card h4 { | ||||
| 	position: absolute; | ||||
| @ -143,5 +143,11 @@ export default { | ||||
| 		box-shadow:  | ||||
| 			0 0 0 3pt #6aa16e, 0 0 0 6pt #181a1b, 0 0 5pt 6pt #aaa | ||||
| 	} | ||||
| 	.card.high-noon{ | ||||
| 		box-shadow: 0 0 0pt 4pt #181a1b, 0 0 5pt 4pt #aaa; | ||||
| 	} | ||||
| 	.card.fistful-of-cards{ | ||||
| 		box-shadow: 0 0 0pt 4pt #181a1b, 0 0 5pt 4pt #aaa; | ||||
| 	} | ||||
| } | ||||
| </style> | ||||
| @ -2,6 +2,11 @@ | ||||
| 	<div> | ||||
| 		<div class="deck"> | ||||
| 			<card v-if="endTurnAction && isPlaying" v-show="pending_action == 2" :card="endTurnCard" class="end-turn" @click.native="endTurnAction"/> | ||||
| 			<div v-if="eventCard" style="position:relative"> | ||||
| 				<div class="card fistful-of-cards" style="position:relative; bottom:-3pt;right:-3pt;"/> | ||||
| 				<div class="card fistful-of-cards" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/> | ||||
| 				<card :card="eventCard" :key="eventCard" :class="{'last-event':true,'fistful-of-cards':true}"/> | ||||
| 			</div> | ||||
| 			<div style="position:relative"> | ||||
| 				<div class="card back" style="position:absolute; bottom:-3pt;right:-3pt;"/> | ||||
| 				<div class="card back" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/> | ||||
| @ -15,6 +20,7 @@ | ||||
| 			</div> | ||||
| 		</div> | ||||
| 		<transition name="list"> | ||||
| 			<p v-if="eventCard" class="center-stuff"><i>{{($i18n.locale=='it'?eventCard.desc:eventCard.desc_eng)}}</i></p> | ||||
| 			<p v-if="desc" class="center-stuff"><i>{{desc}}</i></p> | ||||
| 		</transition> | ||||
| 	</div> | ||||
| @ -37,6 +43,7 @@ export default { | ||||
| 			icon: '💥', | ||||
| 		}, | ||||
| 		lastScrap: null, | ||||
| 		eventCard: null, | ||||
| 		previousScrap: null, | ||||
| 		pending_action: false, | ||||
| 		isPlaying: true, | ||||
| @ -50,7 +57,10 @@ export default { | ||||
| 		}, | ||||
| 		scrap(card) { | ||||
| 			this.lastScrap = card | ||||
| 		} | ||||
| 		}, | ||||
| 		event_card(card) { | ||||
| 			this.eventCard = card | ||||
| 		}, | ||||
| 	}, | ||||
| 	computed: { | ||||
| 		endTurnCard() { | ||||
| @ -81,10 +91,10 @@ export default { | ||||
| </script> | ||||
| <style scoped> | ||||
| .deck { | ||||
|   display:flex; | ||||
|   margin:0; | ||||
|   align-items: center; | ||||
|   justify-content: center; | ||||
| 	display:flex; | ||||
| 	margin:0; | ||||
| 	align-items: center; | ||||
| 	justify-content: center; | ||||
| 	flex-direction: row-reverse; | ||||
| } | ||||
| .last-scrap { | ||||
| @ -105,6 +115,20 @@ export default { | ||||
| 		transform: translate(0, 0) scale(1); | ||||
| 	} | ||||
| } | ||||
| .last-event { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	animation-duration: 0.8s; | ||||
| 	animation-name: slidein; | ||||
| } | ||||
| @keyframes slidein { | ||||
| 	from { | ||||
| 		transform: translate(30px, 20px) scale(1.3) rotate(-10deg); | ||||
| 	} | ||||
| 	to { | ||||
| 		transform: translate(0, 0) scale(1); | ||||
| 	} | ||||
| } | ||||
| .pick:hover { | ||||
| 	transform: translate(-10px,0); | ||||
| 	z-index: 1; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Alberto Xamin
						Alberto Xamin