Initial set of tools for editing/running projects
This commit is contained in:
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
build
|
||||||
|
*.egg-info
|
||||||
|
__pycache__
|
||||||
13
goat/__init__.py
Normal file
13
goat/__init__.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import sys
|
||||||
|
from . import godot, gzdoom
|
||||||
|
|
||||||
|
def main():
|
||||||
|
project = godot.find_project(".") or gzdoom.find_project(".")
|
||||||
|
if not project:
|
||||||
|
raise Exception("could not find valid project")
|
||||||
|
|
||||||
|
command = sys.argv[1]
|
||||||
|
if command == "run":
|
||||||
|
project.run()
|
||||||
|
elif command == "edit":
|
||||||
|
project.edit()
|
||||||
11
goat/__main__.py
Normal file
11
goat/__main__.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
try:
|
||||||
|
from .goat import main
|
||||||
|
except ImportError:
|
||||||
|
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
|
||||||
|
from goat import main
|
||||||
|
|
||||||
|
main()
|
||||||
29
goat/godot.py
Normal file
29
goat/godot.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from . import util
|
||||||
|
|
||||||
|
GODOT_PATHS = ["C:\Program Files (x86)\Steam\steamapps\common\Godot Engine\godot.windows.opt.tools.64.exe"]
|
||||||
|
GODOT_PROJECT = "project.godot"
|
||||||
|
|
||||||
|
class Project():
|
||||||
|
def __init__(self, path):
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
subprocess.run(find_command(), cwd=self.path)
|
||||||
|
|
||||||
|
def edit(self):
|
||||||
|
subprocess.run([find_command(), "--editor"], cwd=self.path)
|
||||||
|
|
||||||
|
def find_command():
|
||||||
|
for exe in GODOT_PATHS:
|
||||||
|
if os.path.exists(exe):
|
||||||
|
return exe
|
||||||
|
|
||||||
|
return "godot"
|
||||||
|
|
||||||
|
def find_project(path):
|
||||||
|
path = util.find_nearest(path, lambda entry: entry.lower() == GODOT_PROJECT)
|
||||||
|
if path is not None:
|
||||||
|
return Project(path)
|
||||||
37
goat/gzdoom.py
Normal file
37
goat/gzdoom.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from . import util
|
||||||
|
|
||||||
|
GZDOOM_PATHS = []
|
||||||
|
SLADE_PATHS = []
|
||||||
|
GZDOOM_PROJECT = "iwadinfo.txt"
|
||||||
|
|
||||||
|
class Project():
|
||||||
|
def __init__(self, path):
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
subprocess.run([find_gzdoom_command(), "-iwad", "."], cwd=self.path)
|
||||||
|
|
||||||
|
def edit(self):
|
||||||
|
subprocess.run([find_slade_command(), "."], cwd=self.path)
|
||||||
|
|
||||||
|
def find_gzdoom_command():
|
||||||
|
for exe in GZDOOM_PATHS:
|
||||||
|
if os.path.exists(exe):
|
||||||
|
return exe
|
||||||
|
|
||||||
|
return "gzdoom"
|
||||||
|
|
||||||
|
def find_slade_command():
|
||||||
|
for exe in SLADE_PATHS:
|
||||||
|
if os.path.exists(exe):
|
||||||
|
return exe
|
||||||
|
|
||||||
|
return "slade"
|
||||||
|
|
||||||
|
def find_project(path):
|
||||||
|
path = util.find_nearest(path, lambda entry: entry.lower() == GZDOOM_PROJECT)
|
||||||
|
if path is not None:
|
||||||
|
return Project(path)
|
||||||
15
goat/util.py
Normal file
15
goat/util.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
def find_nearest(path, test):
|
||||||
|
path = os.path.abspath(path)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
parent_path = os.path.dirname(path)
|
||||||
|
for entry in os.listdir(path):
|
||||||
|
if test(entry):
|
||||||
|
return path
|
||||||
|
|
||||||
|
if parent_path == path:
|
||||||
|
return None
|
||||||
|
|
||||||
|
path = parent_path
|
||||||
18
pyproject.toml
Normal file
18
pyproject.toml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
[project]
|
||||||
|
name = "goat-tools"
|
||||||
|
version = "0.0.1"
|
||||||
|
dependencies = []
|
||||||
|
requires-python = ">=3.8"
|
||||||
|
authors = [
|
||||||
|
{name = "Gregory Marco", email = "greg@nanoyagi.com"}
|
||||||
|
]
|
||||||
|
maintainers = [
|
||||||
|
{name = "Gregory Marco", email = "greg@nanoyagi.com"}
|
||||||
|
]
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["setuptools >= 61.0"]
|
||||||
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
goat = "goat:main"
|
||||||
Reference in New Issue
Block a user