mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-28 13:31:06 +00:00
Merge remote-tracking branch 'jamal/self-captains' into develop
Conflicts: app/views/gathers/_status.html.erb
This commit is contained in:
commit
0895072845
10 changed files with 102 additions and 18 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,8 +1,12 @@
|
|||
module GathersHelper
|
||||
def render_gather
|
||||
if @gather.status == Gather::STATE_RUNNING
|
||||
headers['Gather'] = '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
|
||||
if @gatherer and @gather.gatherer_votes.first(conditions: { user_id: cuser.id })
|
||||
|
|
|
@ -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,7 +2,16 @@
|
|||
<% if @gather.status == Gather::STATE_RUNNING %>
|
||||
|
||||
<% if @gatherer and @gatherer.can_destroy? cuser %>
|
||||
<p>Gather running, <%= Gather::FULL - @gather.gatherers.length %> more needed.</p>
|
||||
<% 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 %>
|
||||
|
||||
<%= 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) %>
|
||||
|
@ -10,7 +19,11 @@
|
|||
<%= f.hidden_field :gather_id %>
|
||||
<%= f.hidden_field :user_id %>
|
||||
|
||||
<p>Gather running, <%= Gather::FULL - @gather.gatherers.length %> more needed.</p>
|
||||
<% 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 leave_confirm = 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,14 +31,27 @@
|
|||
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", {
|
||||
mp3: "http://www.ensl.org/sounds/gather-5.mp3"
|
||||
}).jPlayer("play");
|
||||
|
||||
|
||||
var click = document.ontouchstart === undefined ? 'click' : 'touchstart';
|
||||
var kickoff = function () {
|
||||
$("#jplayer").jPlayer("play");
|
||||
|
@ -48,11 +64,10 @@
|
|||
volume: 0.6,
|
||||
swfPath: "/flash"
|
||||
});
|
||||
|
||||
played = true
|
||||
}
|
||||
}
|
||||
else if (response.length > 10) {
|
||||
clearInterval(gatherAlertInterval);
|
||||
$("#jplayer").jPlayer("stop");
|
||||
}
|
||||
}
|
||||
|
@ -81,6 +96,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;
|
||||
|
@ -90,6 +106,12 @@
|
|||
});
|
||||
|
||||
$(window).focus(function() {
|
||||
gather_focus = true;
|
||||
|
||||
if (played) {
|
||||
$("#jplayer").jPlayer("stop");
|
||||
}
|
||||
|
||||
if (afk) {
|
||||
updateGathererStatus('active');
|
||||
$.get("/gathers/" + <%= @gather.id %> + ".js");
|
||||
|
@ -135,11 +157,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