Skip to content

Instantly share code, notes, and snippets.

@theAprel
Created April 26, 2018 19:32
Show Gist options
  • Select an option

  • Save theAprel/28d46acca7480be9284b8d77c116f448 to your computer and use it in GitHub Desktop.

Select an option

Save theAprel/28d46acca7480be9284b8d77c116f448 to your computer and use it in GitHub Desktop.

Revisions

  1. theAprel created this gist Apr 26, 2018.
    58 changes: 58 additions & 0 deletions Role.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    /**
    * Called when this {@code Role} is created, either at the start of the game
    * or after a player has been converted. Role logic that happens in both of
    * those scenarios should be implemented here. This method is called in both
    * {@link #onGameStart(mafia.Game.State)} and
    * {@link #onConversion(mafia.Game.State)}.
    * <p>
    * The default implementation registers this {@code Role} as a
    * {@link TimeSensitive}.
    *
    * @param state the gamestate at game start or after conversion of the
    * player with this {@code Role}
    * @return
    */
    public List<UiUpdate> onCreation(Game.State state) {
    state.registerTimeSensitive(this);
    return new ArrayList<>();
    }

    /**
    * Called at the start of the game. Not called if a player is converted into
    * this {@code Role}. This method calls
    * {@link #onCreation(mafia.Game.State)}. Role logic that should happen only
    * at the start of the game and <i>not</i> after a conversion should be
    * implemented in this method.
    * <p>
    * The default implementation informs the user of their role (if overridden,
    * call {@code super}).
    *
    * @param state
    * @return
    */
    public Result onGameStart(Game.State state) {
    Result res = new Result().sendSystemMessage(ROLE_REVEAL_SELF_MESSAGE_PREFIX
    + getRoleNameAsAppearsToSelf() + ROLE_REVEAL_SELF_MESSAGE_SUFFIX, self);
    res.add(onCreation(state));
    return res;
    }

    /**
    * Called when a player has been converted into this role. Not called at the
    * start of the game. This method calls
    * {@link #onCreation(mafia.Game.State)}. Role logic that should happen only
    * after conversion and <i>not</i> at the start of the game should be
    * implemented in this method.
    * <p>
    * The default implementation informs the user that they have been converted
    * and their new role (if overridden, call {@code super}).
    *
    * @param state
    * @return
    */
    public List<UiUpdate> onConversion(Game.State state) {
    List<UiUpdate> updates = onCreation(state);
    updates.add(UiUpdate.createSystemMessage(self, "You've been converted to " + getRoleNameAsAppearsToSelf() + "!"));
    updates.add(self.revealSelf());
    return updates;
    }