@@ -15,6 +15,7 @@ import type { InitiativeTrackerData } from "src/settings/settings.types";
1515import type { InitiativeViewState } from "../view.types" ;
1616import {
1717 OVERFLOW_TYPE ,
18+ RESOLVE_TIES ,
1819 RollPlayerInitiativeBehavior ,
1920 getRpgSystem
2021} from "src/utils" ;
@@ -96,7 +97,7 @@ function createTracker() {
9697 return data . descending ;
9798 } ) ;
9899 let _settings : InitiativeTrackerData | null ;
99-
100+
100101 const condensed = derived ( creatures , ( values ) => {
101102 if ( _settings ?. condense ) {
102103 values . forEach ( ( creature , _ , arr ) => {
@@ -117,9 +118,40 @@ function createTracker() {
117118 const ordered = derived ( [ condensed , data ] , ( [ values , data ] ) => {
118119 const sort = [ ...values ] ;
119120 sort . sort ( ( a , b ) => {
120- return data . descending
121+ /* Order creatures in this order:
122+ 1. By initiative
123+ 2. By manual order (drag & drop)
124+ 3. According to the resolveTies setting */
125+ if ( a . initiative != b . initiative ) {
126+ return data . descending
121127 ? b . initiative - a . initiative
122128 : a . initiative - b . initiative ;
129+ }
130+
131+ if (
132+ a . manualOrder !== null && a . manualOrder !== undefined &&
133+ b . manualOrder !== null && b . manualOrder !== undefined &&
134+ a . manualOrder !== b . manualOrder
135+ ) {
136+ const aOrder = a . manualOrder || 0 ;
137+ const bOrder = b . manualOrder || 0 ;
138+ return aOrder - bOrder ;
139+ }
140+
141+ switch ( _settings . resolveTies ) {
142+ case RESOLVE_TIES . random :
143+ return Math . random ( ) < 0.5 ? 1 : - 1 ;
144+ case RESOLVE_TIES . playerFirst :
145+ case RESOLVE_TIES . npcFirst :
146+ const aPlayer = a . player ? 1 : 0 ;
147+ const bPlayer = b . player ? 1 : 0 ;
148+ if ( _settings . resolveTies == RESOLVE_TIES . playerFirst ) {
149+ return bPlayer - aPlayer
150+ } else {
151+ return aPlayer - bPlayer
152+ }
153+ }
154+
123155 } ) ;
124156 current_order = sort ;
125157 return sort ;
@@ -331,6 +363,7 @@ function createTracker() {
331363 creature . modifier
332364 ) ;
333365 }
366+ creature . manualOrder = null ;
334367 }
335368 return creatures ;
336369 }
0 commit comments