From: Brendan Hansen Date: Wed, 6 Apr 2022 01:52:03 +0000 (-0500) Subject: more "permanent" player placeholder X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=a7ae54da3af8ec888837d71237e2389551f67ce7;p=voxel-shooter.git more "permanent" player placeholder --- diff --git a/run_tree/assets/shaders/basic.glsl b/run_tree/assets/shaders/basic.glsl index 5b537eb..1cbb755 100644 --- a/run_tree/assets/shaders/basic.glsl +++ b/run_tree/assets/shaders/basic.glsl @@ -22,10 +22,11 @@ void main() { #ifdef FRAGMENT_SHADER +uniform vec4 color; out vec4 fragColor; void main() { - fragColor = vec4(v_col.xyz, 1); + fragColor = vec4(v_col.xyz, 1) * color; } #endif diff --git a/src/client/game.onyx b/src/client/game.onyx index c15be82..1907f92 100644 --- a/src/client/game.onyx +++ b/src/client/game.onyx @@ -17,11 +17,6 @@ player: Player; world: ^World; selected_block: Vector3i; -Player_Vertex :: struct { - pos: Vector3; - col: Color; -} -player_mesh: ^Mesh(Player_Vertex); player_shader: Shader; Game_State :: struct { @@ -47,28 +42,7 @@ game_init :: (_: rawptr) { player = player_make(); player.camera = ^camera; - player_mesh = mesh_make(Player_Vertex.[ - .{ .{-1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{ 1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{ 1, 1, -1}, .{1, 0, 0, 1}, }, - .{ .{-1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{ 1, 1, -1}, .{1, 0, 0, 1}, }, - .{ .{-1, 1, -1}, .{1, 0, 0, 1}, }, - - .{ .{-1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{-1, 1, -1}, .{1, 0, 0, 1}, }, - .{ .{-1, 1, 1}, .{1, 0, 0, 1}, }, - .{ .{-1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{-1, 1, 1}, .{1, 0, 0, 1}, }, - .{ .{-1, -1, 1}, .{1, 0, 0, 1}, }, - - .{ .{-1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{-1, -1, 1}, .{1, 0, 0, 1}, }, - .{ .{ 1, -1, 1}, .{1, 0, 0, 1}, }, - .{ .{-1, -1, -1}, .{1, 0, 0, 1}, }, - .{ .{ 1, -1, 1}, .{1, 0, 0, 1}, }, - .{ .{ 1, -1, -1}, .{1, 0, 0, 1}, }, - ], .[]); + Meshes.init(); } game_update :: (_: rawptr, dt: f32) { @@ -144,9 +118,10 @@ draw_scene :: () { chunk_highlight_block(~~selected_block.x, ~~selected_block.y, ~~selected_block.z); shader_use(player_shader); + shader_set_uniform(player_shader, #cstr "color", Color.{1,0,0}); for^ other_players.entries { - update_model_matrix(it.value.position); - mesh_draw(player_mesh); + update_model_matrix(it.value.position - .{0,0.8,0}, .{0.5, 1, 0.5}); + mesh_draw(Meshes.white_box); } } diff --git a/src/client/gfx/mesh.onyx b/src/client/gfx/mesh.onyx index db769a9..f97f32e 100644 --- a/src/client/gfx/mesh.onyx +++ b/src/client/gfx/mesh.onyx @@ -84,4 +84,34 @@ mesh_free :: (mesh: ^Mesh) { } +// +// Common meshes +// +Basic_Vertex :: struct { + position: Vector3; + color: Color; +} +Meshes :: struct { + #persist white_box: ^Mesh(Basic_Vertex); + + init :: () { + white_box = mesh_make(Basic_Vertex.[ + .{ .{-1, -1, -1}, .{1, 1, 1, 1}, }, + .{ .{-1, 1, -1}, .{1, 1, 1, 1}, }, + .{ .{ 1, 1, -1}, .{1, 1, 1, 1}, }, + .{ .{ 1, -1, -1}, .{1, 1, 1, 1}, }, + .{ .{-1, -1, 1}, .{1, 1, 1, 1}, }, + .{ .{-1, 1, 1}, .{1, 1, 1, 1}, }, + .{ .{ 1, 1, 1}, .{1, 1, 1, 1}, }, + .{ .{ 1, -1, 1}, .{1, 1, 1, 1}, }, + ], .[ + 0, 2, 1, 0, 3, 2, + 3, 6, 2, 3, 7, 6, + 5, 0, 1, 5, 4, 0, + 4, 5, 6, 4, 6, 7, + 5, 1, 2, 5, 2, 6, + 0, 4, 7, 0, 7, 3, + ]); + } +} diff --git a/src/client/gfx/shader.onyx b/src/client/gfx/shader.onyx index 2ba5f76..cdc2615 100644 --- a/src/client/gfx/shader.onyx +++ b/src/client/gfx/shader.onyx @@ -101,11 +101,11 @@ update_window_matrix :: () { glBindBuffer(GL_UNIFORM_BUFFER, -1); } -update_model_matrix :: (v: Vector3) { +update_model_matrix :: (v: Vector3, scale := Vector3.{1,1,1}) { model_mat: [16] f32; - model_mat[0] = 1; - model_mat[5] = 1; - model_mat[10] = 1; + model_mat[0] = scale.x; + model_mat[5] = scale.y; + model_mat[10] = scale.z; model_mat[12] = v.x; model_mat[13] = v.y; model_mat[14] = v.z; diff --git a/src/client/net.onyx b/src/client/net.onyx index 13fafa0..1afa509 100644 --- a/src/client/net.onyx +++ b/src/client/net.onyx @@ -43,20 +43,21 @@ net_handle_packet :: (packet_data: [] u8) { case .Player_Joined { joined_packet := cast(^packets.Player_Joined) packet; - if joined_packet.player_id == player_id do return; - buf: [1024] u8; - chat_messages << ( - conv.format(buf, "{} joined the server!", str.{ - ~~ ^joined_packet.name_data, - ~~ joined_packet.name_length - }) - |> string.alloc_copy() - ); + name := string.alloc_copy(.{ + ~~ ^joined_packet.name_data, + ~~ joined_packet.name_length + }); other_players[~~ joined_packet.player_id] = .{ + name, .{0, 0, 0}, .{0, 0, 0}, .{0, 0, 0} }; + + if joined_packet.player_id != player_id { + buf: [1024] u8; + chat_messages << (conv.format(buf, "{} joined the server!", name) |> string.alloc_copy()); + } } case .Connection_Rejected { @@ -69,20 +70,34 @@ net_handle_packet :: (packet_data: [] u8) { case .Chat_Message { chat_packet := cast(^packets.Chat_Message) packet; - chat_messages << string.alloc_copy(.{ - ~~ ^chat_packet.message_data, - ~~ chat_packet.message_length, - }); + + buf: [1024] u8; + msg: str; + + sender := ^other_players[~~ chat_packet.sender_id]; + if sender != null { + msg = conv.format(buf, "[{}] {}\n", sender.name, str.{ + ~~ ^chat_packet.message_data, + ~~ chat_packet.message_length, + }); + } else { + msg = .{ + ~~ ^chat_packet.message_data, + ~~ chat_packet.message_length, + }; + } + + chat_messages << string.alloc_copy(msg); } case .Player_Moved { moved := cast(^packets.Player_Moved) packet; + if moved.player_id == player_id do return; - other_players[~~ moved.player_id] = .{ - position = moved.position, - velocity = moved.velocity, - facing = moved.facing, - }; + player := ^other_players[~~ moved.player_id]; + player.position = moved.position; + player.velocity = moved.velocity; + player.facing = moved.facing; } } } @@ -101,6 +116,11 @@ net_send_connect :: (name: str) { onet.peer_send(peer, 0, p); } +net_send_disconnect :: () { + disconnect := new(packets.Disconnect); + disconnect.player_id = player_id; +} + net_send_chat_message :: (message: str) { msg := cast(^packets.Chat_Message) calloc(sizeof packets.Chat_Message + message.count); msg.type = .Chat_Message; @@ -117,7 +137,6 @@ net_send_chat_message :: (message: str) { net_send_movement_update :: (position: Vector3, velocity: Vector3, facing: Vector3) { movement := new(packets.Player_Moved); - movement.type = .Player_Moved; movement.player_id = player_id; movement.position = position; movement.velocity = velocity; @@ -131,6 +150,8 @@ net_send_movement_update :: (position: Vector3, velocity: Vector3, facing: Vecto Remote_Player :: struct { + name: str; + position: Vector3; velocity: Vector3; facing: Vector3; @@ -139,7 +160,6 @@ Remote_Player :: struct { @TEMPORARY other_players: Map(u32, Remote_Player); - #local { use package core onet :: package onyx_net diff --git a/src/server/server.onyx b/src/server/server.onyx index f6babd9..fcbccc2 100644 --- a/src/server/server.onyx +++ b/src/server/server.onyx @@ -52,7 +52,6 @@ handle_packet :: (peer: ^onet.Peer, packet_data: [] u8) { // Send a verify connect packet { msg := new(packets.Verify_Connect); - msg.type = .Verify_Connect; msg.player_id = ~~next_player_id; p := new(onet.Packet); @@ -82,7 +81,6 @@ handle_packet :: (peer: ^onet.Peer, packet_data: [] u8) { respond_with_error :: macro (reason: packets.Connection_Rejected.Reason) { msg := new(packets.Connection_Rejected); - msg.type = .Connection_Rejected; msg.reason = reason; p := new(onet.Packet); @@ -121,7 +119,6 @@ handle_packet :: (peer: ^onet.Peer, packet_data: [] u8) { send_player_joined :: (player_id: u16, player_name: str, dest: ^onet.Peer) { joined, packet_size := new_with_extra(packets.Player_Joined, player_name.count); - joined.type = .Player_Joined; joined.player_id = player_id; joined.name_length = ~~ player_name.count; memory.copy(~~ ^joined.name_data, player_name.data, player_name.count); @@ -140,7 +137,6 @@ send_player_joined :: (player_id: u16, player_name: str, dest: ^onet.Peer) { send_chat_message :: (from: u16, msg: [] u8) { chat_packet, packet_size := new_with_extra(packets.Chat_Message, msg.count); - chat_packet.type = .Chat_Message; chat_packet.sender_id = from; chat_packet.message_length = ~~ msg.count; memory.copy(~~ ^chat_packet.message_data, msg.data, msg.count); @@ -163,7 +159,7 @@ new_with_extra :: macro ($T: type_expr, extra: u32) -> (^T, u32) { loop :: () { while true { - for host->get_events(timeout=1000) { + for host->get_events(timeout=4000) { if it.type == .Connection { printf("Connection from {}:{}\n", net.ipv4_to_str(it.peer.addr.addr), it.peer.addr.port); } diff --git a/src/shared/packets.onyx b/src/shared/packets.onyx index a75e64c..569b16c 100644 --- a/src/shared/packets.onyx +++ b/src/shared/packets.onyx @@ -20,19 +20,19 @@ Packet_Base :: struct #pack { } Connect :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Connect }; client_version: u32; name_length: u16; name_data: void; } Verify_Connect :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Verify_Connect }; player_id: u16; } Connection_Rejected :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Connection_Rejected }; Reason :: enum { Server_Full :: 1; @@ -41,20 +41,25 @@ Connection_Rejected :: struct #pack { reason: Reason; } +Disconnect :: struct #pack { + use base := Packet_Base.{ .Disconnect }; + player_id: u16; +} + Player_Joined :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Player_Joined }; player_id: u16; name_length: u16; name_data: void; } Player_Left :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Player_Left }; player_id: u16; } Player_Moved :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Player_Moved }; player_id: u16; position: Vector3; velocity: Vector3; @@ -62,7 +67,7 @@ Player_Moved :: struct #pack { } Chat_Message :: struct #pack { - use base: Packet_Base; + use base := Packet_Base.{ .Chat_Message }; sender_id: u16; // Should this be a Player ID? message_length: u16; message_data: void;