El sistema operativo ASCII nadie pidió.
¡Únete a nosotros en Discord! https://discord.gg/fptu8eb
SOS es una simulación de un sistema operativo basado en texto escrito en Lua con la ayuda de Löve 2D. ¡Las aplicaciones también se pueden cargar, lo que le permite desarrollar o descargar todo lo que pueda imaginar y ejecutarlo en SOS! Esto es completamente seguro para usted como usuario descargar scripts de Lua aleatorios en Internet y lanzarlos en / programas / porque todas las aplicaciones están cargadas en un entorno de sandboxed. Las aplicaciones solo tienen acceso a funciones matemáticas, la API SOS y algunas otras utilidades.
Necesitas tener el amor 2D instalado para ejecutar SOS. Si tiene instalado ZeroBrane IDE, puede abrir SOS como proyecto, vaya a Project> Lua Interpreter y configúrelo en amor, luego use F6 para ejecutar. De lo contrario, arrastre la carpeta en la que SOS se encuentra en 'Love.exe'.
0.1 es nuestro primer hito mayor. Se siente extraño llamarlo, porque SOS sigue siendo un sistema pseudo-operativo basado en textos de Buggy como Hell escrito en Lua, pero está aquí. Las aplicaciones ahora se pueden cargar, cerrar, tenemos un método de representación nuevo y ligeramente más optimizado. Ahora, tiene una aplicación que está bastante completa en el medio de la pantalla y una barra lateral en cada lado que muestra aplicaciones actuales y otra información del sistema. Tenemos un largo camino por recorrer, pero para un proyecto que comenzó hace menos de una semana (sí, lo sé ... o_o) lo hemos hecho bastante lejos.
¡Manténganse al tanto!
A la izquierda ...
Tab (o Shift + Tab ) Cicles a través de aplicaciones abiertas. Incluso cuando las aplicaciones están abiertas, puede recorrer la entrada 'sin aplicación', haciendo que todas las aplicaciones se ejecuten en segundo plano.
Escape cierra la aplicación seleccionada actual. Si no se selecciona ninguna aplicación (descrita anteriormente), el escape cierra SOS.
A la derecha...
Page hacia arriba y el ciclo de página hacia abajo a través de las aplicaciones detectadas. La aplicación seleccionada tiene un '>' al lado.
Cambios de finalización entre seleccionar aplicaciones del sistema (en la parte superior) y aplicaciones de usuario (en la parte inferior).
Inicio comienza un nuevo proceso con la aplicación seleccionada.
El desarrollo de aplicaciones utiliza S-Code, que es solo una forma más fácil de decir LUA limitada por el entorno con API SOS. El enlace para la configuración para el entorno Sandbox está aquí: https://hastebin.com/acolabiqez.lua Puede usar cualquier función de lua incluidas allí, incluidas las funciones API en la parte inferior. Esta página se actualizará a medida que se implementen más funciones.
api.g.set (x, y, char)
Entradas: 'x' y 'y' son las coordenadas para el personaje, con (1, 1) siendo la parte superior izquierda. 'Char' debería ser un solo personaje.
Resultado: 'Char' se coloca en esa coordenada en el lienzo para que se represente en el siguiente sorteo (). Use en sorteo ().
Regreso: Verdadero
api.g.get (x, y)
Entradas: 'x' y 'y' son las coordenadas para el personaje, con (1, 1) siendo la parte superior izquierda.
Resultado: obtiene el char en esa coordenada del último sorteo (). Use en tick ().
Regreso: cadena
api.g.text (x, y, str)
Entradas: 'X' y 'Y' son las coordenadas para el inicio de la cadena, con (1, 1) siendo la parte superior izquierda. 'str' debería ser una cadena de uno o más caracteres.
Resultado: 'STR' se coloca en esa coordenada en el lienzo para que se represente en el siguiente sorteo (). Use en sorteo ().
Regreso: Verdadero
api.g.box (x, y, w, h, adapt)
Entradas: 'X' e 'Y' son las coordenadas para el inicio de la caja, con (1, 1) siendo la parte superior izquierda. 'W' y 'H' son el ancho y la altura del exterior de la caja, por lo que el interior es 2 unidades menos en cada dimensión. 'Adapt' es un booleano para si los bordes y esquinas de la caja que se dibujan deben reformatear automáticamente para hacer cuadrículas o líneas de intersección en lugar de sobrescribir los bordes de otras cajas.
Resultado: extrae un rectángulo de los caracteres ASCII. Adapt tiene efectos especiales descritos anteriormente.
Regreso: Verdadero
API.G.BAR (X, Y, LEGTH, DIRECCIÓN, Estilo, porcentaje)
Entradas: 'X' y 'Y' son coordenadas para el inicio de la barra, con (1, 1) siendo la parte superior izquierda. 'Longitud' es cuántos personajes debería tener la barra. 'Dirección' es la dirección, desde el principio, en que la barra entrará. 'Estilo' es la aparición de la barra (más información sobre los estilos más tarde, los estilos actuales son 'Bloqueo' y 'Fade'). El "porcentaje" es cuánto de la barra se debe llenar.
Resultado: crea una pantalla de barra de progreso usando caracteres. Las barras siempre redondean hasta la pantalla única más cercana, por lo que 0.9999 no llenará la barra, solo 1.0 (o mayor) lo hará. 0.0 siempre será una barra vacía.
Regreso: Verdadero
api.i.keystat (clave)
Entradas: 'Key' es una cadena para el nombre de la clave a verificar. Por ejemplo, "A", "Shift", "Space".
Resultado: verifica si la tecla se está presionando. No detectará las claves si no la aplicación activa.
Return: verdadero si la tecla se presiona, falsa de lo contrario.
api.s.appstable ()
Entradas: nada.
Resultado: Devuelve (una copia profunda de) la tabla de aplicaciones. Esto es un poco más complicado y se documentará en el wiki más tarde.
Regreso: aplicaciones (tabla)
Las siguientes funciones son llamadas por SOS. Este es también el orden en el que se les llama, por lo que codifica en consecuencia.
carga()
Llamado una vez en la carga. Debe contener información sobre la aplicación.
TextInput (char)
Opcional. 'Char' es un personaje escrito y formateado correctamente. Por ejemplo, si sostiene 'Shift' y presiona 'A', esta función llamará con el argumento 'A'. Útil para una fácil escritura.
KeyPress (clave, representante)
Opcional. 'Key' es el nombre de una clave. 'Rep.' Es si la llamada se debe a la clave que se repite sin liberarla, al igual que si mantiene una llave en un cuadro de chat y se trata de una letra, hace una pausa y luego repite ese carácter. Esto se define por su sistema operativo real y puede ignorarse ignorando la llamada si 'Rep.' Es cierto.
KeyRelease (clave)
Opcional. 'Key' es el nombre de una clave. Esta función se llama si se libera una clave.
garrapata()
Llamado a cada tic. Todavía tiene acceso al lienzo de Last Cycle, por lo que api.g.get () seguirá funcionando.
El lienzo se restablece después de tick () y antes de dibujar ().
Dibujar (ancho, altura)
Llamó después de cada tic. Ahora es el momento de dibujar cosas sobre el lienzo para mostrar. 'ancho' y 'altura' son argumentos para el ancho y la altura de lienzo actuales.
Esta es una plantilla: https://hastebin.com/iqukigiril.lua No hace nada más que configurar la aplicación.
La aplicación debe comenzar con 'Local App = {}' y terminar con 'return (App)'. Todas las funciones deben comenzar con 'APP.', Como 'App.Load ()' o 'App.CustomFunction ()'.
Las aplicaciones deben colocarse en el / Programas / Carpeta de SOS. Se detectarán automáticamente.