mirror of https://git.sr.ht/~kikoodx/kble
Parameter buffer (#6)
This commit is contained in:
parent
b36001e209
commit
165d605eec
|
@ -79,6 +79,10 @@ File (read/write):
|
|||
* `w`: write (save) level
|
||||
*See `kbleformat.md` for technical informations.*
|
||||
|
||||
Parameter buffer (change default value of verb calls):
|
||||
* `p`: set parameter buffer to current parameter (defaults to 1)
|
||||
* `P`: set the tile ID the keyboard cursor is on as parameter buffer
|
||||
|
||||
Modes:
|
||||
* `<return>`: normal mode, default
|
||||
* `i`: free selection mode
|
||||
|
|
Binary file not shown.
|
@ -7,6 +7,7 @@ const std = @import("std");
|
|||
const expect = std.testing.expect;
|
||||
|
||||
const Parameter = @import("parameter.zig");
|
||||
const parameter_buffer = @import("parameter_buffer.zig");
|
||||
const movement = @import("movement.zig");
|
||||
const scaling = @import("scaling.zig");
|
||||
const verbs = @import("verbs.zig");
|
||||
|
@ -21,6 +22,7 @@ pub const ActionCat = enum {
|
|||
verb, // do stuff with selection
|
||||
scale, // change draw scaling
|
||||
file, // load/save, file related stuff
|
||||
pbuf, // modify the parameter buffer
|
||||
mode, // change mode
|
||||
};
|
||||
|
||||
|
@ -32,6 +34,7 @@ pub const Action = struct {
|
|||
function_verb: fn (*Level, Parameter.buffer_type) void = verbs.delete,
|
||||
function_scale: fn (scaling.scale_type, Parameter.buffer_type) scaling.scale_type = scaling.scale_reset,
|
||||
function_file: fn (*Level, *std.mem.Allocator, [*:0]const u8) void = Level.action_write,
|
||||
function_pbuf: fn (Level, Vec2, Parameter.buffer_type) Parameter.buffer_type = parameter_buffer.set,
|
||||
next_mode: Mode = Mode.normal,
|
||||
};
|
||||
|
||||
|
@ -120,7 +123,7 @@ pub const ActionsDef = .{
|
|||
.function_scale = scaling.scale_down,
|
||||
},
|
||||
|
||||
// File
|
||||
// File.
|
||||
.file_read = Action{
|
||||
.category = ActionCat.file,
|
||||
.function_file = Level.action_read,
|
||||
|
@ -130,6 +133,16 @@ pub const ActionsDef = .{
|
|||
.function_file = Level.action_write,
|
||||
},
|
||||
|
||||
// Parameter buffer.
|
||||
.pbuf_set = Action{
|
||||
.category = ActionCat.pbuf,
|
||||
.function_pbuf = parameter_buffer.set,
|
||||
},
|
||||
.pbuf_pick = Action{
|
||||
.category = ActionCat.pbuf,
|
||||
.function_pbuf = parameter_buffer.pick,
|
||||
},
|
||||
|
||||
// Mode change.
|
||||
.mode_normal = Action{
|
||||
.category = ActionCat.mode,
|
||||
|
|
|
@ -256,6 +256,16 @@ pub fn select_rect(self: *Self, rect: Rect, state: bool) void {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_tile_at(self: Self, pos: Vec2) cell_type {
|
||||
const target: u32 = @intCast(u32, pos.y) * self.width + @intCast(u32, pos.x);
|
||||
if (pos.x < self.width and pos.y < self.height and
|
||||
target < self.width * self.height and target >= 0)
|
||||
{
|
||||
return self.content[target];
|
||||
} else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// Apply selection update to selection *kof*.
|
||||
pub fn apply_selection_update(self: *Self, selection_update: SelectionUpdate) void {
|
||||
// Apply changes.
|
||||
|
|
11
src/main.zig
11
src/main.zig
|
@ -76,6 +76,9 @@ pub fn main() void {
|
|||
// Parameter buffer.
|
||||
var parameter: Parameter = Parameter{};
|
||||
|
||||
// Yank/paste for parameters.
|
||||
var parameter_buffer: Parameter.buffer_type = 1;
|
||||
|
||||
// Create binding "table".
|
||||
var bindings = [_]*const actions.Action{&actions.ActionsDef.none} ** char_range;
|
||||
comptime {
|
||||
|
@ -107,6 +110,9 @@ pub fn main() void {
|
|||
// File.
|
||||
default_bindings['e'] = &ActionsDef.file_read;
|
||||
default_bindings['w'] = &ActionsDef.file_write;
|
||||
// Parameter buffer.
|
||||
default_bindings['p'] = &ActionsDef.pbuf_set;
|
||||
default_bindings['P'] = &ActionsDef.pbuf_pick;
|
||||
// Mode.
|
||||
default_bindings['\n'] = &ActionsDef.mode_normal;
|
||||
default_bindings['i'] = &ActionsDef.mode_select;
|
||||
|
@ -175,7 +181,7 @@ pub fn main() void {
|
|||
}
|
||||
},
|
||||
.verb => {
|
||||
action.function_verb(&level, parameter.pop(1));
|
||||
action.function_verb(&level, parameter.pop(parameter_buffer));
|
||||
},
|
||||
.scale => {
|
||||
scale = action.function_scale(scale, parameter.pop(1));
|
||||
|
@ -183,6 +189,9 @@ pub fn main() void {
|
|||
.file => {
|
||||
action.function_file(&level, allocator, level_path);
|
||||
},
|
||||
.pbuf => {
|
||||
parameter_buffer = action.function_pbuf(level, cursor, parameter.pop(1));
|
||||
},
|
||||
.mode => {
|
||||
// Rectangle selection!
|
||||
if (mode == .rectangle or mode == .unrectangle) {
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
// SPDX-License-Identifier: MIT
|
||||
// Copyright (c) 2021 KikooDX
|
||||
// This file is part of [KBLE](https://sr.ht/~kikoodx/kble), which is
|
||||
// MIT licensed. The MIT license requires this copyright notice to be
|
||||
// included in all copies and substantial portions of the software.
|
||||
//! Parameter buffer related operations.
|
||||
const buffer_type = @import("parameter.zig").buffer_type;
|
||||
const Level = @import("level.zig");
|
||||
const Vec2 = @import("vec2.zig");
|
||||
|
||||
pub fn set(level: Level, cursor: Vec2, arg: buffer_type) buffer_type {
|
||||
return arg;
|
||||
}
|
||||
|
||||
pub fn pick(level: Level, cursor: Vec2, arg: buffer_type) buffer_type {
|
||||
return level.get_tile_at(cursor);
|
||||
}
|
Loading…
Reference in New Issue