mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-11-15 01:11:23 +00:00
Change Gather style to volunteer captains
This will change the gather format to allow for players to volunteer to be captain / commander. The gather will not change from the running state until 2 commanders have volunteered. Once commanders have volunteered the gather will switch to the picking state. The voting state is no longer used. Also, added a new sound alert that will be played when the gather is full but doesn't have 2 captains. This alert will loop every 10 seconds unless you're the commander. And changed the music to play once the gather switches to the picking state and only if the player doesn't have the gather page on focus.
This commit is contained in:
parent
d0029b118f
commit
ebd60d19eb
10 changed files with 103 additions and 19 deletions
|
@ -63,6 +63,22 @@ class GathersController < ApplicationController
|
|||
redirect_to @gather
|
||||
end
|
||||
|
||||
def captain
|
||||
raise AccessError unless @gatherer
|
||||
|
||||
if @gather.captain1.nil? and @gather.captain2 != @gatherer
|
||||
@gather.update_attribute :captain1, @gatherer
|
||||
elsif @gather.captain2.nil? and @gather.captain1 != @gatherer
|
||||
@gather.update_attribute :captain2, @gatherer
|
||||
elsif @gatherer == @gather.captain1
|
||||
@gather.update_attribute :captain1, nil
|
||||
elsif @gatherer == @gather.captain2
|
||||
@gather.update_attribute :captain2, nil
|
||||
end
|
||||
|
||||
redirect_to @gather
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def get_gather
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
module GathersHelper
|
||||
def render_gather
|
||||
if @gather.status == Gather::STATE_RUNNING
|
||||
if @gather.is_full? and !@gather.is_ready? and @gather.captain1 != @gatherer and @gather.captain2 != @gatherer
|
||||
headers['Gather'] = 'full'
|
||||
else
|
||||
headers['Gather'] = 'running'
|
||||
end
|
||||
|
||||
render partial: 'running', layout: false
|
||||
elsif @gather.status == Gather::STATE_VOTING
|
||||
|
|
|
@ -89,6 +89,17 @@ class Gather < ActiveRecord::Base
|
|||
5
|
||||
end
|
||||
|
||||
def is_full?
|
||||
return gatherers.count == Gather::FULL
|
||||
end
|
||||
|
||||
def is_ready?
|
||||
if is_full? and !captain1.nil? and !captain2.nil?
|
||||
return true
|
||||
end
|
||||
false
|
||||
end
|
||||
|
||||
def first
|
||||
Gather.where(:category_id => category_id).order("id ASC").first
|
||||
end
|
||||
|
@ -124,8 +135,6 @@ class Gather < ActiveRecord::Base
|
|||
g = Gather.new
|
||||
g.category = self.category
|
||||
g.save
|
||||
self.captain1 = self.gatherers.most_voted[1]
|
||||
self.captain2 = self.gatherers.most_voted[0]
|
||||
if self.gather_maps.count > 1
|
||||
self.map1 = self.gather_maps.ordered[0]
|
||||
self.map2 = self.gather_maps.ordered[1]
|
||||
|
@ -139,7 +148,7 @@ class Gather < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def check_captains
|
||||
if captain1_id_changed? or captain2_id_changed? or admin
|
||||
if status == STATE_RUNNING and is_ready? or admin
|
||||
self.turn = 1
|
||||
self.status = STATE_PICKING
|
||||
gatherers.each do |gatherer|
|
||||
|
@ -151,6 +160,13 @@ class Gather < ActiveRecord::Base
|
|||
gatherer.update_attributes(:team => nil, :skip_callbacks => true)
|
||||
end
|
||||
end
|
||||
|
||||
# Create a new shout msgs when the gather is full
|
||||
Shoutmsg.new({
|
||||
:shoutable_type => self.class.to_s,
|
||||
:shoutable_id => self.id,
|
||||
:text => I18n.t(:gather_start_shout)
|
||||
}).save
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ class Gatherer < ActiveRecord::Base
|
|||
validates :confirm, :acceptance => true, :unless => Proc.new {|gatherer| gatherer.user.gatherers.count >= 5}
|
||||
validate :validate_username
|
||||
|
||||
after_create :start_gather, :if => Proc.new {|gatherer| gatherer.gather.gatherers.count == Gather::FULL}
|
||||
after_create :start_gather, :if => Proc.new {|gatherer| gatherer.gather.is_ready?}
|
||||
after_create :notify_gatherers, :if => Proc.new {|gatherer| gatherer.gather.gatherers.count == Gather::NOTIFY}
|
||||
after_update :change_turn, :unless => Proc.new {|gatherer| gatherer.skip_callbacks == true}
|
||||
after_destroy :cleanup_votes
|
||||
|
@ -118,6 +118,12 @@ class Gatherer < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def cleanup_votes
|
||||
if gather.captain1_id == id
|
||||
gather.update_attribute :captain1, nil
|
||||
elsif gather.captain2_id == id
|
||||
gather.update_attribute :captain2, nil
|
||||
end
|
||||
|
||||
gather.map_votes.all(:conditions => {:user_id => user_id}).each { |g| g.destroy }
|
||||
gather.server_votes.all(:conditions => {:user_id => user_id}).each { |g| g.destroy }
|
||||
gather.gatherer_votes.all(:conditions => {:user_id => user_id}).each { |g| g.destroy }
|
||||
|
|
|
@ -17,7 +17,6 @@ class Shoutmsg < ActiveRecord::Base
|
|||
attr_protected :id, :created_at, :updated_at, :user_id
|
||||
|
||||
validates_length_of :text, :in => 1..100
|
||||
validates_presence_of :user
|
||||
|
||||
scope :recent,
|
||||
:include => :user,
|
||||
|
|
|
@ -9,6 +9,13 @@
|
|||
<li<% if gatherer.status > 0 %> class="away"<% end %>>
|
||||
<%= flag gatherer.user.country %>
|
||||
<%= namelink gatherer.user %>
|
||||
|
||||
<% if gatherer == @gather.captain1 or gatherer == @gather.captain2 %>
|
||||
<span class="captain">
|
||||
<%= icon('star') %>
|
||||
</span>
|
||||
<% end %>
|
||||
|
||||
<% if cuser and cuser.admin? %>
|
||||
<%= link_to gatherer, method: :delete, class: 'delete' do %>
|
||||
<%= icon 'times' %>
|
||||
|
|
|
@ -2,15 +2,28 @@
|
|||
<% if @gather.status == Gather::STATE_RUNNING %>
|
||||
|
||||
<% if @gatherer and @gatherer.can_destroy? cuser %>
|
||||
<% if Gather::FULL == @gather.gatherers.length %>
|
||||
<p>Gather is full but we are waiting on commanders. If you would like to command, please use the button below.</p>
|
||||
<% else %>
|
||||
<p>Gather running, <%= Gather::FULL - @gather.gatherers.length %> more needed.</p>
|
||||
<%= link_to 'Leave Gather', @gatherer, confirm: 'Are you sure?', method: :delete, class: 'button tiny' %>
|
||||
<% end %>
|
||||
|
||||
<%= form_tag "/gathers/captain/#{@gather.id}" do %>
|
||||
<%= submit_tag (@gather.captain1 == @gatherer or @gather.captain2 == @gatherer) ? 'Stop Commanding' : 'Command a Team', class: 'button tiny' %>
|
||||
<% end %>
|
||||
|
||||
<%= link_to 'Leave Gather', @gatherer, confirm: 'Are you sure?', method: :delete, class: 'button tiny leave-gather' %>
|
||||
|
||||
<% elsif (g = Gatherer.new(gather: @gather, user: cuser)).can_create?(cuser) %>
|
||||
<%= form_for g do |f| %>
|
||||
<%= f.hidden_field :gather_id %>
|
||||
<%= f.hidden_field :user_id %>
|
||||
|
||||
<% if Gather::FULL == @gather.gatherers.length %>
|
||||
<p>Gather is full but we are waiting on commanders. If you would like to command, please use the button below.</p>
|
||||
<% else %>
|
||||
<p>Gather running, <%= Gather::FULL - @gather.gatherers.length %> more needed.</p>
|
||||
<% end %>
|
||||
<p>
|
||||
You can download custom maps via the
|
||||
<%= link_to "Steam Workshop", "http://steamcommunity.com/workshop/browse?searchtext=&childpublishedfileid=0§ion=items&appid=4920&browsesort=trend&requiredtags%5B%5D=level" %>.
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<div id="jplayer"></div>
|
||||
<script type="text/javascript">
|
||||
var gather_focus = true;
|
||||
var played = false;
|
||||
var leaving = true;
|
||||
<% if @gatherer and @gatherer.can_destroy? cuser %>
|
||||
|
@ -21,6 +22,8 @@
|
|||
});
|
||||
}
|
||||
|
||||
var gatherAlertInterval;
|
||||
|
||||
$(document).ready(function() {
|
||||
$.PeriodicalUpdater("/gathers/" + <%= @gather.id %> + ".js", {
|
||||
method: "GET",
|
||||
|
@ -28,8 +31,21 @@
|
|||
minTimeout: 5000,
|
||||
maxTimeout: 15000,
|
||||
success: function(response, text, request) {
|
||||
if (request.getResponseHeader('Gather') == 'voting') {
|
||||
if (!played) {
|
||||
if (request.getResponseHeader('Gather') == 'full') {
|
||||
// Play notification while we wait on captains
|
||||
if (!gatherAlertInterval) {
|
||||
$('#jplayer').jPlayer({
|
||||
ready: function() {
|
||||
$(this).jPlayer('setMedia', {mp3: '/sounds/gather-alert.mp3'}).jPlayer("play");
|
||||
},
|
||||
loop: false
|
||||
});
|
||||
gatherAlertInterval = setInterval(function() { $("#jplayer").jPlayer("play"); }, 10000);
|
||||
}
|
||||
} else if (request.getResponseHeader('Gather') == 'picking' && !played) {
|
||||
played = true
|
||||
|
||||
if (!gather_focus) {
|
||||
$("#jplayer").jPlayer({
|
||||
ready: function() {
|
||||
$(this).jPlayer("setMedia", {
|
||||
|
@ -48,11 +64,10 @@
|
|||
volume: 0.6,
|
||||
swfPath: "/flash"
|
||||
});
|
||||
|
||||
played = true
|
||||
}
|
||||
}
|
||||
else if (response.length > 10) {
|
||||
clearInterval(gatherAlertInterval);
|
||||
$("#jplayer").jPlayer("stop");
|
||||
}
|
||||
}
|
||||
|
@ -74,6 +89,7 @@
|
|||
var afk_timeout;
|
||||
var afk_time = 1000 * 60 * 15; // 15 minutes
|
||||
$(window).blur(function() {
|
||||
gather_focus = false;
|
||||
afk_timeout = setTimeout(function() {
|
||||
if (gatherer_id > 0) {
|
||||
afk = true;
|
||||
|
@ -83,6 +99,12 @@
|
|||
});
|
||||
|
||||
$(window).focus(function() {
|
||||
gather_focus = true;
|
||||
|
||||
if (played) {
|
||||
$("#jplayer").jPlayer("stop");
|
||||
}
|
||||
|
||||
if (afk) {
|
||||
updateGathererStatus('active');
|
||||
$.get("/gathers/" + <%= @gather.id %> + ".js");
|
||||
|
@ -128,11 +150,11 @@
|
|||
</div>
|
||||
|
||||
<div class="info">
|
||||
<h6>Captains</h6>
|
||||
<h6>Commanders</h6>
|
||||
<ul>
|
||||
<li>Vote for the <strong>best</strong> players</li>
|
||||
<li>Captain 1 = 2nd most voted</li>
|
||||
<li>Captain 2 = 1st most voted</li>
|
||||
<li>Players choose to become commanders</li>
|
||||
<li>Commanders will pick team players</li>
|
||||
<li>Gather will not start without commanders</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ en:
|
|||
contests_join: "Team successfully joined contest."
|
||||
contests_contester_update: "Contester was successfully updated."
|
||||
gather_create: "New Gather was started successfully."
|
||||
gather_start_shout: "The gather is full and commanders are picking teams."
|
||||
gathers_join: "You have joined the Gather."
|
||||
gathers_user_pick: "You have successfully selected a player for your team."
|
||||
gatherers_update: "Gather player successfully updated."
|
||||
|
|
BIN
public/sounds/gather-alert.mp3
Normal file
BIN
public/sounds/gather-alert.mp3
Normal file
Binary file not shown.
Loading…
Reference in a new issue