vault backup: 2025-04-20 00:05:45
This commit is contained in:
8
.obsidian/workspace.json
vendored
8
.obsidian/workspace.json
vendored
@@ -41,12 +41,12 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md",
|
"file": "PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Untitled"
|
"title": "FUN_80012df4 RenderInterface"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -207,8 +207,8 @@
|
|||||||
},
|
},
|
||||||
"active": "dd912cc876184c4f",
|
"active": "dd912cc876184c4f",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md",
|
"PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md",
|
||||||
"PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md",
|
"PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
|
"PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
|
||||||
"PERSONAL PROJECTS/P2EP/pseudoCode",
|
"PERSONAL PROJECTS/P2EP/pseudoCode",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/Untitled",
|
"PERSONAL PROJECTS/PS1 DOCS/Untitled",
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
``` c
|
||||||
|
#include <libgte.h>
|
||||||
|
#include <libgpu.h>
|
||||||
|
|
||||||
|
/* Структура данных интерфейса */
|
||||||
|
typedef struct {
|
||||||
|
int max_elements; // Максимальное количество элементов (param_2)
|
||||||
|
int version_flag; // Флаг версии (инициализируется 1)
|
||||||
|
int element_size; // Размер элемента (0x15 слов)
|
||||||
|
void* render_callback; // Функция рендеринга (LAB_8001399c)
|
||||||
|
int* element_array; // Массив элементов
|
||||||
|
int* texture_data; // Данные текстур (param_3)
|
||||||
|
int* palette_data; // Данные палитры (param_4)
|
||||||
|
} InterfaceManager;
|
||||||
|
|
||||||
|
/* Глобальный указатель на менеджер */
|
||||||
|
InterfaceManager* g_InterfaceMgr = (InterfaceManager*)0x8007CB34;
|
||||||
|
|
||||||
|
/* Инициализация менеджера интерфейса */
|
||||||
|
void InitInterfaceManager(int* manager_ptr, int max_elements, int texture_data, int palette_data)
|
||||||
|
{
|
||||||
|
/* Инициализация базовых полей */
|
||||||
|
g_InterfaceMgr = (InterfaceManager*)manager_ptr;
|
||||||
|
g_InterfaceMgr->max_elements = max_elements;
|
||||||
|
g_InterfaceMgr->version_flag = 1;
|
||||||
|
|
||||||
|
/* Вызов внутренней функции инициализации */
|
||||||
|
InitInterfaceInternal();
|
||||||
|
|
||||||
|
/* Инициализация элементов */
|
||||||
|
for(int i = 0; i < max_elements; i++) {
|
||||||
|
InterfaceElement* elem = GetInterfaceElement(i);
|
||||||
|
elem->index = i;
|
||||||
|
elem->state = 0xFFFF; // Изначально неактивен
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Обработка графических данных */
|
||||||
|
if(texture_data != 0) {
|
||||||
|
g_InterfaceMgr->texture_data = (int*)texture_data;
|
||||||
|
g_InterfaceMgr->palette_data = (int*)(texture_data + palette_data * 4);
|
||||||
|
|
||||||
|
for(int i = 0; i < max_elements; i++) {
|
||||||
|
InterfaceElement* elem = GetInterfaceElement(i);
|
||||||
|
elem->texture_ptr = texture_data;
|
||||||
|
elem->palette_ptr = texture_data + palette_data * 4;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* Режим без текстур */
|
||||||
|
for(int i = 0; i < max_elements; i++) {
|
||||||
|
InterfaceElement* elem = GetInterfaceElement(i);
|
||||||
|
elem->flags |= 0x1000; // Устанавливаем флаг "без текстуры"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Инициализация callback-функции */
|
||||||
|
g_InterfaceMgr->render_callback = &DefaultRenderCallback;
|
||||||
|
|
||||||
|
/* Сброс дополнительных параметров */
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
g_InterfaceMgr->unused_params[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Глобальный флаг */
|
||||||
|
g_GlobalFlag = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Вспомогательные функции */
|
||||||
|
InterfaceElement* GetInterfaceElement(int index) {
|
||||||
|
return (InterfaceElement*)((char*)g_InterfaceMgr->element_array +
|
||||||
|
index * sizeof(InterfaceElement));
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitInterfaceInternal() {
|
||||||
|
/* ... реализация FUN_80012084 ... */
|
||||||
|
}
|
||||||
|
|
||||||
|
void DefaultRenderCallback() {
|
||||||
|
/* ... реализация LAB_8001399c ... */
|
||||||
|
}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user