Necrown - Devlog #03 [Engine Dev] : Configuration du projet
Splix Il y a 12 mois Premium Pro - Adhésion à vie0

Salut les gamecodeurs !!!

Nous voici repartis dans un nouveau devlog de programmation. Nous allons nous attaquer ici à la configuration du projet…

Je suis navré mais j’ai des tocs: J’aime quand tout est propre et net à l’extérieur du moteur (même si ça peut-être moins le cas à l’intérieur). Dans un dossier SplixEng (qui va contenir les fichiers de notre moteur), j’ai donc créé un fichier conf.lua, qui va configurer notre projet à la place du fichier conf de love (Ça ne sert à rien mais je ne peu pas m’en empêcher…)

Dans ce fichier conf, on va commencer par créer une variable globale game, qui constituera en quelque sorte le noyau du moteur, mais qui pour l’instant permettra juste d’enregistrer le titre et la version du jeu, une autre variable qu’on appellera display, qui elle va plus s’occuper de la gestion de la fenêtre et de l’affichage du jeu, et une variable nommée conf qui va contenir des fonctions de configuration, et qui n’existera que dans ce fichier. On supprimera la variable conf à la fin de la fonction love.conf, et les deux autres variables seront complétées dans d’autres fichiers, le but étant d’avoir ces valeurs toutes prêtes dans la fonction love.conf…

game = {}
game.title = "Untitled"

game.version = {}
game.version.phase = 1
game.version.major = 1
game.version.minor = 0
game.version.patch = 0
game.version.name = nil

display = {}
display.w = 800
display.h = 600

conf = {}

function conf.setTitle(p_title)
  game.title = p_title
end

function conf.setVersion(p_phase, p_major, p_minor, p_patch, p_name)
  game.version.phase = p_phase or game.version.phase
  game.version.major = p_major or game.version.major
  game.version.minor = p_minor or game.version.minor
  game.version.patch = p_patch or game.version.patch
  game.version.name = p_name
end

function conf.setDisplay(p_width, p_height)
  display.w = p_width or display.w
  display.h = p_height or display.h
end

Ainsi, le fichier conf de love est tout propre tout net, et tout est géré par le fichier conf de l’engine…

require("SplixEng/conf")

conf.setTitle("Necrown")
conf.setVersion(1, 1, 0, 0, "Création de l'engine")
conf.setDisplay(800, 450)

Rien de bien utile à première vue, mais j’aime bien avoir la console à part lors du lancement du programme (une vrai console qui s’ouvre en même temps que le jeu c’est quand même plus classe, même si j’utilise zerobrane en ce moment et que ça n’est donc pas indispensable). Pour cela, il suffit de mettre la valeur console à true dans la fonction love.conf. Seulement j’aimerai que les joueurs n’aient pas la console et je ne veux pas m’embêter à remettre cette valeur à false à chaque fois que je génère un exécutable (surtout que je me connais, je vais oublier de le faire à un moment ou à un autre).

Mais comment faire pour savoir si le programme qui s’exécute est la version de développement, ou celle que le joueur aura entre les mains? Rappelez-vous, dans le précédent devlog je vous avais dit que notre dossier Excluded ne serait pas utile seulement pour exclure des fichiers: Comme ce dossier n’est pas présent dans l’exécutable final généré par notre fichier genExe.cmd, il suffit de tester son existence pour savoir si l’on est sur une version de développement ou pas. Mais comme les modules de love ne sont pas encore chargés dans le fichier conf, on va utiliser la bibliothèque io du lua:

game.inDev = false
local file = io.open("Excluded/GenExe/genExe.cmd","r")
if file ~= nil then 
  io.close(file)
  game.inDev = true
end

De cette façon, on peu écrire console = game.inDev dans love.conf et le tour est joué!

La variable game.inDev nous sera encore très utile dans le projet, elle nous permettra d’activer des outils de développement qui ne seront pas accessibles au joueur par exemple. Mais il faudra attendre d’autres devlogs pour voir tout ça…

En attendant, bon code à tous !!!

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.