Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 2d8f7953 authored by Florent Bouchez Tichadou's avatar Florent Bouchez Tichadou
Browse files

Engine_evolution uses org-mode sections to describe versions. Only generate versions

for the first high-level section.
Added options --list and --all to make_engine to respectively only list
versions and generate all versions, including the ones in subsequent high-level
sections (versions that are WIP)
parent b9e857f1
No related branches found
No related tags found
1 merge request!77Rework on engines
- carte simple sans layer avec simplement les caracteres (le basic engine actuel) en placant les entites a la main
- deplacement simple en supprimant l'ancien caractere et en le placant a cote
- le joueur a deux coordonnees player_x player_y
- on a 4 moves pour les entites mais aussi pour le joueur
SIMPLE_MAP (jamais de ifdef par ce que toujour le cas)
#+title: Engines evolutions
- ajout des level_success level_failed et game_instance
LEVEL_END
Fichier de description rapide des `engines`
Utilisé par `make_engines.py` pour générer toutes les versions des engines.
- lecture d'input et mouvement sous forme de commande sans arguments
(note le deplacement avec les fleches vient de AGDBENTURES et il pousse des commandes sur stdin)
INPUT_COMMAND
* Engines fonctionnels
Ces engines devraient tous fonctionner.
Ils ont tous des tests unitaires et certains sont utilisés dans des niveaux.
- ajout des defines ACTIVATED et DEACTIVATED pour les leviers
LEVERS (cest tout petit cest deux lignes)
- ajout d'un fichier de config avec la taille de la map la position du joueur tout ca pour init_game
CONFIG_FILE
** SIMPLE_MAP
- Note: engine de base donc jamais de ifdef
- carte simple sans layer en tableau 2D d'entités (char) linéarisées
- les entités sont placées "à la main"
- déplacement simple en supprimant l'ancien caractère et en le plaçant a côté
- le joueur a deux coordonnees player_x player_y
- on a 4 moves pour les entites mais aussi pour le joueur
- lire la map dans une chaine
READ_MAP_STR
** LEVEL_END
- ajout des level_success level_failed et game_instance
- arguments pour les commandes en input
- variantes UP N, DOWN N, des deplacements
COMMAND_ARGS
** INPUT_COMMAND
- lecture d'input et mouvement sous forme de commande sans arguments
- déplacement en rentrant sur stdin: LEFT RIGHT UP DOWN
- Note: le deplacement avec les fleches vient de Agdbentures qui écrit sur le
stdin de l'inférieur
- stack de map pour changer de map
MAP_STACK
** LEVERS
- Note: ajout mineur : deux lignes
- ajout des defines ACTIVATED et DEACTIVATED pour les leviers
- les entites deviennent des structures
- le joueur devient une entite
ENTITY_STRUCT
** CONFIG_FILE
- ajout d'un fichier de config avec la taille de la map la position du joueur tout ca pour init_game
- inventaire array
- structure game
INVENTORY_ARRAY
** READ_MAP_STR
- lire la map dans une chaine
- ajout d'un fichier de config pour declarer des entites
CUSTOM_ENTITY
** COMMAND_ARGS
- arguments pour les commandes en input
- variantes UP N, DOWN N, des deplacements
- propriete des objets genre pushable, activable, blocking
- ajout du champ dans le fichier de config
ENTITY_PROPERTIES
** MAP_STACK
- stack de map pour changer de map
- on empile les entites dans des listes chainees sur les maps
MAP_ENTITY_STACKING
** ENTITY_STRUCT
- les entites deviennent des structures
- le joueur devient une entite
- la map devient un tableau 2D
- map comme graph
MAP_GRAPH
** INVENTORY_ARRAY
- inventaire array
- structure game
- events
- interraction avec les objets dans le moteur et pas dans le niveau
EVENTS
- lire la carte dans un tmx
READ_MAP_TMX
* Engines à travailler/retravailler
Ces engines sont générés mais non testés complètement ou à revoir.
- void * pour pointeur de fonction
- void * pour les arguments aussi
EVENT_ARGS
** CUSTOM_ENTITY
- ajout d'un fichier de config pour declarer des entites
** ENTITY_PROPERTIES
- propriete des objets genre pushable, activable, blocking
- ajout du champ dans le fichier de config
** MAP_ENTITY_STACKING
- on empile les entites dans des listes chainees sur les maps
** MAP_GRAPH
- map comme graph
** EVENTS
- events
- interraction avec les objets dans le moteur et pas dans le niveau
** READ_MAP_TMX
- lire la carte dans un tmx
** EVENT_ARGS
- void * pour pointeur de fonction
- void * pour les arguments aussi
#!/usr/bin/env python3
"""test script for engine anotation"""
"""
Script that generates the different engine versions by using unifdef on the
engine sources, a activating a different set of preprocessor variables for each version.
"""
import os
import sys
......@@ -27,6 +30,20 @@ parser.add_argument(
help="Set debug level (0 = crit, 1 = warn, 2 = info, 3 = debug)",
)
parser.add_argument(
"--all",
"-a",
action="store_true",
help="Generates engines for all features, even those under work",
)
parser.add_argument(
"--list",
"-l",
action="store_true",
help="Only list the engines that would be generated",
)
parser.add_argument(
"--test",
"-t",
......@@ -86,32 +103,35 @@ test: all
tmplt = Template(makefile_template)
if args.test:
makefile_contents = tmplt.substitute(
test_rule=test_rule,
phony_test="test"
)
makefile_contents = tmplt.substitute(test_rule=test_rule, phony_test="test")
else:
makefile_contents = tmplt.substitute(
test_rule="",
phony_test=""
)
makefile_contents = tmplt.substitute(test_rule="", phony_test="")
fevol = os.path.join(cdir, "engine_evolution.org")
logging.info(f"Reading engine evolutions from {fevol}")
with open(fevol) as f:
feature_list = [feature.strip("\n") for feature in f.readlines()]
# filter empty
feature_list = [feature for feature in feature_list if feature]
# select first word
feature_list = [feature.split()[0] for feature in feature_list]
feature_list = [
feature
for feature in feature_list
if feature.upper() == feature and feature != "-"
]
logging.info(f"Feature list: {feature_list}")
feature_list = []
for l in f:
# Toggle take features at second main section unless --all is asked
# We detect this by considering there is at least one
# feature working in the first section
if l.startswith('* '):
if feature_list and not args.all:
break
if l.startswith('** '):
feature_list.append(l.strip()[3:])
if args.list:
print("Engines:")
for f in feature_list:
print(f"\t{f}")
exit(0)
logging.info(f"Feature list: {feature_list}")
for i, feature in enumerate(feature_list):
......@@ -164,7 +184,9 @@ for i, feature in enumerate(feature_list):
if os.path.exists(tstfile):
os.symlink(tstfile, os.path.join(engine_dir, "tests.c"))
else:
logging.warning(f"Could not symlink test file feature {feature}, using generic test")
logging.warning(
f"Could not symlink test file feature {feature}, using generic test"
)
os.symlink(
os.path.join(TEST_DIR, "generic_tests.c"),
os.path.join(engine_dir, "tests.c"),
......@@ -174,9 +196,9 @@ for i, feature in enumerate(feature_list):
global_makefile_str = """SUBDIRS := $(wildcard */)
all:
@for d in $(SUBDIRS); do \
echo "Testing engine version $$d"; \
make -C $$d test; \
@for d in $(SUBDIRS); do \\
echo "Testing engine version $$d"; \\
make -C $$d test || exit 1; \\
done
.PHONY: all
......@@ -184,4 +206,4 @@ all:
if args.test:
with open(os.path.join(VERSION_DIR, "Makefile"), "w") as f:
print(global_makefile_str, file=f)
print(global_makefile_str, file=f)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment