Add task moving

This commit is contained in:
Anton Vakhrushev 2020-06-24 16:44:58 +03:00
parent eadd68f708
commit a0cd916528
5 changed files with 47 additions and 6 deletions

View File

@ -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);
},
},
});

View File

@ -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 });
},

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);