mirror of
https://github.com/PixelGuys/Cubyz.git
synced 2025-08-03 11:17:05 -04:00
parent
aacd2bae5b
commit
72a68d6b6d
@ -10,9 +10,12 @@
|
||||
.absorbedLight = 0x010101,
|
||||
.collide= false,
|
||||
.rotation = .torch,
|
||||
.model = "cubyz:torch",
|
||||
.model = .{
|
||||
.base = "cubyz:torch",
|
||||
.side = "cubyz:torch_side",
|
||||
},
|
||||
.texture = "cubyz:torch",
|
||||
.item= .{
|
||||
.item = .{
|
||||
.texture = "torch.png",
|
||||
},
|
||||
.lodReplacement = "cubyz:air",
|
||||
|
44
assets/cubyz/models/torch_side.obj
Normal file
44
assets/cubyz/models/torch_side.obj
Normal file
@ -0,0 +1,44 @@
|
||||
v -0.107468665 0.5625 0.24080175
|
||||
v 0.114171505 0.5625 0.9573041
|
||||
v -0.107468665 0.4375 0.24080175
|
||||
v 0.114171505 0.4375 0.9573041
|
||||
v 0.011948407 0.4375 0.20386171
|
||||
v 0.23358858 0.4375 0.92036414
|
||||
v 0.011948407 0.5625 0.20386171
|
||||
v 0.23358858 0.5625 0.92036414
|
||||
vt 0.75 0.0625
|
||||
vt 0.75 0.25
|
||||
vt 0.78125 0.0625
|
||||
vt 0.78125 0.25
|
||||
vt 0.5 0.0625
|
||||
vt 0.5 0.25
|
||||
vt 0.53125 0.0625
|
||||
vt 0.53125 0.25
|
||||
vt 0.25 0.3125
|
||||
vt 0.25 0.5
|
||||
vt 0.28125 0.3125
|
||||
vt 0.28125 0.5
|
||||
vt 0 0.3125
|
||||
vt 0 0.5
|
||||
vt 0.03125 0.3125
|
||||
vt 0.03125 0.5
|
||||
vt 0 0.03125
|
||||
vt 0 0.0625
|
||||
vt 0.03125 0.03125
|
||||
vt 0.03125 0.0625
|
||||
vt 0.25 0
|
||||
vt 0.25 0.03125
|
||||
vt 0.28125 0
|
||||
vt 0.28125 0.03125
|
||||
vn -0.9553365 0 0.29552022
|
||||
vn 0.9553365 0 -0.29552022
|
||||
vn 0 -1 0
|
||||
vn 0 1 0
|
||||
vn 0.29552022 0 0.9553365
|
||||
vn -0.29552022 0 -0.9553365
|
||||
f 2/2/1 1/1/1 3/3/1 4/4/1
|
||||
f 6/6/2 5/5/2 7/7/2 8/8/2
|
||||
f 4/10/3 3/9/3 5/11/3 6/12/3
|
||||
f 8/14/4 7/13/4 1/15/4 2/16/4
|
||||
f 6/18/5 8/17/5 2/19/5 4/20/5
|
||||
f 3/22/6 1/21/6 7/23/6 5/24/6
|
@ -623,7 +623,7 @@ pub const meshes = struct { // MARK: meshes
|
||||
}
|
||||
|
||||
pub fn register(assetFolder: []const u8, _: []const u8, zon: ZonElement) void {
|
||||
_modelIndex[meshes.size] = _mode[meshes.size].createBlockModel(zon.get([]const u8, "model", "cubyz:cube"));
|
||||
_modelIndex[meshes.size] = _mode[meshes.size].createBlockModel(zon.getChild("model"));
|
||||
|
||||
// The actual model is loaded later, in the rendering thread.
|
||||
// But textures can be loaded here:
|
||||
|
@ -10,6 +10,7 @@ const Vec2f = vec.Vec2f;
|
||||
const Vec3i = vec.Vec3i;
|
||||
const Vec3f = vec.Vec3f;
|
||||
const Mat4f = vec.Mat4f;
|
||||
const ZonElement = main.ZonElement;
|
||||
|
||||
const RayIntersectionResult = struct {
|
||||
distance: f64,
|
||||
@ -29,8 +30,8 @@ pub const RotationMode = struct { // MARK: RotationMode
|
||||
fn generateData(_: *main.game.World, _: Vec3i, _: Vec3f, _: Vec3f, _: Vec3i, _: ?Neighbor, _: *Block, _: Block, blockPlacing: bool) bool {
|
||||
return blockPlacing;
|
||||
}
|
||||
fn createBlockModel(modelId: []const u8) u16 {
|
||||
return main.models.getModelIndex(modelId);
|
||||
fn createBlockModel(zon: ZonElement) u16 {
|
||||
return main.models.getModelIndex(zon.as([]const u8, "cubyz:cube"));
|
||||
}
|
||||
fn updateData(_: *Block, _: Neighbor, _: Block) bool {
|
||||
return false;
|
||||
@ -111,7 +112,7 @@ pub const RotationMode = struct { // MARK: RotationMode
|
||||
|
||||
model: *const fn(block: Block) u16 = &DefaultFunctions.model,
|
||||
|
||||
createBlockModel: *const fn(modelId: []const u8) u16 = &DefaultFunctions.createBlockModel,
|
||||
createBlockModel: *const fn(zon: ZonElement) u16 = &DefaultFunctions.createBlockModel,
|
||||
|
||||
/// Updates the block data of a block in the world or places a block in the world.
|
||||
/// return true if the placing was successful, false otherwise.
|
||||
@ -156,7 +157,8 @@ pub const RotationModes = struct {
|
||||
rotatedModels.deinit();
|
||||
}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const modelId = zon.as([]const u8, "cubyz:cube");
|
||||
if(rotatedModels.get(modelId)) |modelIndex| return modelIndex;
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(modelId);
|
||||
@ -196,7 +198,8 @@ pub const RotationModes = struct {
|
||||
rotatedModels.deinit();
|
||||
}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const modelId = zon.as([]const u8, "cubyz:cube");
|
||||
if(rotatedModels.get(modelId)) |modelIndex| return modelIndex;
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(modelId);
|
||||
@ -276,7 +279,8 @@ pub const RotationModes = struct {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const modelId = zon.as([]const u8, "cubyz:cube");
|
||||
if(fenceModels.get(modelId)) |modelIndex| return modelIndex;
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(modelId);
|
||||
@ -370,7 +374,8 @@ pub const RotationModes = struct {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const modelId = zon.as([]const u8, "cubyz:cube");
|
||||
if(branchModels.get(modelId)) |modelIndex| return modelIndex;
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(modelId);
|
||||
@ -562,7 +567,7 @@ pub const RotationModes = struct {
|
||||
return mem[0..faces];
|
||||
}
|
||||
|
||||
pub fn createBlockModel(_: []const u8) u16 {
|
||||
pub fn createBlockModel(_: ZonElement) u16 {
|
||||
if(modelIndex != 0) {
|
||||
return modelIndex;
|
||||
}
|
||||
@ -802,11 +807,18 @@ pub const RotationModes = struct {
|
||||
rotatedModels.deinit();
|
||||
}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
if(rotatedModels.get(modelId)) |modelIndex| return modelIndex;
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const baseModelId: []const u8 = zon.get([]const u8, "base", "cubyz:cube");
|
||||
const sideModelId: []const u8 = zon.get([]const u8, "side", "cubyz:cube");
|
||||
const key: []const u8 = std.mem.concat(main.stackAllocator.allocator, u8, &.{baseModelId, sideModelId}) catch unreachable;
|
||||
defer main.stackAllocator.free(key);
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(modelId);
|
||||
if(rotatedModels.get(key)) |modelIndex| return modelIndex;
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(baseModelId);
|
||||
const baseModel = main.models.models.items[baseModelIndex];
|
||||
const sideModelIndex = main.models.getModelIndex(sideModelId);
|
||||
const sideModel = main.models.models.items[sideModelIndex];
|
||||
// Rotate the model:
|
||||
var centerModel: u16 = undefined;
|
||||
var negXModel: u16 = undefined;
|
||||
@ -817,10 +829,10 @@ pub const RotationModes = struct {
|
||||
const torchData: TorchData = @bitCast(@as(u5, @intCast(i)));
|
||||
if(i & i - 1 == 0) {
|
||||
if(torchData.center) centerModel = baseModel.transformModel(rotationMatrixTransform, .{Mat4f.identity()});
|
||||
if(torchData.negX) negXModel = baseModel.transformModel(rotationMatrixTransform, .{Mat4f.translation(.{-0.4, 0, 0.2}).mul(Mat4f.rotationY(0.3))});
|
||||
if(torchData.posX) posXModel = baseModel.transformModel(rotationMatrixTransform, .{Mat4f.translation(.{0.4, 0, 0.2}).mul(Mat4f.rotationY(-0.3))});
|
||||
if(torchData.negY) negYModel = baseModel.transformModel(rotationMatrixTransform, .{Mat4f.translation(.{0, -0.4, 0.2}).mul(Mat4f.rotationX(-0.3))});
|
||||
if(torchData.posY) posYModel = baseModel.transformModel(rotationMatrixTransform, .{Mat4f.translation(.{0, 0.4, 0.2}).mul(Mat4f.rotationX(0.3))});
|
||||
if(torchData.negX) negXModel = sideModel.transformModel(rotationMatrixTransform, .{Mat4f.rotationZ(0)});
|
||||
if(torchData.posX) posXModel = sideModel.transformModel(rotationMatrixTransform, .{Mat4f.rotationZ(std.math.pi)});
|
||||
if(torchData.negY) negYModel = sideModel.transformModel(rotationMatrixTransform, .{Mat4f.rotationZ(std.math.pi/2.0)});
|
||||
if(torchData.posY) posYModel = sideModel.transformModel(rotationMatrixTransform, .{Mat4f.rotationZ(-std.math.pi/2.0)});
|
||||
} else {
|
||||
var models: [5]u16 = undefined;
|
||||
var amount: usize = 0;
|
||||
@ -848,7 +860,7 @@ pub const RotationModes = struct {
|
||||
}
|
||||
}
|
||||
const modelIndex = centerModel;
|
||||
rotatedModels.put(modelId, modelIndex) catch unreachable;
|
||||
rotatedModels.put(key, modelIndex) catch unreachable;
|
||||
return modelIndex;
|
||||
}
|
||||
|
||||
@ -968,7 +980,8 @@ pub const RotationModes = struct {
|
||||
rotatedModels.deinit();
|
||||
}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const modelId = zon.as([]const u8, "cubyz:cube");
|
||||
if(rotatedModels.get(modelId)) |modelIndex| return modelIndex;
|
||||
|
||||
const baseModelIndex = main.models.getModelIndex(modelId);
|
||||
@ -1093,7 +1106,8 @@ pub const RotationModes = struct {
|
||||
fn init() void {}
|
||||
fn deinit() void {}
|
||||
|
||||
pub fn createBlockModel(modelId: []const u8) u16 {
|
||||
pub fn createBlockModel(zon: ZonElement) u16 {
|
||||
const modelId = zon.as([]const u8, "cubyz:cube");
|
||||
if(!std.mem.eql(u8, modelId, "cubyz:cube")) {
|
||||
std.log.err("Ores can only be use on cube models.", .{modelId});
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user