企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 前言 > K社在很久之前,在Github上发布过一个编程块的API源代码,可以理解为编程块操控方块的API文档。 > 然而它最新的更新日期是2年前,这期间API一直在变化,甚至出现过修改重要API导致大批推进器相关脚本失效的问题。 > 我组的笑笑同学一直通过反编译的方式直接从游戏文件中获取最新的API文档,有兴趣的同学可以参考 > [MEA笑笑的编程块API](https://gitee.com/zzc1996/space-engineers-api/tree/master/SE-2/Sandbox.Common/Sandbox/ModAPI/Ingame) 正是因为这样的情况,加之游戏中的方块API确实不太友好,因此我决定对原有的API进行修饰,创造一套新的方块控制规则,通过类来对方块的属性和方法进行二次封装。 <br> ## 说明 方块类是我自己定义的很多个类的统称。 它们之间可能存在依赖关系或继承关系。 考虑到编程块中代码字数有限,我没有把所有方块的类统一封装到一个大类中,而是独立地存在。 它的结构类似于,有一个Block基类,它有所有IMyTerminalBlock类型方块的方法和属性 有一个Rotor类,它继承了Block类,同样拥有Block类的方法和属性,但同时也有自己的拓展方法和属性 这个思路和K社在设计类时的做法是保持一致的。 这样做的好处是,当你的脚本需要控制哪些方块,就可以独立的引入哪些方块类,不需要的就不用引入。 ## 快速上手 1. 首先把方块类的核心代码复制到你的编程块中,检查是否能通过编译(可能因版本问题导致无法通过编译,请使用最新版本,我组会持续维护和更新)。如果能通过编译,进行下一步 2. 将核心代码完整的复制到你的代码最底部 3. 在你的代码中写: ``` void Main(){ LCD lcd = new LCD(GridTerminalSystem.GetBlockWithName("LCD")); //获取一个LCD方块,直接传入LCD类的构造方法,实例化一个LCD出来。 lcd.ShowText = true; //设置LCD的【显示文本到屏幕】选项为开启(因为默认是关闭的) lcd.Text = "哈哈"; //设置LCD的文字内容为“哈哈” } ``` 4. 安装一个LCD,将名字改为 LCD 5. 复制代码到编程块中,点击运行 6. LCD屏幕上会显示 哈哈 两个字 <br> 再来举一个动态的例子 1. 首先把方块类的核心代码复制到你的编程块中,检查是否能通过编译(可能因版本问题导致无法通过编译,请使用最新版本,我组会持续维护和更新)。如果能通过编译,进行下一步 2. 将核心代码完整的复制到你的代码最底部 3. 在你的代码中写: ``` void Main(){ Rotor rt = new Rotor(GridTerminalSystem.GetBlockWithName("Rotor")); //获取一个转子方块,直接传入Rotor类的构造方法,实例化一个转子出来。 rt.TurnTo(90); //让转子转到90度位置 } //这是设置编程块自动循环运行,频率为每秒60次 Program(){ Runtime.UpdateFrequency = UpdateFrequency.Update1; } ``` 4. 安装一个转子,将名字改为 Rotor 5. 复制代码到编程块中,点击运行 6. 转子会转到90度并停止