这款模组关于施法的 Forge 模组,模组的单法术范围挖掘(3x3,5x3,5x5...)这是法术是怎么样的发生的呢?
HexCasting--单法术范围挖掘教程
以下讲解使用3x3挖掘,玩家看向方块的上面为例:
基本思路
通过递归的方式生成一个[0, 1, ... , 7, 8]的列表(如果递归深度有限制可以把这一步改成一个硬编码的列表)
获取玩家所看方块的坐标
获取玩家所看方块的面的法向量
将上一步的法向量分别与xyz三个轴的基准向量( 如:x轴基准向量为(1, 0, 0) )做叉乘(如果两向量在同一条直线上,则叉乘结果为(0, 0, 0) )
将上一步的三个叉乘结果放在一个列表中,并将其与[(0, 0, 0)]这个列表做异或操作(去除两列表中重复的元素),这一步的结果就是需要进行偏移的两个轴
对于第一步中生成的列表的每一个元素(以下称为i),执行:
将i分别进行地板除和取余来获得在两个轴上的偏移量
把需要偏移的两个轴的向量分别乘上上一步得到的偏移量
把玩家所看方块的坐标加上上一步的两个结果
破坏上一步结果处的方块
效果图
注:
- 本法术仅为个人实现方法,不代表最好实现方式。
- 由于当前模组版本一个疑似为bug的向量浮点运算问题,此法术目前只能在xyz的负半轴方向使用,后续模组版本可能会修复。作者已在github修复问题,下一个版本(0.8.4?)将不再存在此问题
- 由于使用递归的实现方式,在模组默认递归深度配置下无法实现较大范围挖掘;可以通过改配置或把前面部分改成硬编码来解决。
伪代码
注:此代码为5x5挖掘的代码,需要更改//EDITME部分来改成其它挖掘大小
递归列表生成部分
相关模组