]> git.localhorst.tv Git - alttp.git/blobdiff - app/Models/Result.php
open tournament type
[alttp.git] / app / Models / Result.php
index cdb86c77798fb2bccb204c740ee0ced94473bf71..c672a6a780856b1222b5e4e5ac6f7cb7ef93aa6b 100644 (file)
@@ -11,6 +11,44 @@ class Result extends Model
        use HasFactory;
 
 
+       public static function compareResult(Result $a, Result $b) {
+               $a_time = !$a->forfeit ? $a->time : 0;
+               $b_time = !$b->forfeit ? $b->time : 0;
+               if ($a_time) {
+                       if ($b_time) {
+                               if ($a_time < $b_time) return -1;
+                               if ($b_time < $a_time) return 1;
+                               return static::compareUsername($a, $b);
+                       }
+                       return -1;
+               }
+               if ($b_time) {
+                       return 1;
+               }
+               if ($a->forfeit) {
+                       if ($b->forfeit) {
+                               return static::compareUsername($a, $b);
+                       }
+                       return -1;
+               }
+               if ($b->forfeit) {
+                       return 1;
+               }
+               return static::compareUsername($a, $b);
+       }
+
+       public static function compareUsername(Participant $a, Participant $b) {
+               return strcasecmp($a->user->username, $b->user->username);
+       }
+
+
+       public function formatTime() {
+               $hours = floor($this->time / 60 / 60);
+               $minutes = floor(($this->time / 60) % 60);
+               $seconds = floor($this->time % 60);
+               return sprintf('%d:%02d:%02d', $hours, $minutes, $seconds);
+       }
+
        public function updateResult($time, $forfeit) {
                $this->time = $time;
                $this->forfeit = $forfeit;
@@ -38,11 +76,20 @@ class Result extends Model
                return $this->belongsTo(Participant::class);
        }
 
+       public function user() {
+               return $this->belongsTo(User::class);
+       }
+
        public function getHasFinishedAttribute() {
                return $this->time > 0 || $this->forfeit;
        }
 
 
+       protected $casts = [
+               'forfeit' => 'boolean',
+               'time' => 'double',
+       ];
+
        protected $appends = [
                'has_finished',
        ];