| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- syntax = "proto3";
- option go_package = "/pb";
- package pb;
- //{slgeditor}这个标签是地图编辑器相关。
- //{slgeditor enter=MapData }
- // 地图数据主消息
- message MapData {
- // 地图基本信息
- MapInfo map_info = 1;
- //{slgeditor param=MapData.tiles fill=array from=cells } 用这个标签表示这个数组按NxN格子填充
- //地块(格子)数据数组
- //索引计算公式:index = y * width + x
- repeated TileData tiles = 2;
-
- //{slgeditor param=MapData.castles fill=map from=instances key=center globalTagInv=BuildingType globalTagInvVelue=0|10} 用对象列表中对象公共属性 BuildingType != 0 的对象填充列表,
- //系统城
- //系统城
- map<int32,CastleData> castles = 4;
-
- //跨洲寻路概览
- //{slgeditor param=MapData.path_summary}
- CrossStatePathSummary path_summary = 9;
- // 元数据,编辑器专用,方便定位修改记录
- MapMetadata metadata = 10;
- }
- // 地图基本信息
- message MapInfo {
- //{slgeditor param=MapInfo.map_id src=global path=map_id}
- //地图
- int32 map_id = 1;
-
- //{slgeditor param=MapInfo.version_code src=global path=version_code}
- // 地图版本号
- int32 version_code = 2;
-
- //{slgeditor param=MapInfo.width src=global path=mapwith}
- // 地图宽度(格子数)
- int32 width = 3;
- //{slgeditor param=MapInfo.height src=global path=mapwith}
- // 地图高度(格子数)
- int32 height = 4;
-
- // 场景名称
- string unity_scene_name =5 ;
-
- //{slgeditor param=MapInfo.map_name src=global path=map_name}
- // 地图名称
- string map_name = 6;
-
- // 地图描述
- string description = 7;
- }
- // 格子数据
- message TileData {
- //{slgeditor param=TileData.coord_index src=cell kind=pos} cell这种类型的情况,cell=pos导出格子的位置。
- // 格子索引(行优先顺序)
- // 索引计算公式:index = y * width + x
- // 索引从0开始,最大值为 (width * height - 1)
- int32 coord_index = 1;
- //{slgeditor param=TileData.county_id src=cell kind=area} cell这种类型的情况,cell=area 导出区域信息 反正就是导出最低一层是区域。简单来说,导出json的时候建筑有 Area0 Area1 Area2.反正就是最低一层所在的区域节点。
- // 所在县组合规则:
- //例如 1 001 001
- //州ID(001-999) + 省ID(001-999) + 县(001-999) //相当于原json Area1 + Area2 + Area3
- // Area2
- int32 county_id = 2;
-
- //{slgeditor param=TileData.terrain src=cell kind=ground }//这个意思是把地图碰撞值放在这里,就是那个山,水,地面那个
- // 地形类型
- TerrainType terrain = 3;
- //{slgeditor param=TileData.block_type src=cell kind=walkabletag} // 这个就是当前格子的地面信息是否地面可放置层。
- //是否静态固定阻挡
- MapWalkableTag block_type = 4;
-
- //{slgeditor param=TileData.castle_center src=cell kind=center globalTagInv=BuildingType globalTagInvVelue=0|10 default=-1} //这个表示检查当前格子是否被某种instance占用,包括Point,Offset.如果有,这里是instance的center,否则则是defaul值-1
- //系统物件中心点,坐标索引,没有就是-1
- int32 castle_center = 5;
- //{slgeditor param=TileData.is_state_boundary src=cell kind=gperimeter}
- //是否州界
- bool is_state_boundary = 6;
- }
- //行走动态标签tag
- enum MapWalkableTag
- {
- //不可行走
- mwt_disable = 0;
- //可行走
- mwt_enable = 1;
- //动态区域,区域通道占位点的格子标志这个
- mwt_dymamic = 2;
- }
- //系统城/卫城/关隘/渡口/码头
- // 2026.1.14 策划说码头是一个整体,只有一个血条,因此合并系统城/卫城/关隘/渡口/码头数据
- message CastleData
- {
- //中心点 换算公式 index = y * width + x
- //{slgeditor param=CastleData.center src=instance prop=pos} // 所有Vector2In都映射成 y * width + x
- int32 center = 1;
-
- //{slgeditor param=CastleData.config_id src=instance prop=exportId} // 就是导出Instance的id
- //配置Id
- int32 config_id = 2;
- //{slgeditor param=CastleData.occupied_coords src=instance prop=offsets}
- //占据面积(位置索引的集合),不含子建筑(卫城等)
- repeated int32 occupied_coords = 3;
- //{slgeditor param=CastleData.parent src=instance prop=parent}
- //父建筑数据(如有),坐标索引
- int32 parent = 4;
- //{slgeditor param=CastleData.childs src=instance prop=childs}
- //子建筑数据(如有),坐标索引列表
- repeated int32 childs = 5;
-
- //{slgeditor param=CastleData.appearance_index src=instance prop=AppearanceIndex} // 外观索引
- //外观索引
- int32 appearance_index = 6;
- //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=1 path=GarrisonPoint}
- //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=2 path=MainForce} // 将自定义点数组写入 tag_TilePoints[1].TilePoints.list(自动从 TilePoints 的 point_list_field 配置获取字段名)
- //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=3 path=SiegeSquad}
- //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=4 path=SiegePoints}
- //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=5 path=PassageWay}
- //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=6 path=Wall}
-
-
-
- //标签坐标列表,如驻守点等
- // Protobuf 的 map key 不支持 enum,改用 int32(存 MapRuleTag 的数值)
- map<int32,TilePoints> tag_TilePoints = 7;
-
-
- //系统对象类型(系统城、卫城、关隘、渡口、码头)
- //{slgeditor param=CastleData.sys_type src=tag name=BuildingType}
- SysObjType sys_type = 8;
- }
- //策划动态添加的tag
- enum MapRuleTag
- {
- //无,默认值
- mrt_none = 0;
- //驻守点
- mrt_garrison_point = 1;
- //攻城主力站位
- mrt_main_force = 2;
- //拆迁队站位
- mrt_siege_squad = 3;
- //攻城交战位置(与守军交战的位置)
- mrt_siege_Points = 4;
- //通道,关隘/渡口/码头等需要
- mrt_passageway = 5;
- //城墙
- mrt_wall = 6;
- }
- // 地形/地表类型
- enum TerrainType {
- tt_none = 0;
- tt_grass = 1; //草地
- tt_mountain = 2; //山
- tt_water=3; //水
- tt_snowfield = 4; //雪地
- tt_desert = 5; //沙漠
- tt_wall = 10;//城墙
- tt_foundation=20; //联盟驻地城内地基
- }
- // 系统对象(系统城/卫城/关卡/码头)类型
- enum SysObjType{
- so_none = 0; //无
- so_castle = 1; //系统城
- so_moutain_pass = 2 ; //关隘
- so_river_crossing = 3; //渡口
- so_dock = 4; //码头
-
- so_town = 5; //卫城
- }
- // 地图元数据
- message MapMetadata {
- // 创建时间(Unix时间戳)
- int64 created_time = 1;
-
- // 修改时间(Unix时间戳)
- int64 modified_time = 2;
-
- // 作者
- string author = 3;
-
- // 编辑器版本
- string editor_version = 4;
-
- // 备注
- string notes = 5;
-
- // 标签
- repeated string tags = 6;
- }
- //----------------------------------------------------------------
- //跨州寻路
- //跨州寻路参考
- message CrossStatePathSummary
- {
-
- //{slgeditor param=CrossStatePathSummary.one_way_path fill=map from=areaMap areaLevel=1} 这是一个跨区域寻路字典,以区域第1层划分区域。 areaLevel=i,就是区域以哪级为主。
- //遍历所有区域创建字典one_way_path[区域Id]
- //key为起始州Id
- map<int32,AreaStateTarget> one_way_path = 1;
- }
- //州目标
- message AreaStateTarget
- {
- //查找所有建筑,当拥有PassageWay自定义点数据集合,并且查询第一个点和最后一个点
- //如果第一个点是属于当前区域,则添加PassageWay的点的数组到字典。
- //如果第而个点是属于当前区域,则添加PassageWay的点的顺序反转的数组数组到字典。
- //以此表示当前两个区域连续。
- //支持多条路径:同一个目标区域可以有多个通道点实例,每个实例生成一条路径,所有路径存储在TilePathList中
-
- //{slgeditor param=AreaStateTarget.targets fill=map from=areaPath path=PassageWay areaLevel=1} // 自动从 TilePathList 和 TilePoints 的 point_list_field 配置获取字段名
- map<int32,TilePathList> targets = 1;
- }
- //多条路径列表
- //{slgeditor point_list_field=path_list message=TilePathList} // 指定 TilePathList 消息中用于存储路径列表的字段名
- message TilePathList
- {
- //多条路径列表
- //{slgeditor param=TilePathList.path_list fill=array manual=true} // 手动填充,不需要映射规则
- repeated TilePoints path_list =1 ;
- }
- //路径点(坐标索引)列表
- //{slgeditor point_list_field=points message=TilePoints} // 指定 TilePoints 消息中用于存储点列表的字段名
- message TilePoints
- {
- repeated int32 points =1 ;
- }
|