werewolf-1.0.2.1: A game engine for playing werewolf within an arbitrary chat client

Copyright(c) Henry J. Wylde, 2016
LicenseBSD3
Maintainerpublic@hjwylde.com
Safe HaskellNone
LanguageHaskell2010

Game.Werewolf.Player

Contents

Description

Players are quite simple in themselves. They have a name, role and state. Any complex behaviour is handled in Game.Werewolf.Command and Game.Werewolf.Engine.

Synopsis

Player

data Player Source

A player has a name, role and state. Any stateful information needed for a player's role is held on the Game itself.

N.B., player equality is defined on just the name.

data State Source

Surprise surprise, players may be Dead or Alive.

Constructors

Alive 
Dead 

newPlayer :: Text -> Role -> Player Source

Creates a new Alive player.

Traversals

druid :: Traversal' Player () Source

The traversal of Players with a druidRole.

druid = role . only druidRole

lycan :: Traversal' Player () Source

The traversal of Players with a lycanRole.

lycan = role . only lycanRole

seer :: Traversal' Player () Source

The traversal of Players with a seerRole.

seer = role . only seerRole

witch :: Traversal' Player () Source

The traversal of Players with a witchRole.

witch = role . only witchRole

villager :: Traversal' Player () Source

The traversal of Players aligned with the Villagers.

villager = role . allegiance . _Villagers

werewolf :: Traversal' Player () Source

The traversal of Players aligned with the Werewolves.

werewolf = role . allegiance . _Werewolves

These are provided just as a bit of sugar to avoid continually writing traverse ..

names :: Traversable t => Traversal' (t Player) Text Source

This Traversal provides the traversal of Player names.

names = traverse . name

roles :: Traversable t => Traversal' (t Player) Role Source

This Traversal provides the traversal of Player roles.

roles = traverse . role

states :: Traversable t => Traversal' (t Player) State Source

This Traversal provides the traversal of Player states.

states = traverse . state

N.B., these are not legal traversals for the same reason filtered isn't!

druids :: Traversable t => Traversal' (t Player) Player Source

This Traversal provides the traversal of druid Players.

druids = traverse . filtered (is druid)

lycans :: Traversable t => Traversal' (t Player) Player Source

This Traversal provides the traversal of lycan Players.

lycans = traverse . filtered (is lycan)

seers :: Traversable t => Traversal' (t Player) Player Source

This Traversal provides the traversal of seer Players.

seers = traverse . filtered (is seer)

alive :: Traversal' Player Player Source

This Traversal provides the traversal of Alive Players.

alive = filtered (has $ state . _Alive)

dead :: Traversal' Player Player Source

This Traversal provides the traversal of Dead Players.

dead = filtered (has $ state . _Dead)