-
Notifications
You must be signed in to change notification settings - Fork 1
Home
新版API直接看 源码 吧
LuaPhysShip就是物理帧事件数据对象,getControllerRotationMat() 以及 欧拉角 会自动转换到控制器坐标系(箭头方向为front向量) 全息显示器基本无变动
作用:通过ComputerCraft中的电脑来驱动飞船。
当方块被加载的时候,会自动设置为待机模式。
待机模式下,会提供高额的旋转阻尼和运动阻尼以保持船体静止。通过连接CC可开关待机模式。
当控制器所在的船上驱动质量总和小于船体质量时(引擎太少、转速不够或应力过载),控制器将无法驱动飞船(会瞬间阳痿,请保证引擎有持续且稳定的应力供应)。
方法(参数): 返回值类型
返回:船的数字ID
返回:船的名字
返回:船的质量
开关待机模式。待机模式开启时,将产生巨大的运动阻尼并施加一个与重力相反的力(可能会和别的mod的力有冲突导致往上飘)。
返回:船体当前的惯性张量(3x3矩阵)。
返回:船当前的角速度
返回:船当前的旋转姿态
返回:船当前的世界坐标
返回:船当前的速度
返回:控制器箭头朝向(世界坐标系)
返回:控制器方块朝向(船坐标系)
返回:滚转,偏航,俯仰
返回:控制器是否在船上
返回:船体当前姿态的旋转矩阵。
返回:当前该船上的引擎可驱动的总质量
作用:施加一个恒力(时长为1物理帧)
作用:施加一个恒定扭矩(时长为1物理帧)
作用:在指定坐标处施加一个恒力(时长为1物理帧)
作用:以船自身为参照系,对船施加一个恒力(时长为1物理帧)
作用:以船自身为参照系,对船施加一个恒定扭矩(时长为1物理帧)
作用:以船自身为参照系,对船指定坐标处施加一个恒力(时长为1物理帧)
触发时机:每物理帧触发一次
事件返回值:船当前帧的运动信息(线速度,角速度,姿态等)
成员:x,y,z
成员:x,y,z,w
二维数组
二维数组
成员:
getInertia(): table -> inertiaInfo
返回:惯性信息(惯性张量矩阵和质量)。
getPoseVel(): table -> poseInfo
返回:姿态信息。
getBuoyantFactor(): double
返回:浮力系数
成员字段:
momentOfInertiaTensor: Matrix3x3
当前惯性张量矩阵
mass: double
当前质量
成员字段:
velocity: vector3 速度
omega: vector3 角速度
pos: vector3 坐标
rot: quaternion 旋转
yaw,pitch,row: double 偏航,俯仰,滚转
成员字段:
up, right, front: vector3 控制器在世界空间的三轴指向(以模型贴图上的箭头方向为front)
请使用phys_tick来获取船的运动信息,并随事件同步执行 applyForce 等操作。
根据转速消耗应力,提供驱动质量上限(可叠加,类似尤里卡的炉子)
驱动质量计算公式: 转速 x EngineStressPerRPM x EngineMassPerStress
EngineStressPerRPM 和 EngineMassPerStress 可在配置文件中更改,默认分别为 8 和 10000
和原版的monitor一样。但是多了setTransparentMode(boolean)和setTransparentColor(colour)
colour是cc的api里面那个
颜色格式:int_32 0xRRGGBBAA
设置屏幕的分辨率。
设置清屏颜色。
刷新屏幕(将屏幕重新渲染)。
将传入的像素点阵(Lua table)绘制到当前缓冲区。
其中 mode = 0 为覆盖模式,会将当前缓冲区内的颜色强行覆盖;
mode = 1 为裁剪模式,当buffer内的颜色Alpha>0时,会将当前缓冲区内的颜色强行覆盖;
mode = 2 为混合模式,会将当前缓冲区内的颜色和buffer内的颜色混合。
绘制文字到当前缓冲区。
mode同上,但 覆盖模式和裁剪模式 的效果相同。
文本支持Unicode中文(仅支持GBK支持的字符集)。
填充当前缓冲区指定区域。
mode同上,但 覆盖模式和裁剪模式 的效果相同。
绘制直线。
DrawTriangle(int x0, int y0, int x1, int y1,int x2, int y2, int color0, int color1, int color2[, int mode]): void
绘制三角形到当前缓冲区。
绘制带纹理的三角形,纹理从framebuffer中采样。 顶点数组vertexs的格式为:
{x, y, u, v}
使用设定的颜色重置屏幕缓冲区。
设置画面的位置偏移。
设置画面的旋转。
设置画面的缩放。
获取屏幕方块坐标。
获取当前屏幕的名字。
重命名屏幕。
创建一个帧缓冲。 返回:帧缓冲编号
获取当前屏幕最大帧缓冲数量。
获取已分配的帧缓冲数量。
释放所有帧缓冲。
释放指定帧缓冲。
设置想要操作的帧缓冲。(当id小于0时为屏幕的颜色缓冲区)
导出当前帧缓冲像素数组。 返回:帧缓冲数据。格式:{w = ?, h = ?, pixels = { 0x00000000, 0x00000000......}} pixels的索引从0开始。
将指定帧缓冲输出到当前操作的帧缓冲的指定位置上。
在当前缓冲区的指定位置设置像素颜色。
获取当前缓冲区指定位置颜色。
在gui中按下按键。
在gui中松开按键。
在gui按下鼠标。
在gui松开鼠标。
在gui滚动滚轮。
s = peripheral.wrap("right")
local function BakeBitMap(buf, color)
local b = {}
i = 0
for _, v in ipairs(buf) do
if v > 0 then
b[i] = color
else
b[i] = 0x00000000
end
i = i + 1
end
return b
end
buffer = {}
for i = 0, (512*256-1) do
buffer[i] = 0x00A0FF6F
end
img = {
0,1,1,0,
1,0,0,1,
1,1,1,1,
1,0,0,1,
1,0,0,1,
0,0,0,0,
}
img = BakeBitMap(img, 0xFF00FFF0)
img2 = BakeBitMap(img, 0xFF00FFFF)
s.Resize(512,256)
s.SetRotation(-15, 15, 0)
s.SetTranslation(0,1,0)
s.SetScale(0.125, 0.125)
s.Fill(256, 128, 256, 128,0xFFA00080,0);
s.Blit(2,10,4,6,img,0)
s.Blit(8,10,4,6,img,1)
s.Blit(14,10,4,6,img,2)
str = "\\u865A\\u7A7A\\u52A8\\u529B\n --Hologram."
s.Text(-3, 50, str, 0xFFFFFF8F, 0)
s.Text(5, 80, str, 0xFFFFFF8F, 2)
s.Flush()
s = peripheral.wrap("right")
s.SetRotation(-30, 5, 0)
s.SetTranslation(0.3,1.0, 0)
s.SetScale(0.15, 0.15)
s.FreeAllFrameBuffer()
fb = s.CreateFrameBuffer(128,128)
s.SetCurrentFrameBuffer(fb)
print(fb)
s.Clear()
s.DrawTriangle(4,8,100,4,50,80,0xFF000080,0x0000FF80,0x00FF0080,0)
s.SetCurrentFrameBuffer(-1)
s.Resize(256,160)
s.Clear()
s.BlitFrameBuffer(16,3,fb)
s.Flush()
s.SetCurrentFrameBuffer(fb)
return s.DumpFrameBuffer()
https://github.com/dfdyz/VoidPowerMod/blob/main/%E5%85%A8%E6%81%AF%E5%B1%8Fhud%E7%A4%BA%E4%BE%8B.zip