建筑规划:
在观察柯南的建筑方式的时候,很容易能归纳出几个通用的规则:
1、占用;占用就是空间的占用,就像墙占用了某个竖直的面,护栏就不能再建造到这个竖直面,他两在配表里是有互斥关系的。再比如柱子就是占用中心点,楼梯也是对中心点有占用。
2、连接;连接就是建材模拟真实世界的样子有对应的连接点。比如天花板就会给墙提供连接位置,也会给柱子提供连接位置。
3、载重;载重就是用来限制横向宽度的方法。
4、立方格:以一个长宽高都相等的立方体作为基本网格或者叫体素的单位,进行建筑物(建筑材料)的填充;
5、碰撞模拟:基于4的更细致的体素化碰撞。主要是用存储的方式来进行粗略的碰撞测试(体素的粒度可以自定义,当然越小自然需要更多的内存)
基本的建造规则就来源上面五个限制,也是基本建造原理。
占用规则:使用位掩码,目前我们项目使用了7个位置,分别为:上下左右前后面和中心点。
连接规则:使用位掩码,目前我们项目使用了26个位置点,分别为立方体:八个顶点,十二个边,六个面。
载重规则:载重是以建材的消耗配表,来确定当前建材的承重值。
碰撞模拟:目前是通过碰撞盒的位置,来确定占用的体素(这个要在我们下个版本实现,我暂定的方案是个这个)。
基于上述的这些规则进一步规划:
我打算先使用固定建筑场(策划会规划出,总共建造的长宽高)和 填充建筑场的建筑单位(由策划确定一个单位的大小),进而就可以确定总共能建造多少块 和 每个建筑单位的下标。比如:建筑场容纳40*40*10个建筑单位。每个单位大小为3*3*3.这样整个建筑场就是 120*120*30 的大小。
我打算在每个建筑单位里对建筑材料进行操作和摆放。比如:墙类就会出现在四个面。
根据视点在建筑单位里的位置来确定当前的建筑材料如何摆放。比如:墙类就比较点在四个象限里离那条边近,进而确定该墙类放在哪个面上。
我是用了一个byte,来标记当前建筑材料的变换信息(我们差不多都是90度的旋转,加上正反面,这个字段就够用了)。我把这个byte称之为旋转等级。
每个建筑材料都包含了:需要的连接位置,提供的连接位置,空间的占用位置,消耗的承重值。
建筑材料是否能在当前的位置建造,取决于当前建筑单位是否提供了 当前材料在他当前的选择等级下所需要的连接位置,该位置承重值大于当前材料要消耗的值 和 当前材料要占用的位置并没有被其他建筑材料占有
地基提供了最初的连接位置,来拓展建造。一般来说我们的竖直面支撑的都是0消耗,向外延伸的比如天花板就会消耗20(这样的话延伸4块就终止了)。