From a8c63728d0999cb78b6086e5fc2dc2e8c78b4659 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 19 Feb 2005 00:46:18 +0000 Subject: [PATCH] Import doc/ from train thinking. --- doc/arch.txt | 140 ++++++++++++++++++++++++++++++++++++++++++++++++ doc/mockup1.png | Bin 0 -> 7457 bytes 2 files changed, 140 insertions(+) create mode 100644 doc/arch.txt create mode 100644 doc/mockup1.png diff --git a/doc/arch.txt b/doc/arch.txt new file mode 100644 index 0000000..60b6c2a --- /dev/null +++ b/doc/arch.txt @@ -0,0 +1,140 @@ +Arkitektur +========== + +- Nettleserklienter, antageligvis Windows, hva nå folk har +- Linux-server + - Apache + - PostgreSQL (overkill? galt verktøy?) + - C++ med OpenGL, mot projektor + - Perl (CGI.pm, Template.pom) +- Lavhastighets Ethernet, evt. WLAN + +Use case +======== + +1. Snute får 9983 på Max 300. +2. draconia dytter inn i webinterfacet (i Snutes gruppe, som han + har oppe) at Snute har valgt Max 300 som selvvalgt sang, og fikk 9983 + på den. +3. Webinterfacet oppdaterer PostgreSQL, og HUPer projektordæmonen. (Dette er + ikke et bokstavelig SIGHUP, vi fikser det antageligvis med en socket der + bare en får snakke av gangen, e.l..) +4. Projektordæmonen kaller refresh_data() på alle subscreens. +5. Subscreens som merker endret data, legger til et element på sin + aktivitetsliste (hvis ting skal gjøres fancy), eller invaliderer seg + selv totalt (hvis supersystemet skal gjøre evt. overganger). Eksempler: + + 5.1. Subscreenen for Snutes gruppe lager en fancy effekt (evt. bare + skriver ett og ett siffer :-) ) der scoren hans detter på plass, + og evt. neste spiller highlightes. (Dette kan være to helt separate + aktiviteter...) Hvorvidt denne aktiviteten skal hardkodes på noe + vis eller om man skal ha et scenegraphsystem og f.eks. lua er ikke + bestemt ennå, evt. kan vi bare gå for ren invalidering (se neste + punkt). + 5.2. Subscreenen for "dagens beste scores" invaliderer seg selv, da den + ser at top5-lista har endret seg. Supersystemet spawner den på nytt, + pusher prioriteten på den nye opp (fordi den inneholder ny info) og + drar den med inn i rotasjonen neste gang. (Rationale: Vi har ikke + kapasitet til å lage fancy endringsfunksjoner for alskens rare + situasjoner, like greit bare å lage litt fades her og der og ha et + enhetlig system for å ordne det.) + + I begge tilfelle kan vi legge en rød ramme rundt (blinkende?) for å + signalisere ny informasjon, f.eks. første gang en skjerm vises. +6. refresh_data() returnerer en liste over alle nylig spawnede skjermer. +7. draconia gis feedback ved at "nylig spawnede screens" (fra refresh_data) + kommer opp på skjermen slik at han kan se hva som er skjedd. +8. Tilbake til punkt 1, antageligvis. + +Typer screens i projektordæmonen +================================ + +Terminalscreens: + +Alle terminalscreens rendrer til en tekstur (640x480? 1024x768? Trenger den +overhodet å vite noe om det? Noe power-of-2?) slik at grenscreens kan fade +mellom dem o.l. etter behov. (Det er ikke "terminal" som i "xterm", det er +terminal som i "avsluttende", da en terminalskjerm ikke kan ha noen barn.) + +1. Gruppescreen + - Viser spillere i gruppa, med scores og selvvalgte sanger + (plassproblem?) + - Viser hvem som er neste, og evt. hvor mye som skal til for å gå + videre/vinne gruppa. (Nederst er kanskje best her, vi har ikke så + mye å gå på i bredden.) +2. Dagens fem beste scores. (Ren score, standardavvik.) +3. Tidligere spilte grupper. +4. Video-input? +5. PG-reklame e.l. +6. Sjekk innspill fra draconia her. + +Grenscreens: + +1. Splitscreen (rommultipleksing). + - Alle logiske splittkonfigurasjoner (mao. MxN). + - Statisk oppdeling, må invalideres om man skal endre konfigurasjonen? +2. Rotasjon (tidsmultipleksing). + - Har flere skjermer, organisert etter prioritet. Nye skjermer har mer + prioritet, utover det går det på round-robin. Vi må passe på her så + det blir en logisk rekkefølge av ting med lik prioritet (tidligere + grupper burde f.eks. sorteres etter gruppenummer, dette kan vi løse + helt OK med bare en "global prioritet" vi reverter til når vi er på + slutten av lista og ikke har ny info som skal vises). + - Fader mellom skjermene i et gitt tidsintervall. + - Viser "n/N" nederst (tekst-TV følgesider). + - Også nyttig for bare én terminalskjerm, som sørger for å fade til en + ny skjerm når den gamle invalideres. +3. Overlays. + - Alle terminalscreens burde sette destination alpha riktig, ergo er det + bare å tegne teksturene oppå hverandre i rekkefølge. + +Typisk tilfelle: + +rotation(inf,0.5) // ytterste hovedvindu, kan ikke fjernes + split(2,2) // hovedvindu, 2x2 + rotation(inf,0.5) // gruppe 3 + group(3) + rotation(inf,0.5) // gruppe 4 + group(4) + rotation(inf,0.5) // gruppe 5 + group(5) + rotation(10,1.0) // diverse nederst til høyre + topscores() // dagens beste + group(1) // tidligere grupper + group(2) + image(pglogo.png) + + +Grafen her ordnes antageligvis også av webinterfacet på noe vis, som sørger +for å splitte og ordne etter behov. Trikset her er å få i stand best mulige +primitiver mellom Perl og C++ over socketen; her må man nok tenke mer. + +Beste alternativ så langt er å la en manuell operatør ta seg av rendergraphen +i et språk lignende det over. Tanker: + +- Det at en node invaliderer seg selv og det spawnes en kopi (ikke veldig + vanskelig å gjøre, antageligvis) er et spesialtilfelle. Det er omtrent + den eneste operasjonen man trenger å gjøre automatisk som respons på input + av scores utenfra, og det er alltid én node som fjernes og én (lik) node + som legges til på samme sted. +- Vi får ganske mye gratis om vi navngir alle nodene våre. Da kan vi håndtere + endringer o.l. ganske greit; hvis en node har samme navn og samme innhold + beholdes objektet, hvis ikke destrueres det og et evt. nytt lages. Type: + + group3: group(3) + group3_rot: rotation(inf,0.5) group3 + mainsplit: split(2,2) group3,group4,group5,misc + +- Et system ala det over er lett å bygge ut til noe som automatisk lager + graftreet. +- Vi trenger ikke å løse alle verdens problemer på en gang. Det er sikkert + veldig fancy å ha splitscreens som ekspanderer og trekker seg sammen o.l., + men når du får for mange parameterendringer på en gang blir det fort knot. + Det er et reellt alternativ å lage en funksjon som sier "her har du nye + parametre, oppdatér deg selv hvis du kan, ellers returner false og jeg lager + en ny". rotation() kan håndtere denne situasjonen rimelig lett (oppdater + parametre, hent inn alle nye noder, fade til neste (hva er neste?), kast + ut alle gamle), split() vil nok ha mye mer problemer, men det er + funksjonalitet man evt. kan legge til seinere. Dersom man faktisk lager en + ny, må kanskje foreldrenoden få beskjed slik at den kan fade e.l. :-) + diff --git a/doc/mockup1.png b/doc/mockup1.png new file mode 100644 index 0000000000000000000000000000000000000000..35834a8e62224e042db1c67a0c95f00314959118 GIT binary patch literal 7457 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