saving
This commit is contained in:
parent
98a2f6577f
commit
9837556c1c
|
|
@ -240,6 +240,11 @@ float4 main(
|
||||||
+ col * BlinnPhong(Normal, WorldPos, lightPos, lightColor)
|
+ col * BlinnPhong(Normal, WorldPos, lightPos, lightColor)
|
||||||
+ col * DirectionalLight(Normal, WorldPos, DirectionalShadowFragPos);
|
+ col * DirectionalLight(Normal, WorldPos, DirectionalShadowFragPos);
|
||||||
|
|
||||||
|
if((texMode & 0x2) > 0) // full bright no lighting bit
|
||||||
|
{
|
||||||
|
c2 = col;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
float4 rv = float4(pow(c2, 1.0 / 2.2), alpha);
|
float4 rv = float4(pow(c2, 1.0 / 2.2), alpha);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,14 +9,11 @@ texture: ?*Texture = null,
|
||||||
|
|
||||||
entity: core.Entity = undefined,
|
entity: core.Entity = undefined,
|
||||||
|
|
||||||
textureMode: u32 = 0, // bit
|
textureMode: ComponentTextureMode = .{}, // bit
|
||||||
// DEBUG for-fun function, completely override what happens when the renderer tries to render this mesh.
|
// DEBUG for-fun function, completely override what happens when the renderer tries to render this mesh.
|
||||||
cmrf: ?rend.renderer.CustomMeshRenderFunc = null,
|
cmrf: ?rend.renderer.CustomMeshRenderFunc = null,
|
||||||
cmrf_ctx: ?*anyopaque = null,
|
cmrf_ctx: ?*anyopaque = null,
|
||||||
|
|
||||||
pub const textureMode_default = 0;
|
|
||||||
pub const textureMode_videoYUV = 0x10;
|
|
||||||
|
|
||||||
pub var BaseContainer: *MeshSet = undefined;
|
pub var BaseContainer: *MeshSet = undefined;
|
||||||
pub const ComponentName = "Mesh";
|
pub const ComponentName = "Mesh";
|
||||||
|
|
||||||
|
|
@ -25,6 +22,22 @@ pub const ScriptExports: []const []const u8 = &.{
|
||||||
// "setTexture",
|
// "setTexture",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const ComponentTextureMode = packed struct(u32) {
|
||||||
|
// 0 - 3
|
||||||
|
noSrgb: bool = false,
|
||||||
|
fullbright: bool = false,
|
||||||
|
pad1: bool = false,
|
||||||
|
pad2: bool = false,
|
||||||
|
|
||||||
|
// 4 - 8
|
||||||
|
samplerMode: enum(u4) {
|
||||||
|
simple = 0,
|
||||||
|
videoYUV = 1,
|
||||||
|
} = .simple,
|
||||||
|
|
||||||
|
rsvd: u24 = 0,
|
||||||
|
};
|
||||||
|
|
||||||
pub fn initECS(self: *@This(), handle: core.SetHandle) void {
|
pub fn initECS(self: *@This(), handle: core.SetHandle) void {
|
||||||
// get the mesh component
|
// get the mesh component
|
||||||
self.entity = core.Entity{ .handle = handle };
|
self.entity = core.Entity{ .handle = handle };
|
||||||
|
|
|
||||||
|
|
@ -392,7 +392,7 @@ pub const Renderer = struct {
|
||||||
transform = repr.transform;
|
transform = repr.transform;
|
||||||
}
|
}
|
||||||
uploadMapped[i].Model = @bitCast(transform);
|
uploadMapped[i].Model = @bitCast(transform);
|
||||||
uploadMapped[i].textureMode = object.textureMode;
|
uploadMapped[i].textureMode = @bitCast(object.textureMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,10 @@ texture: *gpu.GPUTexture = undefined,
|
||||||
width: u32,
|
width: u32,
|
||||||
height: u32,
|
height: u32,
|
||||||
|
|
||||||
|
inputEnabled: bool = false,
|
||||||
|
|
||||||
|
sensitivity: f32 = 1.0,
|
||||||
|
|
||||||
fn log(comptime fmt: []const u8, args: anytype) void {
|
fn log(comptime fmt: []const u8, args: anytype) void {
|
||||||
core.engine_log("[Doomplayer] " ++ fmt, args);
|
core.engine_log("[Doomplayer] " ++ fmt, args);
|
||||||
}
|
}
|
||||||
|
|
@ -24,6 +28,7 @@ pub fn create(allocator: std.mem.Allocator) !*@This() {
|
||||||
|
|
||||||
try self.setup();
|
try self.setup();
|
||||||
|
|
||||||
|
self.sensitivity = core.configVar(f32, "doomplayer.sensitivity", 1.0);
|
||||||
gDoom = self;
|
gDoom = self;
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|
@ -43,6 +48,22 @@ pub fn setup(self: *@This()) !void {
|
||||||
c.doom_init(1, @constCast(@ptrCast(@alignCast(&.{"doom"}))), 8);
|
c.doom_init(1, @constCast(@ptrCast(@alignCast(&.{"doom"}))), 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn sdlToDoomButton(button: c_uint) c_uint {
|
||||||
|
switch (button) {
|
||||||
|
sdl3_c.SDL_BUTTON_LEFT => {
|
||||||
|
return c.DOOM_LEFT_BUTTON;
|
||||||
|
},
|
||||||
|
sdl3_c.SDL_BUTTON_RIGHT => {
|
||||||
|
return c.DOOM_RIGHT_BUTTON;
|
||||||
|
},
|
||||||
|
sdl3_c.SDL_BUTTON_MIDDLE => {
|
||||||
|
return c.DOOM_MIDDLE_BUTTON;
|
||||||
|
},
|
||||||
|
else => {},
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
fn sdlToDoomScancode(sdlScancode: c_uint) c_int {
|
fn sdlToDoomScancode(sdlScancode: c_uint) c_int {
|
||||||
switch (sdlScancode) {
|
switch (sdlScancode) {
|
||||||
sdl3_c.SDL_SCANCODE_TAB => {
|
sdl3_c.SDL_SCANCODE_TAB => {
|
||||||
|
|
@ -271,16 +292,22 @@ fn sdlToDoomScancode(sdlScancode: c_uint) c_int {
|
||||||
var gDoom: *@This() = undefined;
|
var gDoom: *@This() = undefined;
|
||||||
|
|
||||||
pub fn processFunc(e: *sdl3.Event) void {
|
pub fn processFunc(e: *sdl3.Event) void {
|
||||||
|
if (!gDoom.inputEnabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (e.type) {
|
switch (e.type) {
|
||||||
else => {},
|
else => {},
|
||||||
sdl3_c.SDL_EVENT_MOUSE_MOTION => {
|
sdl3_c.SDL_EVENT_MOUSE_MOTION => {
|
||||||
c.doom_mouse_move(@intFromFloat(e.motion.xrel * 4), @intFromFloat(e.motion.yrel * 4));
|
c.doom_mouse_move(@intFromFloat(e.motion.xrel * 4 * gDoom.sensitivity), @intFromFloat(e.motion.yrel * 4 * gDoom.sensitivity));
|
||||||
},
|
},
|
||||||
sdl3_c.SDL_EVENT_MOUSE_BUTTON_DOWN => {
|
sdl3_c.SDL_EVENT_MOUSE_BUTTON_DOWN => {
|
||||||
c.doom_key_down(sdlToDoomScancode(e.button.button));
|
log("pushing mouse button down to doom {d}", .{e.button.button});
|
||||||
|
c.doom_button_down(sdlToDoomButton(e.button.button));
|
||||||
},
|
},
|
||||||
sdl3_c.SDL_EVENT_MOUSE_BUTTON_UP => {
|
sdl3_c.SDL_EVENT_MOUSE_BUTTON_UP => {
|
||||||
c.doom_key_down(sdlToDoomScancode(e.button.button));
|
log("pushing mouse button up to doom {d}", .{e.button.button});
|
||||||
|
c.doom_button_up(sdlToDoomButton(e.button.button));
|
||||||
},
|
},
|
||||||
sdl3_c.SDL_EVENT_KEY_DOWN => {
|
sdl3_c.SDL_EVENT_KEY_DOWN => {
|
||||||
if (!e.key.repeat) {
|
if (!e.key.repeat) {
|
||||||
|
|
@ -373,6 +400,13 @@ pub fn tick(self: *@This(), dt: f64) void {
|
||||||
const cmd = rend.context().device.acquireGPUCommandBuffer();
|
const cmd = rend.context().device.acquireGPUCommandBuffer();
|
||||||
self.releaseAndUploadFrameBuffer(cmd);
|
self.releaseAndUploadFrameBuffer(cmd);
|
||||||
_ = cmd.submitGPUCommandBuffer();
|
_ = cmd.submitGPUCommandBuffer();
|
||||||
|
|
||||||
|
if (self.inputEnabled) {
|
||||||
|
if (ig.begin("doom settings", null, .{})) {
|
||||||
|
_ = ig.sliderFloat("sensitivity", &self.sensitivity, 0.1, 20, null, .{});
|
||||||
|
ig.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn bindVideoTextures(p: ?*anyopaque) void {
|
fn bindVideoTextures(p: ?*anyopaque) void {
|
||||||
|
|
@ -397,7 +431,8 @@ pub fn createEntity(self: *@This()) !core.Entity {
|
||||||
if (entity.addComponent(rend.MeshComponent)) |mesh| {
|
if (entity.addComponent(rend.MeshComponent)) |mesh| {
|
||||||
mesh.cmrf = bindVideoTextures;
|
mesh.cmrf = bindVideoTextures;
|
||||||
mesh.cmrf_ctx = self;
|
mesh.cmrf_ctx = self;
|
||||||
mesh.textureMode = 0x1;
|
mesh.textureMode.fullbright = true;
|
||||||
|
mesh.textureMode.noSrgb = true;
|
||||||
mesh.setMesh("m_plane");
|
mesh.setMesh("m_plane");
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
|
|
|
||||||
|
|
@ -267,7 +267,7 @@ pub fn createVideoPlayerEntity(self: *@This()) !core.Entity {
|
||||||
if (entity.addComponent(rend.MeshComponent)) |mesh| {
|
if (entity.addComponent(rend.MeshComponent)) |mesh| {
|
||||||
mesh.cmrf = bindVideoTextures;
|
mesh.cmrf = bindVideoTextures;
|
||||||
mesh.cmrf_ctx = self;
|
mesh.cmrf_ctx = self;
|
||||||
mesh.textureMode = 0x10;
|
mesh.textureMode.samplerMode = .videoYUV;
|
||||||
mesh.setMesh("m_plane");
|
mesh.setMesh("m_plane");
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -47,101 +47,101 @@ struct main0_in
|
||||||
fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], texture2d<float> Texture0 [[texture(0)]], texture2d<float> Texture1 [[texture(1)]], texture2d<float> Texture2 [[texture(2)]], texture2d<float> DirectionalShadowDepthMap [[texture(3)]], sampler Sampler0 [[sampler(0)]], sampler Sampler1 [[sampler(1)]], sampler Sampler2 [[sampler(2)]], sampler DirectionalShadowSampler [[sampler(3)]])
|
fragment main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], texture2d<float> Texture0 [[texture(0)]], texture2d<float> Texture1 [[texture(1)]], texture2d<float> Texture2 [[texture(2)]], texture2d<float> DirectionalShadowDepthMap [[texture(3)]], sampler Sampler0 [[sampler(0)]], sampler Sampler1 [[sampler(1)]], sampler Sampler2 [[sampler(2)]], sampler DirectionalShadowSampler [[sampler(3)]])
|
||||||
{
|
{
|
||||||
main0_out out = {};
|
main0_out out = {};
|
||||||
int _97 = int(scene._m0[in.in_var_TEXCOORD4].textureMode);
|
int _98 = int(scene._m0[in.in_var_TEXCOORD4].textureMode);
|
||||||
int _98 = _97 & 240;
|
int _99 = _98 & 240;
|
||||||
float4 _132;
|
float4 _133;
|
||||||
if (_98 == 16)
|
if (_99 == 16)
|
||||||
{
|
{
|
||||||
float3 _119 = float3(Texture0.sample(Sampler0, in.in_var_TEXCOORD0).x, Texture1.sample(Sampler1, in.in_var_TEXCOORD0).x, Texture2.sample(Sampler2, in.in_var_TEXCOORD0).x) + float3(-0.0625, -0.5, -0.5);
|
float3 _120 = float3(Texture0.sample(Sampler0, in.in_var_TEXCOORD0).x, Texture1.sample(Sampler1, in.in_var_TEXCOORD0).x, Texture2.sample(Sampler2, in.in_var_TEXCOORD0).x) + float3(-0.0625, -0.5, -0.5);
|
||||||
_132 = float4(dot(_119, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_119, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_119, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0);
|
_133 = float4(dot(_120, float3(1.164000034332275390625, 0.0, 1.7929999828338623046875)), dot(_120, float3(1.164000034332275390625, -0.212999999523162841796875, -0.53299999237060546875)), dot(_120, float3(1.164000034332275390625, 2.111999988555908203125, 0.0)), 1.0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float4 _131;
|
float4 _132;
|
||||||
if (_98 == 0)
|
if (_99 == 0)
|
||||||
{
|
{
|
||||||
_131 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0);
|
_132 = Texture0.sample(Sampler0, in.in_var_TEXCOORD0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_131 = _86;
|
_132 = _86;
|
||||||
}
|
}
|
||||||
_132 = _131;
|
_133 = _132;
|
||||||
}
|
}
|
||||||
float4 _138;
|
float4 _139;
|
||||||
if ((_97 & 1) == 1)
|
if ((_98 & 1) == 1)
|
||||||
{
|
{
|
||||||
_138 = powr(_132, float4(2.2000000476837158203125));
|
_139 = powr(_133, float4(2.2000000476837158203125));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_138 = _132;
|
_139 = _133;
|
||||||
}
|
}
|
||||||
if (_138.w < 0.00999999977648258209228515625)
|
if (_139.w < 0.00999999977648258209228515625)
|
||||||
{
|
{
|
||||||
discard_fragment();
|
discard_fragment();
|
||||||
}
|
}
|
||||||
float3 _192;
|
float3 _193;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
float3 _149 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1;
|
float3 _150 = Uniforms.lightPosition.xyz - in.in_var_TEXCOORD1;
|
||||||
float _150 = length(_149);
|
float _151 = length(_150);
|
||||||
float _151 = _150 * _150;
|
float _152 = _151 * _151;
|
||||||
float _157;
|
float _158;
|
||||||
if (_150 > 2.0)
|
if (_151 > 2.0)
|
||||||
{
|
{
|
||||||
_157 = 0.5 / _151;
|
_158 = 0.5 / _152;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_157 = 1.0 / _151;
|
_158 = 1.0 / _152;
|
||||||
}
|
}
|
||||||
float _162;
|
float _163;
|
||||||
if (_150 > 4.0)
|
if (_151 > 4.0)
|
||||||
{
|
{
|
||||||
_162 = _157 * 0.5;
|
_163 = _158 * 0.5;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_162 = _157;
|
_163 = _158;
|
||||||
}
|
}
|
||||||
float _164 = (_150 > 15.0) ? 0.0 : _162;
|
float _165 = (_151 > 15.0) ? 0.0 : _163;
|
||||||
float _166 = (_164 > 1.0) ? 1.0 : _164;
|
float _167 = (_165 > 1.0) ? 1.0 : _165;
|
||||||
if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625)
|
if (length(in.in_var_TEXCOORD2) < 0.100000001490116119384765625)
|
||||||
{
|
{
|
||||||
_192 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _166;
|
_193 = (in.in_var_TEXCOORD1 * float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5)) * _167;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
float3 _173 = fast::normalize(_149);
|
float3 _174 = fast::normalize(_150);
|
||||||
_192 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_173, in.in_var_TEXCOORD2), 0.0)) * _166) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_173 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _166);
|
_193 = ((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * precise::max(dot(_174, in.in_var_TEXCOORD2), 0.0)) * _167) + (((float3(0.800000011920928955078125, 0.800000011920928955078125, 0.5) * powr(precise::max(dot(in.in_var_TEXCOORD2, fast::normalize(_174 + fast::normalize(in.in_var_TEXCOORD1 - Uniforms.viewPos.xyz))), 0.0), 30.0)) * 2.0) * _167);
|
||||||
break;
|
break;
|
||||||
} while(false);
|
} while(false);
|
||||||
float3 _209 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5);
|
float3 _210 = ((in.in_var_TEXCOORD3.xyz / float3(in.in_var_TEXCOORD3.w)) * 0.5) + float3(0.5);
|
||||||
float3 _211;
|
float3 _212;
|
||||||
_211.x = _209.x;
|
_212.x = _210.x;
|
||||||
float2 _212 = _211.xy;
|
float2 _213 = _212.xy;
|
||||||
_212.y = -_209.y;
|
_213.y = -_210.y;
|
||||||
float _219;
|
|
||||||
int _222;
|
|
||||||
int _224;
|
|
||||||
_219 = 0.0;
|
|
||||||
_222 = 0;
|
|
||||||
_224 = -4;
|
|
||||||
float _220;
|
float _220;
|
||||||
int _223;
|
int _223;
|
||||||
for (; _224 <= 4; _219 = _220, _222 = _223, _224++)
|
int _225;
|
||||||
|
_220 = 0.0;
|
||||||
|
_223 = 0;
|
||||||
|
_225 = -4;
|
||||||
|
float _221;
|
||||||
|
int _224;
|
||||||
|
for (; _225 <= 4; _220 = _221, _223 = _224, _225++)
|
||||||
{
|
{
|
||||||
_223 = _222;
|
_224 = _223;
|
||||||
_220 = _219;
|
_221 = _220;
|
||||||
for (int _233 = -4; _233 <= 4; )
|
for (int _234 = -4; _234 <= 4; )
|
||||||
{
|
{
|
||||||
_223++;
|
_224++;
|
||||||
_220 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_212 + float2(float(_233) * 0.000244140625, float(_224) * 0.000244140625))).x);
|
_221 += float((in.in_var_TEXCOORD3.z - 0.004999999888241291046142578125) > DirectionalShadowDepthMap.sample(DirectionalShadowSampler, (_213 + float2(float(_234) * 0.000244140625, float(_225) * 0.000244140625))).x);
|
||||||
_233++;
|
_234++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.out_var_SV_Target0 = float4(powr(_138.xyz * ((float3(0.100000001490116119384765625) + _192) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_219 / float(_222))))), float3(0.4545454680919647216796875)), _138.w);
|
out.out_var_SV_Target0 = float4(powr(select(_139.xyz * ((float3(0.100000001490116119384765625) + _193) + ((Uniforms.directionalLightColor.xyz * precise::max(dot(Uniforms.directionalLight.xyz, in.in_var_TEXCOORD2), 0.0)) * (1.0 - (_220 / float(_223))))), _139.xyz, bool3((_98 & 2) > 0)), float3(0.4545454680919647216796875)), _139.w);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -2,3 +2,6 @@
|
||||||
name="Sample Game"
|
name="Sample Game"
|
||||||
width=1920
|
width=1920
|
||||||
height=1080
|
height=1080
|
||||||
|
|
||||||
|
[doom]
|
||||||
|
sensitivity=6.0
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,12 @@ doomplayer: *DoomPlayer = undefined,
|
||||||
videoplayerObject: core.Entity = undefined,
|
videoplayerObject: core.Entity = undefined,
|
||||||
doomplayerObject: core.Entity = undefined,
|
doomplayerObject: core.Entity = undefined,
|
||||||
|
|
||||||
|
inputEnabled: bool = true,
|
||||||
|
|
||||||
|
videoFullbright: bool = false,
|
||||||
|
|
||||||
|
moveLight: bool = true,
|
||||||
|
|
||||||
pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This());
|
pub var NeonObjectTable: core.EngineObjectVTable = core.EngineObjectVTable.from(@This());
|
||||||
|
|
||||||
pub fn init(allocator: std.mem.Allocator) !*@This() {
|
pub fn init(allocator: std.mem.Allocator) !*@This() {
|
||||||
|
|
@ -56,21 +62,21 @@ const assetReferences = [_]assets.AssetImportReference{
|
||||||
"t_empire",
|
"t_empire",
|
||||||
.{ .path = "textures/lost_empire-RGBA.png" },
|
.{ .path = "textures/lost_empire-RGBA.png" },
|
||||||
),
|
),
|
||||||
// assets.MakeImportRefOptions(
|
assets.MakeImportRefOptions(
|
||||||
// "Texture",
|
"Texture",
|
||||||
// "t_skybox",
|
"t_skybox",
|
||||||
// .{
|
.{
|
||||||
// .textureCube = true,
|
.textureCube = true,
|
||||||
// .textureList = &.{
|
.textureList = &.{
|
||||||
// "sky_air/cube_right.png", // cubemapfacePositivex, right
|
"sky_air/cube_right.png", // cubemapfacePositivex, right
|
||||||
// "sky_air/cube_left.png", // cubemapfacePositivex, right
|
"sky_air/cube_left.png", // cubemapfacePositivex, right
|
||||||
// "sky_air/cube_up.png", // cubemapfacePositivex, right
|
"sky_air/cube_up.png", // cubemapfacePositivex, right
|
||||||
// "sky_air/cube_down.png", // cubemapfacePositivex, right
|
"sky_air/cube_down.png", // cubemapfacePositivex, right
|
||||||
// "sky_air/cube_back.png", // cubemapfacePositivex, right
|
"sky_air/cube_back.png", // cubemapfacePositivex, right
|
||||||
// "sky_air/cube_front.png", // cubemapfacePositivex, right
|
"sky_air/cube_front.png", // cubemapfacePositivex, right
|
||||||
// },
|
},
|
||||||
// },
|
},
|
||||||
// ),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn prepare(self: *@This()) !void {
|
pub fn prepare(self: *@This()) !void {
|
||||||
|
|
@ -89,7 +95,7 @@ pub fn prepare(self: *@This()) !void {
|
||||||
self.doomplayer = try DoomPlayer.create(self.allocator);
|
self.doomplayer = try DoomPlayer.create(self.allocator);
|
||||||
self.doomplayerObject = try self.doomplayer.createEntity();
|
self.doomplayerObject = try self.doomplayer.createEntity();
|
||||||
|
|
||||||
// rend.setSkyboxTexture("t_skybox");
|
rend.setSkyboxTexture("t_skybox");
|
||||||
|
|
||||||
const exitInput = try core.ActionBinding.create(core.MakeName("exit"));
|
const exitInput = try core.ActionBinding.create(core.MakeName("exit"));
|
||||||
exitInput.addKey(.escape, .keyDown);
|
exitInput.addKey(.escape, .keyDown);
|
||||||
|
|
@ -181,6 +187,13 @@ pub fn prepare(self: *@This()) !void {
|
||||||
shaderReload.activate();
|
shaderReload.activate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const input = try core.ActionBinding.create(core.MakeName("toggleDoom"));
|
||||||
|
input.addKey(.f2, .keyDown);
|
||||||
|
_ = input.data.addListener(self, toggleDoom);
|
||||||
|
input.activate();
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const input = try core.ActionBinding.create(core.MakeName("toggleMouseLook"));
|
const input = try core.ActionBinding.create(core.MakeName("toggleMouseLook"));
|
||||||
input.addKey(.t, .keyDown);
|
input.addKey(.t, .keyDown);
|
||||||
|
|
@ -193,7 +206,17 @@ pub fn prepare(self: *@This()) !void {
|
||||||
fn onMouseLook(ctx: ?*anyopaque, axis: core.Vector2f) void {
|
fn onMouseLook(ctx: ?*anyopaque, axis: core.Vector2f) void {
|
||||||
const self: *@This() = @ptrCast(@alignCast(ctx));
|
const self: *@This() = @ptrCast(@alignCast(ctx));
|
||||||
|
|
||||||
self.fpcamera.addMouseMovement(axis);
|
if (self.inputEnabled) {
|
||||||
|
self.fpcamera.addMouseMovement(axis);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn toggleDoom(ctx: ?*anyopaque, action: core.ActionEvent) void {
|
||||||
|
const self: *@This() = @ptrCast(@alignCast(ctx));
|
||||||
|
_ = action;
|
||||||
|
|
||||||
|
self.doomplayer.inputEnabled = !self.doomplayer.inputEnabled;
|
||||||
|
self.inputEnabled = !self.doomplayer.inputEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn toggleMouseLook(ctx: ?*anyopaque, action: core.ActionEvent) void {
|
fn toggleMouseLook(ctx: ?*anyopaque, action: core.ActionEvent) void {
|
||||||
|
|
@ -276,24 +299,37 @@ pub fn tick(self: *@This(), dt: f64) void {
|
||||||
var movement = self.fpcamera.getForwardXZ().fmul(self.moveVector.z * fdt * self.cameraSpeed);
|
var movement = self.fpcamera.getForwardXZ().fmul(self.moveVector.z * fdt * self.cameraSpeed);
|
||||||
movement = movement.add(self.fpcamera.getRightXZ().fmul(self.moveVector.x * fdt * self.cameraSpeed));
|
movement = movement.add(self.fpcamera.getRightXZ().fmul(self.moveVector.x * fdt * self.cameraSpeed));
|
||||||
movement = movement.add(.{ .y = self.verticalMove * fdt * self.cameraSpeed });
|
movement = movement.add(.{ .y = self.verticalMove * fdt * self.cameraSpeed });
|
||||||
const pos = self.fpcamera.getPosition().add(movement);
|
|
||||||
self.fpcamera.setPosition(pos);
|
|
||||||
self.centerDist += self.centerDistMove * fdt;
|
self.centerDist += self.centerDistMove * fdt;
|
||||||
|
|
||||||
|
const pos = self.fpcamera.getPosition().add(movement);
|
||||||
|
|
||||||
|
if (self.inputEnabled) {
|
||||||
|
self.fpcamera.setPosition(pos);
|
||||||
|
}
|
||||||
|
|
||||||
self.fpcamera.resolve();
|
self.fpcamera.resolve();
|
||||||
|
|
||||||
const forward = self.fpcamera.getForward();
|
const forward = self.fpcamera.getForward();
|
||||||
const debugCenter = self.fpcamera.getPosition().add(forward.fmul(self.centerDist));
|
const debugCenter = self.fpcamera.getPosition().add(forward.fmul(self.centerDist));
|
||||||
|
|
||||||
core.debugSphere(debugCenter, 0.3, .{});
|
if (self.moveLight) {
|
||||||
core.debugSphere(debugCenter, 0.1, .{ .color = .{ .x = 1.0 } });
|
core.debugSphere(debugCenter, 0.3, .{});
|
||||||
|
core.debugSphere(debugCenter, 0.1, .{ .color = .{ .x = 1.0 } });
|
||||||
rend.context().lightPosition = debugCenter;
|
rend.context().lightPosition = debugCenter;
|
||||||
|
}
|
||||||
|
|
||||||
// show a window with the current camera's position
|
// show a window with the current camera's position
|
||||||
|
|
||||||
if (ig.begin("meh", &self.showWindow, .{})) {
|
if (ig.begin("meh", &self.showWindow, .{})) {
|
||||||
ig.textFmt("x:{d:.03} y:{d:.03} z:{d:.03}", .{ pos.x, pos.y, pos.z }) catch return;
|
ig.textFmt("x:{d:.03} y:{d:.03} z:{d:.03}", .{ pos.x, pos.y, pos.z }) catch return;
|
||||||
|
if (ig.checkbox("video fullbright", &self.videoFullbright)) {
|
||||||
|
if (self.videoplayerObject.fetch(rend.MeshComponent)) |mesh| {
|
||||||
|
mesh.textureMode.fullbright = self.videoFullbright;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ig.checkbox("move lights ", &self.moveLight)) {}
|
||||||
|
|
||||||
ig.end();
|
ig.end();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue