Implement getting all the input names
This commit is contained in:
		
							parent
							
								
									2b4dbc2875
								
							
						
					
					
						commit
						e370e2bb66
					
				| 
						 | 
					@ -1,4 +1,7 @@
 | 
				
			||||||
 | 
					const Self = @This();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const rl = @import("raylib.zig");
 | 
					const rl = @import("raylib.zig");
 | 
				
			||||||
 | 
					const std = @import("std");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub const Input = struct {
 | 
					pub const Input = struct {
 | 
				
			||||||
    name: []const u8,
 | 
					    name: []const u8,
 | 
				
			||||||
| 
						 | 
					@ -16,6 +19,12 @@ pub const Input = struct {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn loadConfig() void {
 | 
				
			||||||
 | 
					    for (comptime getInputNames()) |name| {
 | 
				
			||||||
 | 
					        std.debug.print("{s}\n", .{name});
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn init(comptime name: []const u8, comptime key_code: []const u8) Input {
 | 
					fn init(comptime name: []const u8, comptime key_code: []const u8) Input {
 | 
				
			||||||
    return Input{
 | 
					    return Input{
 | 
				
			||||||
        .name = name,
 | 
					        .name = name,
 | 
				
			||||||
| 
						 | 
					@ -38,3 +47,40 @@ pub var game_drop = init("Drop Piece", "W");
 | 
				
			||||||
pub var game_swap_piece = init("Swap Piece", "SPACE");
 | 
					pub var game_swap_piece = init("Swap Piece", "SPACE");
 | 
				
			||||||
pub var game_rotate_r = init("Rotate Piece Clockwise", "RIGHT");
 | 
					pub var game_rotate_r = init("Rotate Piece Clockwise", "RIGHT");
 | 
				
			||||||
pub var game_rotate_l = init("Rotate Piece Counterclockwise", "LEFT");
 | 
					pub var game_rotate_l = init("Rotate Piece Counterclockwise", "LEFT");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get the names of the Input(s) defined in this file with introspection
 | 
				
			||||||
 | 
					fn getInputNames() [getInputCount()][]const u8 {
 | 
				
			||||||
 | 
					    comptime {
 | 
				
			||||||
 | 
					        const decls = std.meta.declarations(Self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var ret: [getInputCount()][]const u8 = undefined;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var i: usize = 0;
 | 
				
			||||||
 | 
					        inline for (decls) |i_decl| {
 | 
				
			||||||
 | 
					            const field = @field(Self, i_decl.name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (@TypeOf(field) == Input) {
 | 
				
			||||||
 | 
					                ret[i] = i_decl.name;
 | 
				
			||||||
 | 
					                i += 1;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return ret;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// With reflection count the amount of declarations of type "Input"
 | 
				
			||||||
 | 
					fn getInputCount() usize {
 | 
				
			||||||
 | 
					    comptime {
 | 
				
			||||||
 | 
					        const decls = std.meta.declarations(Self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var i: usize = 0;
 | 
				
			||||||
 | 
					        inline for (decls) |i_decl| {
 | 
				
			||||||
 | 
					            const field = @field(Self, i_decl.name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (@TypeOf(field) == Input) i += 1;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return i;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,15 +8,16 @@ const MainMenu = @import("MainMenu.zig");
 | 
				
			||||||
const config = @import("Config/config.zig");
 | 
					const config = @import("Config/config.zig");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const State = @import("flow.zig").State;
 | 
					const State = @import("flow.zig").State;
 | 
				
			||||||
 | 
					const input = @import("input.zig");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn main() !void {
 | 
					pub fn main() !void {
 | 
				
			||||||
 | 
					 | 
				
			||||||
    var configIterator = config.getConfigIterator("test") catch unreachable;
 | 
					    var configIterator = config.getConfigIterator("test") catch unreachable;
 | 
				
			||||||
    while (configIterator.next()) |option| {
 | 
					    while (configIterator.next()) |option| {
 | 
				
			||||||
        std.debug.print("Key: {s}, Option: {s}\n", .{ option.key, option.value });
 | 
					        std.debug.print("Key: {s}, Option: {s}\n", .{ option.key, option.value });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    configIterator.deinit();
 | 
					    configIterator.deinit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    input.loadConfig();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var renderer = try Renderer.init();
 | 
					    var renderer = try Renderer.init();
 | 
				
			||||||
    defer renderer.deinit();
 | 
					    defer renderer.deinit();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue