diff --git a/src/DashboardView/Store.ts b/src/DashboardView/Store.ts index 6ec4bc7..c17e15b 100644 --- a/src/DashboardView/Store.ts +++ b/src/DashboardView/Store.ts @@ -21,6 +21,8 @@ export enum Actions { SaveVillageSettings = 'save_village_settings', ToggleVillageReceiveMode = 'toggle_village_receive_mode', RemoveVillageTask = 'remove_village_task', + UpVillageTask = 'up_village_task', + DownVillageTask = 'down_village_task', } export function createStore(villageFactory: VillageFactory) { @@ -108,6 +110,14 @@ export function createStore(villageFactory: VillageFactory) { const controller = villageFactory.createController(villageId); controller.removeTask(taskId); }, + [Actions.UpVillageTask]({}, { villageId, taskId }) { + const controller = villageFactory.createController(villageId); + controller.upTask(taskId); + }, + [Actions.DownVillageTask]({}, { villageId, taskId }) { + const controller = villageFactory.createController(villageId); + controller.downTask(taskId); + }, }, }); diff --git a/src/DashboardView/VillageTaskList.vue b/src/DashboardView/VillageTaskList.vue index 45ec1e2..651c6cb 100644 --- a/src/DashboardView/VillageTaskList.vue +++ b/src/DashboardView/VillageTaskList.vue @@ -26,8 +26,12 @@ export default { props: ['villageId', 'tasks'], computed: {}, methods: { - upTask(taskId) {}, - downTask(taskId) {}, + upTask(taskId) { + this.$store.dispatch(Actions.UpVillageTask, { villageId: this.villageId, taskId }); + }, + downTask(taskId) { + this.$store.dispatch(Actions.DownVillageTask, { villageId: this.villageId, taskId }); + }, removeTask(taskId) { this.$store.dispatch(Actions.RemoveVillageTask, { villageId: this.villageId, taskId }); }, diff --git a/src/VillageController.ts b/src/VillageController.ts index e886f35..2b58292 100644 --- a/src/VillageController.ts +++ b/src/VillageController.ts @@ -45,6 +45,14 @@ export class VillageController { this.taskCollection.removeTask(taskId); } + upTask(taskId: TaskId) { + this.taskCollection.upTask(taskId); + } + + downTask(taskId: TaskId) { + this.taskCollection.downTask(taskId); + } + postponeTask(taskId: TaskId, seconds: number) { this.taskCollection.postponeTask(taskId, seconds); } diff --git a/src/VillageState.ts b/src/VillageState.ts index 3c5f5e3..0c79db7 100644 --- a/src/VillageState.ts +++ b/src/VillageState.ts @@ -206,10 +206,7 @@ function getReadyForProductionTask( queues: VillageProductionQueueStateDict, maxResourcesForTask: Resources ): Task | undefined { - const nowTs = timestamp(); - const firstReadyGroup = Object.values(queues).find( - group => group.currentTaskFinishTimestamp <= nowTs && group.tasks.length !== 0 - ); + const firstReadyGroup = Object.values(queues).find(group => group.isWaiting); if (!firstReadyGroup) { return undefined; } diff --git a/src/VillageTaskCollection.ts b/src/VillageTaskCollection.ts index 3fb84df..3f21dcb 100644 --- a/src/VillageTaskCollection.ts +++ b/src/VillageTaskCollection.ts @@ -60,6 +60,28 @@ export class VillageTaskCollection { this.removeTasks(t => t.id === taskId); } + upTask(taskId: TaskId): void { + const tasks = this.storage.getTasks(); + const index = tasks.findIndex(t => t.id === taskId); + if (index < 0 || index === 0) { + return; + } + const movedTask = tasks.splice(index, 1)[0]; + tasks.splice(index - 1, 0, movedTask); + this.storage.storeTaskList(tasks); + } + + downTask(taskId: TaskId) { + const tasks = this.storage.getTasks(); + const index = tasks.findIndex(t => t.id === taskId); + if (index < 0 || index === tasks.length - 1) { + return; + } + const movedTask = tasks.splice(index, 1)[0]; + tasks.splice(index + 1, 0, movedTask); + this.storage.storeTaskList(tasks); + } + postponeTask(taskId: TaskId, seconds: number) { const modifyTime = withTime(timestamp() + seconds); this.modifyTasks(task => task.id === taskId, modifyTime);