Declarar proceso ficticio para herencia de variables publicas

Started by warrior_rockk, February 12, 2015, 03:15:33 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

warrior_rockk

Utilizando las variables publicas, tienes que asociar la id de un proceso que las utilice a una variable del tipo del proceso en si para que el compilador reconozca el acceso a esa variable publica. El problema viene cuando no conocemos el tipo de proceso que tenemos almacenado en la variable que usamos como ID y , por lo tanto, queremos definirla como un tipo "genérico". Lo he hecho de la siguiente forma y me funciona, pero quiero saber vuestra opinión y si es correcto usarlo:



declare process entidad()
public
int vida;
end
end


process proceso1()
public
int vida=100;
begin
loop
frame;
end;
end;


process proceso2()
public
int vida=90;
begin
loop
frame;
end;
end;


Process main()
private
entidad idProcess;
Begin

idProcess = proceso1();
say(idProcess.vida);
idProcess = proceso2();
say(idProcess.vida);
loop
frame;
end;
End;



La idea es simple, declaramos un proceso ficticio llamado "entidad" que no se va a usar en el codigo pero con las variables publicas definidas. Luego creamos los procesos normales que utilizaran esas variables publicas definiendolas, y, ya podemos crear una variable de tipo "entidad" que contiene la referencia a esas variables publicas con lo que, cuando asociemos esa variable a un proceso cualquiera (de los definidos), podremos acceder a las variables publicas.


¿Puede valer? Funcionar, funciona...




JaViS

Working on Anarkade. A couch multiplayer 2D shooter.

panreyes

Interesante :!

Definitivamente, es la forma perfecta para engañar al BGDC :)


----


[size=78%]Aunque en mi caso no me ha funcionado xD[/size]

emov2k4

hace dos dias necesitaba esto...  :o
al final lo solucione de otra forma... pero esto es menos lio...

warrior_rockk

Vaya! Me alegro que pueda ser de utilidad. Veo que no soy el único que busca triquiñuelas para usar algo de herencia/PPO en Bennu ajja.
¿no te ha funcionado Pixel? ¿error de compilación o comportamiento no deseado?

panreyes

@Warrior: No lo sé, pero probablemente tenga algo que ver con que lo probé rápidamente con un código de unas 20000 lineas apróx xD

warrior_rockk

Haciendo mas pruebas con este sistema, he detectado un problema que no sé si SplinterGU puede considerar modificarlo para Bennu 2.
El compilador da error de sintaxis si defines como parámetros de una función 2 tipos de proceso distintos. Ejemplo:



function prueba(nave idNave, roca idRoca)



Da error en el segundo parámetro pidiendo una coma entre roca e idRoca. Lo que si permite es esto:


function prueba(nave idNave, idRoca)


pero toma los 2 id como procesos nave, con lo que fallará si no tienen las mismas variables publicas.




¿Es esto un fallo SplinterGU?

JaViS

Working on Anarkade. A couch multiplayer 2D shooter.

warrior_rockk

¿seguro? No digo que el segundo caso deba ser como es, que el segundo parámetro tome el tipo del primero, si no que me debería dejar el primer caso, esto es, definir dos variables de tipo de proceso distintos ¿no?

JaViS

mmm, no creo, aunque parezca ser el mismo tipo de dato, en realidad estas declarando un tipo de proceso. me parece correcta la validacion
Working on Anarkade. A couch multiplayer 2D shooter.

Yawin

Yo suelo crear variables locales. No se, nunca me había planteado hacerlo así.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

JaViS

y, la verdad es que teniendo variables locales no es tan util, seria verdaderamente util si se pudiese obtener con type(procesogenerico) los ids de todos los procesos que 'heredan' de este. ahi tendria mas sentido
Working on Anarkade. A couch multiplayer 2D shooter.

warrior_rockk

Si, la única ventaja que intentaba buscar con las públicas es que, en términos de memoria, no me resulta eficiente porque se reserva en memoria esas variables públicas para TODOS los procesos que se creen, y , seguro que no todos los procesos usan esas variables.

Futu-block

Buf, las publicas me traen de cabeza, he de empoyarlas a conciencia...

SplinterGU

Quote from: warrior_rockk on February 19, 2015, 10:02:26 AM
Haciendo mas pruebas con este sistema, he detectado un problema que no sé si SplinterGU puede considerar modificarlo para Bennu 2.
El compilador da error de sintaxis si defines como parámetros de una función 2 tipos de proceso distintos. Ejemplo:



function prueba(nave idNave, roca idRoca)



Da error en el segundo parámetro pidiendo una coma entre roca e idRoca. Lo que si permite es esto:


function prueba(nave idNave, idRoca)


pero toma los 2 id como procesos nave, con lo que fallará si no tienen las mismas variables publicas.




¿Es esto un fallo SplinterGU?

me perdi esto...

deberia revisarlo, no recuerdo si permite poner parametros tipo proceso en los argumentos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2