フロントエンドプレイアブル
This commit is contained in:
62
app/controllers/game_participants_controller.rb
Normal file
62
app/controllers/game_participants_controller.rb
Normal file
@@ -0,0 +1,62 @@
|
||||
class GameParticipantsController < ApplicationController
|
||||
before_action :set_game
|
||||
before_action :require_login
|
||||
before_action :require_participant, only: [:select_power]
|
||||
|
||||
# POST /games/1/game_participants/select_power
|
||||
def select_power
|
||||
power_name = params[:power_name]
|
||||
|
||||
unless power_name.present?
|
||||
redirect_to @game, alert: "国を選択してください"
|
||||
return
|
||||
end
|
||||
|
||||
# 利用可能な国のリストを取得
|
||||
available_powers = get_available_powers
|
||||
|
||||
unless available_powers.include?(power_name)
|
||||
redirect_to @game, alert: "無効な国です"
|
||||
return
|
||||
end
|
||||
|
||||
# 既に選択されているかチェック
|
||||
if @game.game_participants.exists?(power: power_name)
|
||||
redirect_to @game, alert: "その国は既に選択されています"
|
||||
return
|
||||
end
|
||||
|
||||
# 国を選択
|
||||
@current_participant.select_power!(power_name)
|
||||
|
||||
# 全員が選択したかチェック
|
||||
if @game.can_start_order_input?
|
||||
redirect_to @game, notice: "国を選択しました。全員の選択が完了しました!"
|
||||
else
|
||||
redirect_to @game, notice: "国を選択しました。他のプレイヤーの選択を待っています..."
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_game
|
||||
@game = Game.find(params[:game_id])
|
||||
@current_participant = current_user && @game.game_participants.find_by(user: current_user)
|
||||
end
|
||||
|
||||
def require_participant
|
||||
unless @current_participant
|
||||
redirect_to @game, alert: "このゲームに参加していません"
|
||||
end
|
||||
end
|
||||
|
||||
def get_available_powers
|
||||
# ディプロマシーの標準的な国
|
||||
standard_powers = %w[Austria England France Germany Italy Russia Turkey]
|
||||
|
||||
# 既に選択されている国を除外
|
||||
selected_powers = @game.game_participants.where.not(power: nil).pluck(:power)
|
||||
|
||||
standard_powers - selected_powers
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user