Panda3D/Manual/Acessar variáveis de configuração num programa

Panda3D usa um arquivo de configuração( [1] ) chamado Config.prc. Panda prove funções para facilmente ler os valores contidos no config.prc, e alterar seus valores na memória ( os valores modificados não são escritos de volta no disco). A habilidade de ler e alterar as configurações através da programação tem duas grandes utilidades:

  1. Armazenar seus próprios dados de configuração
  2. Mudar o comportamento do Panda3D

Por "armazenar seus próprios dados de configuração" eu quero dizer que seu jogo pode ter suas próprias configurações que precisam ser armazenadas. Ao invés de escrever seu próprio analisador de arquivo, voce poderia considerar adiconar seus dados de configuração ao arquivo de configuração panda.


Suponha hipoteticamente que voce esta escrevendo um jogo online, e seu jogo online se conecta ao servidor. Você precisa de um arquivo de configuração que lhe diga o nome do servidor. Abra o arquivo "Config.prc" e adicione a seguinte linha ao final do arquivo.

   my-game-server panda3dgame.com

Para manipular essa variável pela programação, use o codigo como o seguinte, que cria um objeto da classe ConfigVariableString e então o manipula usando o metodo SetValue e getValue:

   from panda3d.core import ConfigVariableString
   
   myGameServer = ConfigVariableString('my-game-server', '127.0.0.1')
   print ("Servidor especificado no arquivo Config:", meuservergame.getValue())
   
   //Permite ao usuario mudar os servidores na linha de comando:
   if (sys.argv[1] == '--server'):
   myGameServer.setValue(sys.argv[2])
   print('Servidor que usaremos:', mygameserver.getValue())


Obs: Substituir no código as duas barras // por #.


O segundo parâmetro para o construtor ConfigVariableString é o valor padrão que deve ser retornado, no caso a linha "meu-server-game" não aparce em qualquer arquivo Config.prc. Existe também o terceiro parametro opcional, que é uma descrição do proposito da variavel; essa string sera mostrada quando o usuário executar o comando printcvMgr.


Os tipos de configuração de variavel são:

   ConfigVariableString
   ConfigVariableInt
   ConfigVariableBool
   ConfigVariableDouble
   ConfigVariableFilename
   ConfigVariableList
   ConfigVariableSearchPath

A maioria desses seguem a mesma forma de ConfigVariableString acima, a diferença é que o valor padrão ( e o parametro setValue() e getValue() ) é do tipo indicado, ao inves de uma string. As duas exceções são ConfigVariableList e ConfigVariableSearchPath; esses tipos de variáveis não aceitam um valor padrão para o construtor, já que o valor padrão em ambos os casos sempe é a lista vazia ou caminho de busca.


Para mostrar o valor atual de uma variável particular interativamente ( neste exemplo, para a variavel tipo-string), digite o seguinte:

   print(ConfigVariableString("my-game-server"))

Panda3D vai automaticamente carregar qualquer arquivo *.prc que encontrar em seu diretorio config padrão ao iniciar. Voce pode ver a lista dos arquivos que ele carregou com o seguinte comando:

   print cpMgr

Isso é util para assegurar que voce esta editando o arquivo Config.prc correto.


As vezes, é preferivel caregar um arquivo de confguração adicional do disco, dando-o um nome de arquivo explicito. Para fazê-lo, use o loadPrcFile. Note que a sintaxe de nome de arquivo do panda( [2] )usa uma barra para frente, até mesmo no windows:

   from pandac.PandaModules import loadPrcFile
   loadPrcFile("config/Config.prc")
   import direct.directbase.DirectStart

O nome de arquivo que voce especificou é procurado ao longo go caminho do modelo, da memsa forma que um egg ou bam é procurado quando voce usar loader.loadModel()


Voce deveria carregar seu proprio arquivo .prc antes de importar DirectStart. Isso parece estranho se você está acostumado a usar C++, mas é necessário porque DirectStart se inicia logo que o módulo é importado. Mudando os dados da configuração posteriormente não vai surtir efeito na janela/ambiente que já foi criado.


Voce também pode usar loadPrcFileData para carregar a string que voce definiu no seu código python, como se fossem conteudos lidos de um arquivo de disco. A chamada loadPrcFileData() requer dois parametros; o primeiro parâmetro é um nome arbitrario string para dar á este "arquivo" ( e ele pode ser a string vazia se voce nao se importar), enquanto o segundo parametro é o conteudo do proprio arquivo. Esse segundo parametro deve conter novas linhas entre as definições de variavel se voce quiser setar o valor de mais de uma variável


Por exemplo, digamos que o arquivo de configuração panda tem essa linha:

   fullscreen #f

Por padrão, programs panda rodam em uma janela, não em tela cheia. contudo, se você fizer isso:

   from pandac.PandaModules import loadPrcFileData
   loadPrcFileData("", "fullscreen 1")
   import direct.directbase.DirectStart

Então, na hora que voce carregar direct.directbase.DirectStart, você terá mudado a fullscreen-flas para verdadeiro, e seu programa vai rodar em tela cheia. Existem outras maneiras de entrar em tela cheia, essa não é exatamente a mais direta, mas ilustra a idéia.


Voce pode conseguir uma lsita completa das variaveis config disponiveis durante o runtime ( assim que voce importar o DirectStart ), com o seguinte comando:

   cvMgr.listVariables()

Para uma documentação mais completa sobre o sistema de configuração do Panda3D, clique aqui( [3] ) para ver o arquivo de documentação.