From 55012666b907a0e392b25cdf299090474f34707e Mon Sep 17 00:00:00 2001 From: Aaron Parecki Date: Mon, 3 Jul 2017 18:57:44 -0700 Subject: [PATCH] all but the complicated scorings --- app/Mission.php | 71 ++++++++++++++++++++++++---- app/Team.php | 9 ++++ resources/views/scoreboard.blade.php | 5 ++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/app/Mission.php b/app/Mission.php index 4c6a02b..876e021 100644 --- a/app/Mission.php +++ b/app/Mission.php @@ -13,12 +13,14 @@ class Mission extends Model return $this->hasMany('App\Tweet'); } - private function unique_transit_lines(Team $team) { + private function unique_trimet_transit_lines(Team $team) { static $cache = []; if(array_key_exists($team->id, $cache)) return $cache[$team->id]; - $tweets = Tweet::where('team_id', $team->id)->where('m1_complete', 1)->get(); + $tweets = Tweet::where('team_id', $team->id) + ->where('m1_complete', 1)->whereNotNull('m1_transit_line_id')->get(); + $lines = []; foreach($tweets as $tweet) { if($tweet->m1_transit_line_id && !in_array($tweet->m1_transit_line_id, $lines)) { @@ -37,6 +39,7 @@ class Mission extends Model $tweets = Tweet::where('team_id', $team->id)->where('m2_complete', 1)->get(); $centers = []; + foreach($tweets as $tweet) { if($tweet->m2_transit_center_id && !in_array($tweet->m2_transit_center_id, $centers)) { $centers[] = $tweet->m2_transit_center_id; @@ -77,8 +80,8 @@ class Mission extends Model public function complete(Team $team) { switch($this->id) { case 1: - // 5 unique transit lines - return $this->unique_transit_lines($team) >= 5; + // 5 unique trimet transit lines + return $this->unique_trimet_transit_lines($team) >= 5; case 2: // 3 unique transit centers return $this->unique_transit_centers($team) >= 3; @@ -95,9 +98,9 @@ class Mission extends Model public function progress(Team $team) { switch($this->id) { case 1: - return [$this->unique_transit_lines($team), 5]; + return [$this->unique_trimet_transit_lines($team), 5]; case 2: - return [$this->unique_transit_lines($team), 3]; + return [$this->unique_transit_centers($team), 3]; case 3: case 4: case 5: @@ -112,13 +115,65 @@ class Mission extends Model public function score(Team $team) { switch($this->id) { case 1: - - + // No points unless they hit 5 trimet transit lines + if($this->complete($team)) { + $score = 50; + // 20 bonus for each line that is not trimet + $tweet = Tweet::where('team_id', $team->id)->where('m1_complete', 1)->whereNotNull('m1_non_trimet')->get(); + $lines = []; + foreach($tweet as $tweet) { + if(!in_array($tweet->m1_non_trimet, $lines)) { + $lines[] = $tweet->m1_non_trimet; + } + } + $score += count($lines) * 20; + return $score; + } else { + return 0; + } break; case 2: + // No points unless they hit 3 transit centers + if($this->complete($team)) { + $score = 50; + // 20 bonus points for any TC with another team + + // ?? Increasing bonus points for additional transit centers + // Triple points for each? transit center that no other team goes to + } else { + return 0; + } break; + case 3: + case 4: + case 6: + if($this->complete($team)) { + return 50; + } else { + return 0; + } + case 5: + if($this->complete($team)) { + $score = 50; + + return $score; + } else { + return 0; + } + case 7: + if($this->complete($team)) { + $score = 50; + // +5 for each additional photo + $extra_docs = $this->unique_documents($team) - 3; + if($extra_docs > 0) { + $score += $extra_docs * 5; + } + return $score; + } else { + return 0; + } } } } diff --git a/app/Team.php b/app/Team.php index 1d7622f..26c631d 100644 --- a/app/Team.php +++ b/app/Team.php @@ -17,4 +17,13 @@ class Team extends Model public function tweets() { return $this->hasMany('App\Tweet'); } + + public function total_score() { + $score = 0; + $missions = Mission::get(); + foreach($missions as $mission) { + $score += $mission->score($this); + } + return $score; + } } diff --git a/resources/views/scoreboard.blade.php b/resources/views/scoreboard.blade.php index 5c5e131..6191de8 100644 --- a/resources/views/scoreboard.blade.php +++ b/resources/views/scoreboard.blade.php @@ -15,6 +15,7 @@ {{ $mission->hashtag }} @endforeach + Score @@ -33,10 +34,14 @@ @foreach($missions as $mission) +
{{ $mission->score($team) }}
{{ $mission->complete($team) ? 'Complete' : '' }}
{{ $mission->progress($team)[0].'/'.$mission->progress($team)[1] }}
@endforeach + + {{ $team->total_score() }} + @endforeach