some preliminary work done on an argument parser & help menu/docs
This commit is contained in:
parent
44e88f7fd0
commit
0ef07b299c
5 changed files with 126 additions and 24 deletions
13
.vscode/settings.json
vendored
13
.vscode/settings.json
vendored
|
|
@ -1,7 +1,10 @@
|
||||||
{
|
{
|
||||||
"workbench.colorCustomizations": {
|
"workbench.colorCustomizations": {
|
||||||
"activityBar.background": "#322C2D",
|
"activityBar.background": "#322C2D",
|
||||||
"titleBar.activeBackground": "#463E3F",
|
"titleBar.activeBackground": "#463E3F",
|
||||||
"titleBar.activeForeground": "#FAFAFA"
|
"titleBar.activeForeground": "#FAFAFA"
|
||||||
}
|
},
|
||||||
|
"[odin]": {
|
||||||
|
"editor.formatOnSave": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
2
.vscode/tasks.json
vendored
2
.vscode/tasks.json
vendored
|
|
@ -77,7 +77,7 @@
|
||||||
"label": "Build&Run Atlas Generator Test",
|
"label": "Build&Run Atlas Generator Test",
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"windows": {
|
"windows": {
|
||||||
"command": "${workspaceFolder}/scripts/build_generator_debug.bat && build_generator\\aseprite_odin_generator.exe",
|
"command": "${workspaceFolder}/scripts/build_generator_debug.bat && build_generator\\aseprite_odin_generator.exe -input-files:value_of_custom_arg -h",
|
||||||
},
|
},
|
||||||
"options": {
|
"options": {
|
||||||
"cwd": "${workspaceFolder}"
|
"cwd": "${workspaceFolder}"
|
||||||
|
|
|
||||||
|
|
@ -14,13 +14,25 @@ import rl "vendor:raylib"
|
||||||
import stbrp "vendor:stb/rect_pack"
|
import stbrp "vendor:stb/rect_pack"
|
||||||
|
|
||||||
import gen ".."
|
import gen ".."
|
||||||
|
import utils "../utils"
|
||||||
|
|
||||||
ATLAS_SIZE :: 512
|
ATLAS_SIZE :: 512
|
||||||
IMPORT_PATH :: "./src/aseprite_odin_generator/big.aseprite"
|
IMPORT_PATH :: "./src/aseprite_odin_generator/big.aseprite"
|
||||||
EXPORT_PATH :: "./src/aseprite_odin_generator/atlas.png"
|
EXPORT_PATH :: "./src/aseprite_odin_generator/atlas.png"
|
||||||
|
|
||||||
main :: proc() {
|
main :: proc() {
|
||||||
fmt.println("Hello!")
|
args := utils.parse_arguments(os.args[1:])
|
||||||
|
fmt.println(args)
|
||||||
|
|
||||||
|
if ok := utils.CLIFlagType.Help in args; ok {
|
||||||
|
fmt.println("Help called!")
|
||||||
|
utils.print_help()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// if help, ok: args[utils.CLIFlagType.Help]; ok {
|
||||||
|
// fmt.println("Help called!")
|
||||||
|
// }
|
||||||
|
|
||||||
ase_file, ase_ok := os.read_entire_file(IMPORT_PATH)
|
ase_file, ase_ok := os.read_entire_file(IMPORT_PATH)
|
||||||
if !ase_ok {
|
if !ase_ok {
|
||||||
fmt.panicf("Couldn't load file!")
|
fmt.panicf("Couldn't load file!")
|
||||||
|
|
@ -45,20 +57,4 @@ main :: proc() {
|
||||||
)
|
)
|
||||||
|
|
||||||
rl.ExportImage(atlas, EXPORT_PATH)
|
rl.ExportImage(atlas, EXPORT_PATH)
|
||||||
|
|
||||||
// something : string = "hello"
|
|
||||||
// fmt.printf("{1} {2} else", something, 10)
|
|
||||||
|
|
||||||
// TestStruct :: struct {
|
|
||||||
// something: struct {
|
|
||||||
// name: string,
|
|
||||||
// age: int,
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
// ts: TestStruct
|
|
||||||
// ts.something.name = "name"
|
|
||||||
|
|
||||||
// jb, err := json.marshal(ts)
|
|
||||||
// sjb := transmute(string)jb
|
|
||||||
// fmt.println(sjb)
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
96
src/utils/cli.odin
Normal file
96
src/utils/cli.odin
Normal file
|
|
@ -0,0 +1,96 @@
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import "core:fmt"
|
||||||
|
import s "core:strings"
|
||||||
|
|
||||||
|
CLIFlagType :: enum {
|
||||||
|
Unknown,
|
||||||
|
InputFiles,
|
||||||
|
InputFolder,
|
||||||
|
OutputFolder,
|
||||||
|
ConfigPath,
|
||||||
|
EnableMetadataOutput,
|
||||||
|
MetadataJSONOutputPath,
|
||||||
|
SourceCodeOutputPathOutputPath,
|
||||||
|
Help,
|
||||||
|
}
|
||||||
|
|
||||||
|
CLI_FLAG_STRINGS := [CLIFlagType][]string {
|
||||||
|
.Unknown = {""},
|
||||||
|
.Help = {"h", "help"},
|
||||||
|
.InputFiles = {"f", "input-files"},
|
||||||
|
.InputFolder = {"d", "input-directory"},
|
||||||
|
.OutputFolder = {"o", "out"},
|
||||||
|
.EnableMetadataOutput = {"m", "export-metadata"},
|
||||||
|
.ConfigPath = {"c", "config"},
|
||||||
|
.MetadataJSONOutputPath = {"j", "json-path"},
|
||||||
|
.SourceCodeOutputPathOutputPath = {"s", "source-path"},
|
||||||
|
}
|
||||||
|
|
||||||
|
CLI_FLAG_DESCRIPTIONS := [CLIFlagType]string {
|
||||||
|
.Unknown = "Invalid flag",
|
||||||
|
.Help = "Prints the help message... hello!",
|
||||||
|
.InputFiles = "(real) path the source files for the packer (realpaths only), for multiple files you can provide one string of concateneted paths, separated by a ';'",
|
||||||
|
.InputFolder = "(real) path to a folder full of source files. This is an alternative to the -i[,input-files] flag",
|
||||||
|
.OutputFolder = "(real) path to the output folder for all the resulting files to be saved to.",
|
||||||
|
.EnableMetadataOutput = "On by default. Whether or not to export metadata (JSON or source files with the offsets for the packer sprites in the atlas)",
|
||||||
|
.ConfigPath = "(real) path to a config file (json) that contains string definitions for exporting custom source files. More on this in the docs.",
|
||||||
|
.MetadataJSONOutputPath = "(real) path for the resulting JSON that will be generated for the atlas. It overrides the name & location in regards to the -o[,output-folder] flag",
|
||||||
|
.SourceCodeOutputPathOutputPath = "(real) path for the resulting source code file that will be generated for the atlas. It overrides the name & location in regards to the -o[,output-folder] flag",
|
||||||
|
}
|
||||||
|
|
||||||
|
CLIFlag :: struct {
|
||||||
|
flag: string,
|
||||||
|
value: string,
|
||||||
|
cli_type: CLIFlagType,
|
||||||
|
}
|
||||||
|
|
||||||
|
categorize_arg :: proc(flag: string) -> (flag_type: CLIFlagType) {
|
||||||
|
flag_type = .Unknown
|
||||||
|
for flag_strings, enum_flag_type in CLI_FLAG_STRINGS {
|
||||||
|
for flag_string in flag_strings {
|
||||||
|
if flag == flag_string {
|
||||||
|
flag_type = enum_flag_type
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
print_help :: proc() {
|
||||||
|
for flag in CLIFlagType {
|
||||||
|
if flag == .Unknown do continue
|
||||||
|
|
||||||
|
fmt.printfln(
|
||||||
|
"Flag: -%v,%v \t -- %v",
|
||||||
|
CLI_FLAG_STRINGS[flag][0],
|
||||||
|
CLI_FLAG_STRINGS[flag][1],
|
||||||
|
CLI_FLAG_DESCRIPTIONS[flag],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_arguments :: proc(args: []string) -> (cliargs: map[CLIFlagType]CLIFlag) {
|
||||||
|
cliargs = make(map[CLIFlagType]CLIFlag)
|
||||||
|
|
||||||
|
for arg in args {
|
||||||
|
arg_name_and_value, err := s.split(arg, ":")
|
||||||
|
name := arg_name_and_value[0]
|
||||||
|
|
||||||
|
if name[0] == '-' {
|
||||||
|
name = name[1:]
|
||||||
|
value: string
|
||||||
|
flag_type := categorize_arg(name)
|
||||||
|
|
||||||
|
if len(arg_name_and_value) > 1 {
|
||||||
|
value = arg_name_and_value[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
map_insert(&cliargs, flag_type, CLIFlag{name, value, flag_type})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
@ -5,6 +5,13 @@ package utils
|
||||||
import "core:intrinsics"
|
import "core:intrinsics"
|
||||||
import "core:reflect"
|
import "core:reflect"
|
||||||
import "core:strings"
|
import "core:strings"
|
||||||
|
import rl "vendor:raylib"
|
||||||
|
|
||||||
|
Texture :: rl.Texture
|
||||||
|
Color :: rl.Color
|
||||||
|
|
||||||
|
Rect :: rl.Rectangle
|
||||||
|
RectEmpty :: Rect{}
|
||||||
|
|
||||||
increase_or_wrap_enum :: proc(e: $T) -> T {
|
increase_or_wrap_enum :: proc(e: $T) -> T {
|
||||||
ei := int(e) + 1
|
ei := int(e) + 1
|
||||||
|
|
@ -45,4 +52,4 @@ Vec2 :: [2]f32
|
||||||
|
|
||||||
vec2_from_vec2i :: proc(p: Vec2i) -> Vec2 {
|
vec2_from_vec2i :: proc(p: Vec2i) -> Vec2 {
|
||||||
return {f32(p.x), f32(p.y)}
|
return {f32(p.x), f32(p.y)}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue