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": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md",
|
||||
"file": "PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Untitled"
|
||||
"title": "FUN_80012df4 RenderInterface"
|
||||
}
|
||||
}
|
||||
],
|
||||
@@ -207,8 +207,8 @@
|
||||
},
|
||||
"active": "dd912cc876184c4f",
|
||||
"lastOpenFiles": [
|
||||
"PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md",
|
||||
"PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md",
|
||||
"PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80011f2c InitInterfaceManager.md",
|
||||
"PERSONAL PROJECTS/P2EP/pseudoCode/FUN_80012df4 RenderInterface.md",
|
||||
"PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
|
||||
"PERSONAL PROJECTS/P2EP/pseudoCode",
|
||||
"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