核心热路径(数学/内存/字符串/性能分析)用MASM汇编(SSE/AVX2) 外围系统(窗口/渲染/ECS/音频/UI/脚本)用C语言 含自研编辑器、VisualScript积木编程、中文渲染(glyph_atlas)
55 lines
1.7 KiB
C
55 lines
1.7 KiB
C
#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);
|