MiMoEngine ASM: x86-64 MASM汇编+C混合架构游戏引擎
核心热路径(数学/内存/字符串/性能分析)用MASM汇编(SSE/AVX2) 外围系统(窗口/渲染/ECS/音频/UI/脚本)用C语言 含自研编辑器、VisualScript积木编程、中文渲染(glyph_atlas)
This commit is contained in:
commit
2d56cb3bc9
91 files changed
+9988
No files matched your search
@@ -0,0 +1,54 @@
|
||||
#pragma once
|
||||
|
||||
// ============================================================================
|
||||
// block_workspace.h - 工作区管理
|
||||
// ============================================================================
|
||||
|
||||
#include "block_core.h"
|
||||
|
||||
#define MAX_WORKSPACE_BLOCKS 1024
|
||||
#define MAX_WORKSPACE_CONNECTIONS 2048
|
||||
|
||||
typedef struct BlockWorkspace {
|
||||
Block* blocks[MAX_WORKSPACE_BLOCKS];
|
||||
int block_count;
|
||||
|
||||
BlockConnection connections[MAX_WORKSPACE_CONNECTIONS];
|
||||
int connection_count;
|
||||
|
||||
float view_x, view_y;
|
||||
float zoom;
|
||||
|
||||
Block* selected_block;
|
||||
BlockSlot* dragging_from;
|
||||
float drag_start_x, drag_start_y;
|
||||
|
||||
int next_block_id;
|
||||
|
||||
struct BlockPalette* palette;
|
||||
} BlockWorkspace;
|
||||
|
||||
// 创建/销毁
|
||||
BlockWorkspace* workspace_create(void);
|
||||
void workspace_destroy(BlockWorkspace* ws);
|
||||
|
||||
// 添加/移除积木
|
||||
int workspace_add_block(BlockWorkspace* ws, Block* block);
|
||||
void workspace_remove_block(BlockWorkspace* ws, int block_id);
|
||||
|
||||
// 添加/移除连接
|
||||
bool workspace_add_connection(BlockWorkspace* ws, BlockSlot* from, BlockSlot* to);
|
||||
void workspace_remove_connection(BlockWorkspace* ws, BlockSlot* from);
|
||||
void workspace_remove_all_connections(BlockWorkspace* ws, Block* block);
|
||||
|
||||
// 查找
|
||||
Block* workspace_find_block(BlockWorkspace* ws, int block_id);
|
||||
Block* workspace_find_block_at(BlockWorkspace* ws, float x, float y);
|
||||
BlockSlot* workspace_find_slot_at(BlockWorkspace* ws, float x, float y);
|
||||
|
||||
// 视口变换
|
||||
void workspace_screen_to_world(BlockWorkspace* ws, float sx, float sy, float* wx, float* wy);
|
||||
void workspace_world_to_screen(BlockWorkspace* ws, float wx, float wy, float* sx, float* sy);
|
||||
|
||||
// 清空
|
||||
void workspace_clear(BlockWorkspace* ws);
|
||||
Reference in new issue
Block a user