mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-03 20:28:10 +03:00
117 lines
2.5 KiB
C++
117 lines
2.5 KiB
C++
/*
|
|
by korenkonder
|
|
GitHub/GitLab: korenkonder
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <list>
|
|
#include "../KKdLib/default.hpp"
|
|
|
|
namespace app {
|
|
class TaskInterface {
|
|
public:
|
|
TaskInterface();
|
|
virtual ~TaskInterface();
|
|
|
|
virtual bool Init();
|
|
virtual bool Ctrl();
|
|
virtual bool Dest();
|
|
virtual void Disp();
|
|
virtual void Basic();
|
|
};
|
|
|
|
class Task : public TaskInterface {
|
|
public:
|
|
enum class Op {
|
|
None = 0,
|
|
Init,
|
|
Ctrl,
|
|
Dest,
|
|
Max,
|
|
};
|
|
|
|
enum class Request {
|
|
None = 0,
|
|
Init,
|
|
Dest,
|
|
Suspend,
|
|
Hide,
|
|
Run,
|
|
};
|
|
|
|
enum class State {
|
|
None = 0,
|
|
Running,
|
|
Suspended,
|
|
Hidden,
|
|
};
|
|
|
|
int32_t priority;
|
|
Task* parent_task;
|
|
Op op;
|
|
State state;
|
|
Request request;
|
|
Op next_op;
|
|
State next_state;
|
|
bool field_2C;
|
|
bool is_frame_dependent;
|
|
char name[32];
|
|
uint32_t base_calc_time;
|
|
uint32_t calc_time;
|
|
uint32_t calc_time_max;
|
|
uint32_t disp_time;
|
|
uint32_t disp_time_max;
|
|
|
|
Task();
|
|
virtual ~Task() override;
|
|
|
|
uint32_t GetCalcTime();
|
|
uint32_t GetCalcTimeMax();
|
|
uint32_t GetDispTime();
|
|
uint32_t GetDispTimeMax();
|
|
char* GetName();
|
|
|
|
bool DelTask();
|
|
bool HideTask();
|
|
bool RunTask();
|
|
bool SuspendTask();
|
|
|
|
void SetName(const char* name);
|
|
void SetPriority(int32_t priority);
|
|
};
|
|
|
|
struct TaskWork;
|
|
|
|
extern TaskWork* task_work;
|
|
|
|
struct TaskWork {
|
|
std::list<Task*> tasks;
|
|
Task* current;
|
|
bool disp;
|
|
|
|
TaskWork();
|
|
~TaskWork();
|
|
|
|
static bool AddTask(Task* t,
|
|
const char* name = "(unknown)", int32_t priority = 1);
|
|
static bool AddTask(Task* t, Task* parent_task,
|
|
const char* name = "(unknown)", int32_t priority = 1);
|
|
static void Basic();
|
|
static bool CheckTaskCtrl(Task* t);
|
|
static bool CheckTaskReady(Task* t);
|
|
static void Ctrl();
|
|
static void Dest();
|
|
static void Disp();
|
|
static Task* GetTaskByIndex(int32_t index);
|
|
static bool HasTask(Task* t);
|
|
static bool HasTaskInit(Task* t);
|
|
static bool HasTaskCtrl(Task* t);
|
|
static bool HasTaskDest(Task* t);
|
|
static bool HasTasksDest();
|
|
};
|
|
|
|
extern void task_work_init();
|
|
extern void task_work_free();
|
|
}
|