Rynareen 17 Thg07, 2017 @ 9:40am
Luzes com Sensor solar [Space Engineers: Bloco de Programação]
Boa Tarde! Sou Novo em Space Engineers e ainda mais novo em programação e gostaria de começar a treinar programação usando métodos dentro do jogo, o que será um ótimo incentivo para mim que estou cursando Sistemas de informação e estou indo para o Segundo Semestre. Então tomei por objetivo fazer um mini-script no bloco de programação que pudesse identificar o ciclo do dia (claro ou noite) e ligasse as luzes internas da minha base, então pensei em uma estrutura mais ou menos como essa abaixo:



início //A Variável que contabiliza o tempo de 1 loop de segundo //ZACommons const string STANDARD_LOOP_TIMER_BLOCK_NAME = "1 second loop"; //Variável 'e' recebe 1 loop de segundo de cada bloco de Painel solar na grade var e = ZACommons.GetblocksOfType<IMySolarPanel>(blocks) //Variável 'panel' recebe o valor atual da variável 'e' var panel = e.Current //Enquanto para cada 1 loop de segundo o Painel Solar está com energia while (panel.IsWorking) { // Desligar as Luzes } do not { // Ativar as Luzes } fim


Porém não sei se é funcional, como programar direitinho usando os blocos no jogo e não completei também, se alguém puder me dar uma mãozinha ficaria muito agradecido!

Peguei parte dessa estrutura de um código que encontrei no Github da programação de um satélite para Space Engineers, quem quiser ver depois, tanto par ame ajudar quanto para usar, disponibilizarei abaixo, só pedir.
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 11:03am
< >
Đang hiển thị 1-15 trong 19 bình luận
Rynareen 17 Thg07, 2017 @ 9:44am 
Lembrando Principalmente em ZACommons, peguei esse parâmetro do código que vi no Github, e estava tentando entender por que ele foi usado para as medidas, e qual a ligação do loop de 1 segundo para ele, então peço que não estranhem o pseudo-código, ele está todo errado. Estou buscando alguém para me ajudar a torná-lo funcional, e assim que puder, por ser simples também disponibilizarei online.
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 9:44am
Pelo que entendi, esse script verifica se os painéis solares estão atualmente ativados, certo?

Não tem alguma maneira de você identificar o horário atual no relógio interno do jogo, através de um valor double, String, int, ou algum outro formato exclusivo do framework de programação? O framework deve ter alguma função pra isso.

Se tiver como você obter essa info, creio que é mais fácil de fazer o que você quer do que checar a cada segundo se os painéis estão ativados ou não.

Also, lembre-se que uma instrução de loop precisa de uma condição de parada, se não ficará eternamente rodando.
Lần sửa cuối bởi DEVOLVE MINHA CACHAÇA!; 17 Thg07, 2017 @ 9:53am
Rynareen 17 Thg07, 2017 @ 9:53am 
Sim ele faz isso!

Vou Pesquisar @Mr.Dawn e trago a resposta aqui, logo.

Mas realmente nessa parte do loop, me perdi um pouco porque quero que as luzes desligassem quando os painéis solares (que já são blocos que identificam a luz do sol no planeta) estivessem funcionando no caso gerando energia e depois ligassem quando não estivessem.
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 9:58am
Nguyên văn bởi elianthony:
Sim ele faz isso!

Vou Pesquisar @Mr.Dawn e trago a resposta aqui, logo.

Beleza.

Algo, porém, me deixou curioso: esse script roda em que momento, exatamente? Quando a tua base é renderizada, ou você precisa iniciá-lo manualmente, ou automaticamente via alguma funcionalidade do jogo?

Porque dependendo de como você faz isso, essa instrução while seria redundante.
Rynareen 17 Thg07, 2017 @ 10:02am 
Beleza.

Algo, porém, me deixou curioso: esse script roda em que momento, exatamente? Quando a tua base é renderizada, ou você precisa iniciá-lo manualmente, ou automaticamente via alguma funcionalidade do jogo?

Porque dependendo de como você faz isso, essa instrução while seria redundante.

Então a minha ideia inicial é quando a base for renderizada e ele estaria funcionando toda hora, enquanto jogo, mas agora pensando, seria mais prudente se eu ativasse por um botão (que tem no jogo) para quando eu quisesse ativar essa função. Pois se casso precisasse reformar os painéis ou a base não quebrasse o código ou desse muito lag, por estar rodando o código sempre. Então eu ativaria o botão para essa função rodar e quando ativado ele identificaria o sol pelos painéis solares.


Só Lembrando, a língua do Bloco de Programação é em C# e existe outro bloco com Temporizador, que é o que gera o tempo do script rodar, ele que faria esse loop de 1 segundo.
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 10:07am
Nguyên văn bởi elianthony:
Beleza.

Algo, porém, me deixou curioso: esse script roda em que momento, exatamente? Quando a tua base é renderizada, ou você precisa iniciá-lo manualmente, ou automaticamente via alguma funcionalidade do jogo?

Porque dependendo de como você faz isso, essa instrução while seria redundante.

Então a minha ideia inicial é quando a base for renderizada e ele estaria funcionando toda hora, enquanto jogo, mas agora pensando, seria mais prudente se eu ativasse por um botão (que tem no jogo) para quando eu quisesse ativar essa função. Pois se casso precisasse reformar os painéis ou a base não quebrasse o código ou desse muito lag, por estar rodando o código sempre. Então eu ativaria o botão para essa função rodar e quando ativado ele identificaria o sol pelos painéis solares.

Saquei. É que dependendo do overhead produzido dentro da instrução de loop, pode reamente gerar lag.

Veja se é possível de alguma maneira você obter o horário interno do jogo, aí você implementa o while com a condição de execução sendo o range do horário em que é escuro, o bloco de execução a função que liga as luzes, e a condição de parada o range do horário em que é claro, aí acho que rola fazer o que você quer.
Lần sửa cuối bởi DEVOLVE MINHA CACHAÇA!; 17 Thg07, 2017 @ 10:08am
Rynareen 17 Thg07, 2017 @ 10:21am 
Nguyên văn bởi Mr. Dawn with Keys Hat:
Nguyên văn bởi elianthony:

Então a minha ideia inicial é quando a base for renderizada e ele estaria funcionando toda hora, enquanto jogo, mas agora pensando, seria mais prudente se eu ativasse por um botão (que tem no jogo) para quando eu quisesse ativar essa função. Pois se casso precisasse reformar os painéis ou a base não quebrasse o código ou desse muito lag, por estar rodando o código sempre. Então eu ativaria o botão para essa função rodar e quando ativado ele identificaria o sol pelos painéis solares.

Saquei. É que dependendo do overhead produzido dentro da instrução de loop, pode reamente gerar lag.

Veja se é possível de alguma maneira você obter o horário interno do jogo, aí você implementa o while com a condição de execução sendo o range do horário em que é escuro, o bloco de execução a função que liga as luzes, e a condição de parada o range do horário em que é claro, aí acho que rola fazer o que você quer.


Ótimo, Pesquisei aqui e nas configurações iniciais nós que coordenamos quanto tempo de duração do dia, posso calcular ingame quanto tempo do sol e quanto tempo da noite (me parece ser desbalanceado dependendo do planeta que você estiver) e daí configurar o timer para esse range o problema é que seria interessante se fosse funcional em todos os planetas, por isso pensei em usar o Painel Solar.
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 10:22am
Nguyên văn bởi elianthony:
Nguyên văn bởi Mr. Dawn with Keys Hat:

Saquei. É que dependendo do overhead produzido dentro da instrução de loop, pode reamente gerar lag.

Veja se é possível de alguma maneira você obter o horário interno do jogo, aí você implementa o while com a condição de execução sendo o range do horário em que é escuro, o bloco de execução a função que liga as luzes, e a condição de parada o range do horário em que é claro, aí acho que rola fazer o que você quer.


Ótimo, Pesquisei aqui e nas configurações iniciais nós que coordenamos quanto tempo de duração do dia, posso calcular ingame quanto tempo do sol e quanto tempo da noite (me parece ser desbalanceado dependendo do planeta que você estiver, e daí configurar o timer para esse range o problema é que seria interessante se fosse funcional em todos os planetas, por isso pensei em usar o Painel Solar.

É, nesse caso acho que tem mais lógica, se não o range terá de mudar o tempo todo. Faz sentido usar os painéis solares como referência.

Então faça desta maneira: a condição de execução do while está correta no script-exemplo, já no bloco de execução você implementa a rotina que ativa as luzes, e a condição e parada você define quando panel.IsWorking retornar falso.

Acho que isso resolve o teu problema.
Lần sửa cuối bởi DEVOLVE MINHA CACHAÇA!; 17 Thg07, 2017 @ 10:25am
Rynareen 17 Thg07, 2017 @ 10:33am 
Perfeito! Agora minha dúvida O Parâmetro ZACommons,está funcional? Segue o link [gist.github.com] do código que peguei no Github.

Nele se você der Ctrl+F e buscar, MySolarPanel e também ZACommons você encontra esses parâmetros, eu não entendi a ligação desse ZACommons com o bloco temporizador que é usado para rodar o script porque ele identifica como comentário uma constante string como eu fiz ali acima, ainda não compreendo em que momento ZACommons recebe esse loop de 1 segundo, consegue me ajudar nisso?
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 10:34am
Nguyên văn bởi elianthony:
Perfeito! Agora minha dúvida O Parâmetro ZACommons,está funcional? Segue o link [gist.github.com] do código que peguei no Github.

Nele se você der Ctrl+F e buscar, MySolarPanel, ZACommons você encontra esses parâmetros, eu não entendi a ligação desse ZACommons com o bloco temporizador que é usado para rodar o script porque ele identifica como comentário uma constante string como eu fiz ali acima, ainda não compreendo em que momento ZACommons recebe esse loop de 1 segundo, consegue me ajudar nisso?

ZACommons é tipo uma library com funções pra acessar módulos ou algo do gênero? Não entendi muito bem, mas pelo que notei, essa classe/objecto ZACommons contém coleções de blocos, e na linha 296 fica o acesso os blocos do tipo específico que te interessam.

Não achei nada que fizesse referência a um temporizador aí.

Edit:

Ah, encontrei lá, é essa String STANDARD_LOOP_TIMER_BLOCK_NAME. Mas é...eu não sei exatamente como isso funciona. Acho que essa String está em um formato interpretado por alguma parte dessa API.
Lần sửa cuối bởi DEVOLVE MINHA CACHAÇA!; 17 Thg07, 2017 @ 10:51am
Rynareen 17 Thg07, 2017 @ 10:51am 
Isso @Mr.Dawn Obrigado, Realmente esse scripter, ele usa uma livraria específica de modo a localizar os blocos de maneira mais coordenada para os scripts dele, previamente eu precisaria dessa livraria para conseguir usar esse parâmetro "ZACommons", terei que recriar essa diretriz usando a API (livraria) do próprio jogo, vai levar mais linhas de código, porém prefiro, pois irei disponibilizar para download posteriormente. Muito Obrigado mesmo! Eu realmente estava meio perdido de onde postar essa dúvida, e até confundi esse fórum achando que fosse um fórum específico em português para Space Engineers então me desculpem se está deslocado, manterei aqui para pesquisas futuras de quem estiver interessado e retorno assim que escrever um código, logo; e gostaria da sua opinião se não for muito depois, pois sou um Newbie programmer
Nguyên văn bởi elianthony:
Isso @Mr.Dawn Obrigado, Realmente esse scripter, ele usa uma livraria específica de modo a localizar os blocos de maneira mais coordenada para os scripts dele, previamente eu precisaria dessa livraria para conseguir usar esse parâmetro "ZACommons", terei que recriar essa diretriz usando a API (livraria) do próprio jogo, vai levar mais linhas de código, porém prefiro, pois irei disponibilizar para download posteriormente. Muito Obrigado mesmo! Eu realmente estava meio perdido de onde postar essa dúvida, e até confundi esse fórum achando que fosse um fórum específico em português para Space Engineers então me desculpem se está deslocado, manterei aqui para pesquisas futuras de quem estiver interessado e retorno assim que escrever um código, logo; e gostaria da sua opinião se não for muito depois, pois sou um Newbie programmer

Relaxe, se você quis discutir sobre em Português, então é este o local correto. Ainda assim seria bom perguntar isso na hub do jogo, talvez lá tenha gente mais acostumada com essa API e que possa te oferecer uma ajuda melhor do que a minha.

Eu não entendo nada dessa API e nem do framework de programação pro Space Engineers, mas se precisar tirar dúvidas sobre lógica, algoritmos ou algo do gênero, let me know.
Lần sửa cuối bởi DEVOLVE MINHA CACHAÇA!; 17 Thg07, 2017 @ 10:57am
Rynareen 17 Thg07, 2017 @ 10:59am 
Sim, depois irei transcrever (pelo translate) para o fórum da keen software house (desenvolvedora do Space Engineers) assim que retornar com o script para expandir a discussão por lá, e disponibilizar para mais usuários o script ^.^
Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 10:59am
M@X1MU$ 17 Thg07, 2017 @ 11:23am 
Que interessante esse jogo
Rynareen 17 Thg07, 2017 @ 12:48pm 
Cheguei nesse[gist.github.com] resultado, Gostaria da opinião, pelo menos quanto a lógica e a estrutura em C# (se iniciei certinho, erros de sintaxe dentre outros)

Lần sửa cuối bởi Rynareen; 17 Thg07, 2017 @ 12:56pm
< >
Đang hiển thị 1-15 trong 19 bình luận
Mỗi trang: 1530 50

Ngày đăng: 17 Thg07, 2017 @ 9:40am
Bài viết: 19