world serialization complete, post processing saving
This commit is contained in:
parent
4b349195d6
commit
fff5507bbd
@ -1,13 +1,13 @@
|
|||||||
#scope_file
|
#scope_file
|
||||||
|
|
||||||
char_pos : Vector3 = .{0.0, 1.5, 0.0};
|
char_pos : Vector3 = .{0.0, 0.0, 0.0};
|
||||||
rotation : float = 0.0;
|
rotation : float = 0.0;
|
||||||
|
|
||||||
cam : Camera = .{
|
cam : Camera = .{
|
||||||
far = 2000.0,
|
far = 2000.0,
|
||||||
near = 1.0,
|
near = 1.0,
|
||||||
target = .{0.0, 4.0, 0.0},
|
target = .{0.0, 0.0, 0.0},
|
||||||
position = .{3.0, 5.0, 3.0}
|
position = .{5.0, 5.0, 0.0}
|
||||||
};
|
};
|
||||||
|
|
||||||
#scope_export
|
#scope_export
|
||||||
@ -19,7 +19,12 @@ game_ui :: () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
game_tick :: () {
|
game_tick :: () {
|
||||||
|
if input_button_states[#char "W"] & .START then char_pos += Vector3.{1.0, 0.0, 0.0};
|
||||||
|
if input_button_states[#char "S"] & .START then char_pos += Vector3.{-1.0, 0.0, 0.0};
|
||||||
|
if input_button_states[#char "A"] & .START then char_pos += Vector3.{0.0, 0.0, 1.0};
|
||||||
|
if input_button_states[#char "D"] & .START then char_pos += Vector3.{0.0, 0.0, -1.0};
|
||||||
|
cam.target = char_pos;
|
||||||
|
cam.position = char_pos + .{10,5,0};
|
||||||
}
|
}
|
||||||
|
|
||||||
game_draw :: () {
|
game_draw :: () {
|
||||||
|
|||||||
7
game/resources/postprocess.json
Normal file
7
game/resources/postprocess.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"exposure": -0.252874,
|
||||||
|
"contrast": 1.604926,
|
||||||
|
"saturation": 0,
|
||||||
|
"gamma": 2.162069,
|
||||||
|
"tonemap": 1
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
186
game/resources/worlds.json
Normal file
186
game/resources/worlds.json
Normal file
File diff suppressed because one or more lines are too long
@ -262,11 +262,15 @@ draw_tools_tab :: (theme: *GR.Overall_Theme, total_r: GR.Rect) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
handle_tool_click :: (x: int, y: int, z: int) {
|
handle_tool_click :: (x: int, y: int, z: int, delete: bool = false) {
|
||||||
curworld := get_current_world();
|
curworld := get_current_world();
|
||||||
if editMode == {
|
if editMode == {
|
||||||
case .TRILES;
|
case .TRILES;
|
||||||
|
if delete {
|
||||||
|
remove_trile(cast(float)x, cast(float)y, cast(float)z);
|
||||||
|
} else {
|
||||||
if editor_current_trile != null then add_trile(editor_current_trile.name, cast(float)x, cast(float)y, cast(float)z);
|
if editor_current_trile != null then add_trile(editor_current_trile.name, cast(float)x, cast(float)y, cast(float)z);
|
||||||
|
}
|
||||||
case .GROUND;
|
case .GROUND;
|
||||||
ray := get_mouse_ray(*get_level_editor_camera());
|
ray := get_mouse_ray(*get_level_editor_camera());
|
||||||
hit, point := ray_plane_collision_point(ray, 0, 100);
|
hit, point := ray_plane_collision_point(ray, 0, 100);
|
||||||
@ -312,6 +316,25 @@ add_trile :: (name: string, x: float, y: float, z: float) {
|
|||||||
array_add(*curworld.world.positions, poses);
|
array_add(*curworld.world.positions, poses);
|
||||||
} @Command
|
} @Command
|
||||||
|
|
||||||
|
remove_trile :: (x: float, y: float, z: float) {
|
||||||
|
curworld := get_current_world();
|
||||||
|
|
||||||
|
loose_float_comp :: (a: float, b: float) -> bool {
|
||||||
|
return abs(a-b) < 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
for curworld.world.positions {
|
||||||
|
for v, idx: it.positions {
|
||||||
|
if loose_float_comp(v.x, x)
|
||||||
|
&& loose_float_comp(v.y, y)
|
||||||
|
&& loose_float_comp(v.z, z) {
|
||||||
|
array_unordered_remove_by_index(*it.positions, idx);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} @Command
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
tick_level_editor :: () {
|
tick_level_editor :: () {
|
||||||
@ -329,6 +352,9 @@ tick_level_editor :: () {
|
|||||||
if get_mouse_state(Key_Code.MOUSE_BUTTON_LEFT) & .START {
|
if get_mouse_state(Key_Code.MOUSE_BUTTON_LEFT) & .START {
|
||||||
handle_tool_click(xx floor(point.x), xx editY, xx floor(point.y));
|
handle_tool_click(xx floor(point.x), xx editY, xx floor(point.y));
|
||||||
}
|
}
|
||||||
|
if get_mouse_state(Key_Code.MOUSE_BUTTON_RIGHT) & .START {
|
||||||
|
handle_tool_click(xx floor(point.x), xx editY, xx floor(point.y), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,5 +27,18 @@ draw_post_process_editor_ui :: (theme: *GR.Overall_Theme) {
|
|||||||
r := GR.get_rect(0, ui_h(5,0), ui_w(20, 20), ui_h(95, 0));
|
r := GR.get_rect(0, ui_h(5,0), ui_w(20, 20), ui_h(95, 0));
|
||||||
ui_add_mouse_occluder(r);
|
ui_add_mouse_occluder(r);
|
||||||
draw_bg_rectangle(r, theme);
|
draw_bg_rectangle(r, theme);
|
||||||
|
|
||||||
|
r2 := r;
|
||||||
|
r2.h = ui_h(5,0);
|
||||||
|
r.h -= r2.h;
|
||||||
|
r.y += r2.h;
|
||||||
|
if GR.button(r2, "Save postprocessing", *theme.button_theme) {
|
||||||
|
#if OS != .WASM {
|
||||||
|
file :: #import "File";
|
||||||
|
json := Jaison.json_write_string(current_post_process, " ");
|
||||||
|
file.write_entire_file("./game/resources/postprocess.json", json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
autoedit(r, *current_post_process, theme);
|
autoedit(r, *current_post_process, theme);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,6 +50,15 @@ ntrile :: (name: string) {
|
|||||||
editor_current_trile = get_trile(newt.name);
|
editor_current_trile = get_trile(newt.name);
|
||||||
} @Command
|
} @Command
|
||||||
|
|
||||||
|
cpytrile :: (trile: string, destination: string) {
|
||||||
|
set_trile_gfx(editor_current_trile.name, generate_trile_gfx_matias(editor_current_trile));
|
||||||
|
newt : Trile;
|
||||||
|
newt.name = sprint("%", destination);
|
||||||
|
newt.trixels = get_trile(trile).trixels;
|
||||||
|
set_trile(newt.name, newt);
|
||||||
|
editor_current_trile = get_trile(newt.name);
|
||||||
|
} @Command
|
||||||
|
|
||||||
ltrile :: (name: string) {
|
ltrile :: (name: string) {
|
||||||
set_trile_gfx(editor_current_trile.name, generate_trile_gfx_matias(editor_current_trile));
|
set_trile_gfx(editor_current_trile.name, generate_trile_gfx_matias(editor_current_trile));
|
||||||
nt := get_trile(name);
|
nt := get_trile(name);
|
||||||
|
|||||||
@ -10,6 +10,8 @@ MEM_DEBUG :: false;
|
|||||||
#import "Hash_Table";
|
#import "Hash_Table";
|
||||||
#import "Hash";
|
#import "Hash";
|
||||||
#import "Simple_Package_Reader";
|
#import "Simple_Package_Reader";
|
||||||
|
|
||||||
|
Jaison :: #import "Jaison";
|
||||||
stbi :: #import "stb_image";
|
stbi :: #import "stb_image";
|
||||||
|
|
||||||
#load "trile.jai";
|
#load "trile.jai";
|
||||||
@ -110,6 +112,8 @@ init_after_asset_pack :: () {
|
|||||||
}
|
}
|
||||||
init_editor();
|
init_editor();
|
||||||
game_init();
|
game_init();
|
||||||
|
lworlds();
|
||||||
|
load_post_process_from_pack();
|
||||||
}
|
}
|
||||||
|
|
||||||
is_in_reflection_pass : bool = false;
|
is_in_reflection_pass : bool = false;
|
||||||
|
|||||||
@ -16,6 +16,7 @@ create_world_rendering_tasks :: (world: *World) {
|
|||||||
create_sky_rendering_task(*world.conf);
|
create_sky_rendering_task(*world.conf);
|
||||||
create_ground_rendering_task(world);
|
create_ground_rendering_task(world);
|
||||||
for world.positions {
|
for world.positions {
|
||||||
|
if it.positions.count < 1 then continue;
|
||||||
triletask := Rendering_Task_Trile.{};
|
triletask := Rendering_Task_Trile.{};
|
||||||
triletask.trile = it.trileName;
|
triletask.trile = it.trileName;
|
||||||
triletask.positions = it.positions;
|
triletask.positions = it.positions;
|
||||||
|
|||||||
@ -1,10 +1,21 @@
|
|||||||
Post_Process :: struct {
|
Post_Process :: struct {
|
||||||
exposure : float;
|
exposure : float = 0.0; @Slider,-1,1,0.1;
|
||||||
contrast : float;
|
contrast : float = 1.0; @Slider,0.1,4.0,0.1;
|
||||||
saturation : float;
|
saturation : float;
|
||||||
gamma : float = 1.0; @Slider,0.3,3.0,0.1;
|
gamma : float = 1.0; @Slider,0.3,3.0,0.1;
|
||||||
tonemap : float = 1.0; @Slider,0,1,1;
|
tonemap : float = 1.0; @Slider,0,1,1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
current_post_process : Post_Process;
|
current_post_process : Post_Process;
|
||||||
|
|
||||||
|
load_post_process_from_pack :: () {
|
||||||
|
s := load_string_from_pack("./game/resources/postprocess.json");
|
||||||
|
success, pp:= Jaison.json_parse_string(s, Post_Process,, temp);
|
||||||
|
if success {
|
||||||
|
current_post_process = pp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reset_post_process :: () {
|
||||||
|
load_post_process_from_pack();
|
||||||
|
} @Command
|
||||||
|
|||||||
@ -100,7 +100,7 @@ vs_pp_source_glsl430 := u8.[
|
|||||||
{
|
{
|
||||||
tonemapped = _61;
|
tonemapped = _61;
|
||||||
}
|
}
|
||||||
frag_color = vec4(pow(tonemapped, vec3(1.0 / post_process_config[0].w)), 1.0);
|
frag_color = vec4((((pow(tonemapped, vec3(1.0 / post_process_config[0].w)) - vec3(0.5)) * max(post_process_config[0].y, 0.0)) + vec3(0.5)) + vec3(post_process_config[0].x), 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -153,11 +153,17 @@ fs_pp_source_glsl430 := u8.[
|
|||||||
0x20,0x20,0x20,0x20,0x20,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x20,
|
0x20,0x20,0x20,0x20,0x20,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x20,
|
||||||
0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,
|
0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,
|
||||||
0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,
|
0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,
|
||||||
0x63,0x34,0x28,0x70,0x6f,0x77,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,
|
0x63,0x34,0x28,0x28,0x28,0x28,0x70,0x6f,0x77,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,
|
||||||
0x64,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x70,0x6f,
|
0x70,0x70,0x65,0x64,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,
|
||||||
0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,
|
0x20,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,
|
||||||
0x67,0x5b,0x30,0x5d,0x2e,0x77,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,
|
0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,0x77,0x29,0x29,0x20,0x2d,0x20,0x76,0x65,
|
||||||
0x7d,0x0a,0x0a,0x00,
|
0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x6d,0x61,0x78,0x28,0x70,
|
||||||
|
0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,
|
||||||
|
0x69,0x67,0x5b,0x30,0x5d,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,
|
||||||
|
0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,
|
||||||
|
0x63,0x33,0x28,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,
|
||||||
|
0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,0x78,0x29,0x2c,0x20,0x31,0x2e,
|
||||||
|
0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
|
||||||
];
|
];
|
||||||
/*
|
/*
|
||||||
#version 300 es
|
#version 300 es
|
||||||
@ -218,7 +224,7 @@ vs_pp_source_glsl300es := u8.[
|
|||||||
{
|
{
|
||||||
tonemapped = _61;
|
tonemapped = _61;
|
||||||
}
|
}
|
||||||
frag_color = vec4(pow(tonemapped, vec3(1.0 / post_process_config[0].w)), 1.0);
|
frag_color = vec4((((pow(tonemapped, vec3(1.0 / post_process_config[0].w)) - vec3(0.5)) * max(post_process_config[0].y, 0.0)) + vec3(0.5)) + vec3(post_process_config[0].x), 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -275,11 +281,18 @@ fs_pp_source_glsl300es := u8.[
|
|||||||
0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6f,
|
0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6f,
|
||||||
0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x20,0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,
|
0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x20,0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,
|
||||||
0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
|
0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
|
||||||
0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x77,0x28,
|
0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x28,0x28,0x70,
|
||||||
0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,0x76,0x65,0x63,0x33,
|
0x6f,0x77,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,0x76,
|
||||||
0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,
|
0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x70,0x6f,0x73,0x74,0x5f,0x70,
|
||||||
0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,0x77,0x29,
|
0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,
|
||||||
0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
|
0x2e,0x77,0x29,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,
|
||||||
|
0x29,0x20,0x2a,0x20,0x6d,0x61,0x78,0x28,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,
|
||||||
|
0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,0x79,
|
||||||
|
0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x30,
|
||||||
|
0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x70,0x6f,0x73,0x74,
|
||||||
|
0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,
|
||||||
|
0x30,0x5d,0x2e,0x78,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,
|
||||||
|
0x00,
|
||||||
];
|
];
|
||||||
/*
|
/*
|
||||||
#include <metal_stdlib>
|
#include <metal_stdlib>
|
||||||
@ -387,7 +400,7 @@ vs_pp_source_metal_macos := u8.[
|
|||||||
{
|
{
|
||||||
tonemapped = _61;
|
tonemapped = _61;
|
||||||
}
|
}
|
||||||
out.frag_color = float4(powr(tonemapped, float3(1.0 / _65.gamma)), 1.0);
|
out.frag_color = float4((((powr(tonemapped, float3(1.0 / _65.gamma)) - float3(0.5)) * fast::max(_65.contrast, 0.0)) + float3(0.5)) + float3(_65.exposure), 1.0);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,12 +482,17 @@ fs_pp_source_metal_macos := u8.[
|
|||||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,
|
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,
|
||||||
0x65,0x64,0x20,0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,
|
0x65,0x64,0x20,0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,
|
||||||
0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,
|
0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,
|
||||||
0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x70,0x6f,0x77,0x72,
|
0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x28,0x28,0x70,
|
||||||
0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,0x66,0x6c,0x6f,
|
0x6f,0x77,0x72,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,
|
||||||
0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x5f,0x36,0x35,0x2e,0x67,0x61,
|
0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x5f,0x36,0x35,
|
||||||
0x6d,0x6d,0x61,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,
|
0x2e,0x67,0x61,0x6d,0x6d,0x61,0x29,0x29,0x20,0x2d,0x20,0x66,0x6c,0x6f,0x61,0x74,
|
||||||
0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,
|
0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x66,0x61,0x73,0x74,0x3a,0x3a,
|
||||||
0x00,
|
0x6d,0x61,0x78,0x28,0x5f,0x36,0x35,0x2e,0x63,0x6f,0x6e,0x74,0x72,0x61,0x73,0x74,
|
||||||
|
0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,
|
||||||
|
0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,
|
||||||
|
0x5f,0x36,0x35,0x2e,0x65,0x78,0x70,0x6f,0x73,0x75,0x72,0x65,0x29,0x2c,0x20,0x31,
|
||||||
|
0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,
|
||||||
|
0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
|
||||||
];
|
];
|
||||||
postprocess_shader_desc :: (backend: sg_backend) -> sg_shader_desc {
|
postprocess_shader_desc :: (backend: sg_backend) -> sg_shader_desc {
|
||||||
desc: sg_shader_desc;
|
desc: sg_shader_desc;
|
||||||
|
|||||||
@ -44,6 +44,8 @@ void main() {
|
|||||||
}
|
}
|
||||||
// tonemapped *= pow(2.0, exposure);
|
// tonemapped *= pow(2.0, exposure);
|
||||||
vec3 gammaCorrected = pow(tonemapped, vec3(1.0/gamma));
|
vec3 gammaCorrected = pow(tonemapped, vec3(1.0/gamma));
|
||||||
|
gammaCorrected.rgb = ((gammaCorrected.rgb - 0.5f) * max(contrast, 0)) + 0.5f;
|
||||||
|
gammaCorrected.rgb += exposure;
|
||||||
|
|
||||||
frag_color = vec4(gammaCorrected, 1.0);
|
frag_color = vec4(gammaCorrected, 1.0);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,11 +36,10 @@ get_current_world :: () -> *Current_World {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sworlds :: () {
|
sworlds :: () {
|
||||||
Jaison :: #import "Jaison";
|
worlds : [..]World_Serialized;
|
||||||
worlds : [..]World;
|
|
||||||
worlds.allocator = temp;
|
worlds.allocator = temp;
|
||||||
for v : world_table {
|
for v : world_table {
|
||||||
array_add(*worlds, v);
|
array_add(*worlds, serialize_world(*v,, temp));
|
||||||
}
|
}
|
||||||
#if OS != .WASM {
|
#if OS != .WASM {
|
||||||
file :: #import "File";
|
file :: #import "File";
|
||||||
@ -50,12 +49,13 @@ sworlds :: () {
|
|||||||
} @Command
|
} @Command
|
||||||
|
|
||||||
lworlds :: () {
|
lworlds :: () {
|
||||||
Jaison :: #import "Jaison";
|
|
||||||
s := load_string_from_pack("./game/resources/worlds.json");
|
s := load_string_from_pack("./game/resources/worlds.json");
|
||||||
success, worlds := Jaison.json_parse_string(s, [..]World,, temp);
|
success, worlds := Jaison.json_parse_string(s, [..]World_Serialized,, temp);
|
||||||
for worlds {
|
for worlds {
|
||||||
// set_trile(sprint("%",it.name), trile_from_serialize_form(it));
|
w : World;
|
||||||
// print("Loaded %\n", it.name);
|
deserialize_world(*it, *w);
|
||||||
|
table_set(*world_table, w.name, w);
|
||||||
|
print("Loaded world: %\n", w.name);
|
||||||
}
|
}
|
||||||
} @Command
|
} @Command
|
||||||
|
|
||||||
@ -101,10 +101,10 @@ TrilePositions :: struct {
|
|||||||
positions: [..]Vector4;
|
positions: [..]Vector4;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ground_Tile :: enum {
|
Ground_Tile :: enum u8 {
|
||||||
WATER;
|
WATER :: 0;
|
||||||
GRASS;
|
GRASS :: 1;
|
||||||
SAND;
|
SAND :: 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
World :: struct {
|
World :: struct {
|
||||||
@ -114,6 +114,69 @@ World :: struct {
|
|||||||
ground : [1000][1000]Ground_Tile;
|
ground : [1000][1000]Ground_Tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Trile_Positions_Serialized :: struct {
|
||||||
|
trileName : string;
|
||||||
|
positions : [..]float;
|
||||||
|
}
|
||||||
|
|
||||||
|
World_Serialized :: struct {
|
||||||
|
name : string;
|
||||||
|
conf : World_Config;
|
||||||
|
positions : [..]Trile_Positions_Serialized;
|
||||||
|
ground : string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// You should call this function with the temp allocator as context allocator.
|
||||||
|
serialize_world :: (world: *World) -> World_Serialized {
|
||||||
|
ws : World_Serialized;
|
||||||
|
ws.name = world.name;
|
||||||
|
ws.conf = world.conf;
|
||||||
|
for world.positions {
|
||||||
|
tsp : Trile_Positions_Serialized;
|
||||||
|
tsp.trileName = it.trileName;
|
||||||
|
for v: it.positions {
|
||||||
|
array_add(*tsp.positions, v.x);
|
||||||
|
array_add(*tsp.positions, v.y);
|
||||||
|
array_add(*tsp.positions, v.z);
|
||||||
|
array_add(*tsp.positions, v.w);
|
||||||
|
}
|
||||||
|
array_add(*ws.positions, tsp);
|
||||||
|
}
|
||||||
|
|
||||||
|
groundstring : [..]u8;
|
||||||
|
for i: 0..999 {
|
||||||
|
for j: 0..999 {
|
||||||
|
array_add(*groundstring, (cast(u8) world.ground[i][j]) + #char "a");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ws.ground.data = groundstring.data;
|
||||||
|
ws.ground.count = groundstring.count;
|
||||||
|
return ws;
|
||||||
|
}
|
||||||
|
|
||||||
|
deserialize_world :: (ws: *World_Serialized, world: *World) {
|
||||||
|
world.name = sprint("%", ws.name); // It's important that we re-store everything since the serialization is going to temp and gets freed.
|
||||||
|
world.conf = ws.conf;
|
||||||
|
|
||||||
|
for ws.positions {
|
||||||
|
tp : TrilePositions;
|
||||||
|
tp.trileName = sprint("%", it.trileName);
|
||||||
|
for i : 0..it.positions.count/4-1 {
|
||||||
|
v: Vector4;
|
||||||
|
v.x = it.positions[i*4+0];
|
||||||
|
v.y = it.positions[i*4+1];
|
||||||
|
v.z = it.positions[i*4+2];
|
||||||
|
v.w = it.positions[i*4+3];
|
||||||
|
array_add(*tp.positions, v);
|
||||||
|
}
|
||||||
|
array_add(*world.positions, tp);
|
||||||
|
}
|
||||||
|
|
||||||
|
for c, ci : ws.ground {
|
||||||
|
world.ground[ci/1000][ci%1000] = cast(Ground_Tile)((cast(u8)c)-#char "a");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
update_image_from_ground :: (world: *World, img: *sg_image) {
|
update_image_from_ground :: (world: *World, img: *sg_image) {
|
||||||
materialdata : [1000*1000*4]u8;
|
materialdata : [1000*1000*4]u8;
|
||||||
counter : int = 0;
|
counter : int = 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user