diff options
Diffstat (limited to 'TemplePushing.c4s/Locals.c4d/Sonne.c4d')
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt | 17 | ||||
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt | 11 | ||||
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt | 1 | ||||
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt | 1 | ||||
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png | bin | 0 -> 48292 bytes | |||
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt | 2 | ||||
| -rw-r--r-- | TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c | 191 |
7 files changed, 223 insertions, 0 deletions
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt new file mode 100644 index 0000000..03847bb --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt @@ -0,0 +1,17 @@ +[Action] +Name=SeiBrav +Procedure=FLOAT +Length=1 +Delay=1 +EndCall=TuWasBraves +NextAction=SeiBrav +Facet=0,0,192,192,-96,-96 + +[Action] +Name=IchWillNurSpielerZaehlen +Procedure=FLOAT +Length=1 +Delay=10 +FacetBase=0 +EndCall=PruefeAlleSpieler +NextAction=IchWillNurSpielerZaehlen
\ No newline at end of file diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt new file mode 100644 index 0000000..0781943 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt @@ -0,0 +1,11 @@ +[DefCore] +id=SONE +Version=4,9,8 +Name=Sun +Category=C4D_StaticBack|C4D_Environment +MaxUserSelect=1 +Width=1 +Height=1 +Offset=-1,-1 +Picture=192,0,64,64 +BlitMode=1 diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt new file mode 100644 index 0000000..e2177c9 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt @@ -0,0 +1 @@ +Die Sonne. Sie scheint und zieht über den Himmel.
\ No newline at end of file diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt new file mode 100644 index 0000000..d99b86e --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt @@ -0,0 +1 @@ +The sun shines and wanders across the sky.
\ No newline at end of file diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..62add4d --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt new file mode 100644 index 0000000..e88af87 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Sonne +US:Sun diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c new file mode 100644 index 0000000..ded97c5 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c @@ -0,0 +1,191 @@ +/*-- Sonne --*/ + +#strict + +local SonneX, SonneY; + +func IsLight() { return(1); } + +// Initialisierung +protected func Initialize() +{ + // In den Hintergrund mit dir. + SetCategory(C4D_StaticBack()|C4D_Background()); + // Action setzen + SetAction("SeiBrav"); + // Nur für den Herrn und Meister sichtbar + SetVisibility (VIS_Owner(), this()); + if(!FindObject(GetID())) + // Das erste Sonnen-Objekt prüft nur, dass jeder Spieler auch sein Umweltobjekt hat + { + SetOwner(-1,this()); // Unparteiisch sein! + SetCategory(1,this()); // Nicht bewegen + SetAction("IchWillNurSpielerZaehlen"); + return(); + } +} + +// Sucht einen Spieler, der keine Sonne hat (-1 für Erfolglos) +private func FindeFreienSpieler() +{ + for(var i=0; i<16; ++i) + if(GetPlayerName(i)&&(!FindObjectOwner(GetID(),i))) + return(i); + return(-1); +} + +// Prüft alle Spieler durch, ob denn auch jeder seine Sonne hat +protected func PruefeAlleSpieler() +{ + var FreierSpieler; + while((FreierSpieler=FindeFreienSpieler())!=-1) + ErstelleLenseflare(FreierSpieler); +} + +// Erstellt eine Sonne und weist ihm einen Besitzer zu +private func ErstelleLenseflare(FuerDiesenSpieler) +{ + CreateObject(GetID(),0,0,FuerDiesenSpieler); +} + + +// Von "SeiBrav" aufgerufen +protected func TuWasBraves() +{ + // Bei vorhandenem Lenseflare (mit integrierter Sonne) kann dieses Objekt gelöscht werden + if(ObjectCount(LENS)) + { + RemoveObject(this()); + return(); + } + // Hat es seinen Besitzer verloren? :( + if((!GetPlayerName(GetOwner())) || GetOwner()==-1) + { + RemoveObject(this()); + return(); + } + // Sonnenposition anpassen + BerechneSonne(); + SetPosition(SonneX,SonneY); + // Nachts ausblenden + if(IsDay()) + SetVisibility (VIS_Owner()); + else + SetVisibility (VIS_None()); + // Sofern der Spieler alleine ist, blenden + var VektorDist=GibVektorDist(GetOwner()); + if(GetPlayerCount()==1) + if(IsDay()) + { + var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg" + SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000), + RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128), + RGB(255,255,255), GammaRampe_Lenseflare()); + } +} + +// Interner Kruscht! +// Bildschirmmittelpunkt +private func GibMittelpunktX(iSpieler) +{ + if(IsNetwork()) + return(GetX(GetCursor(iSpieler))); + else + return(GetPlrViewX(iSpieler)); +} + +private func GibMittelpunktY(iSpieler) +{ + if(IsNetwork()) + return(GetY(GetCursor(iSpieler))); + else + return(GetPlrViewY(iSpieler)); +} + +// Sonnenkoordinate +private func BerechneSonne() +{ + BerechneSonneX(); + BerechneSonneY(); +} +private func BerechneSonneX() +{ + var ZeitObjekt = FindObject(TIME); + if(!ZeitObjekt) + SonneX = LandscapeWidth() / 2; + else + { + // Da die Winkelangaben aufgrund ihres Integer-Wesens zu ungenau für eine schöne Laufbahn sind + // muss hier getrickst werden. Über Sin/Cos werden die Eckpunkte eines n-Ecks errechnet, auf den Linien + // dazwischen fährt dann die Sonne. + var Winkel = GibTageszeit()*360/100 +90; + var VonEck = LandscapeWidth()/2+Cos(Winkel,LandscapeWidth()/2); + Winkel = (GibTageszeit()+1)*360/100 +90; + var ZuEck = LandscapeWidth()/2+Cos(Winkel,LandscapeWidth()/2); + // Wieviele Ticks verstreichen während einem "Punkt" bei Tageszeit? + // Sprich: Wieviele Zwischenschritte liegen zwischen VonEck und ZuEck? + var Zwischenschritte = PrivateCall(ZeitObjekt,"TimeResolution") / 100; + // Schrittweite in 1/100000 Pixel + var Schrittweite = (ZuEck-VonEck)*100000 / (Zwischenschritte*TIME_Tick()); + // Wieviel TIME-Ticks sind seit der letzten "vollen" Tageszeit vergangen? + var Vergangen = Local(1, ZeitObjekt) - GibTageszeit()*100; + Vergangen=Vergangen*TIME_Tick()+FrameCounter()%10; + SonneX = VonEck + (Vergangen*Schrittweite)/100000; // 100000 = 100000 wegen der 1/100000 Schrittweite + } +} + +private func BerechneSonneY() +{ + var ZeitObjekt = FindObject(TIME); + if(!ZeitObjekt) + SonneY = 150; + else + { + // Da die Winkelangaben aufgrund ihres Integer-Wesens zu ungenau für eine schöne Laufbahn sind + // muss hier getrickst werden. Über Sin/Cos werden die Eckpunkte eines n-Ecks errechnet, auf den Linien + // dazwischen fährt dann die Sonne. + var Winkel = GibTageszeit()*360/100 +90; + var VonEck = GetHorizonHeight(0)-Sin(Winkel,300)-50; + Winkel = (GibTageszeit()+1)*360/100 +90; + var ZuEck = GetHorizonHeight(0)-Sin(Winkel,300)-50; + // Wieviele Ticks verstreichen während einem "Punkt" bei Tageszeit? + // Sprich: Wieviele Zwischenschritte liegen zwischen VonEck und ZuEck? + var Zwischenschritte = PrivateCall(ZeitObjekt,"TimeResolution") / 100; + // Schrittweite in 1/100000 Pixel + var Schrittweite = (ZuEck-VonEck)*100000 / Zwischenschritte; + Schrittweite/=TIME_Tick(); // Jedes Time-Tick besteht aus 10 einzelnen Ticks + // Wieviel TIME-Ticks sind seit der letzten "vollen" Tageszeit vergangen? + var Vergangen = Local(1, ZeitObjekt) - GibTageszeit()*100; + Vergangen=Vergangen*TIME_Tick()+FrameCounter()%10; + SonneY = VonEck + (Vergangen*Schrittweite)/100000; // 100000 = 100000 wegen der 1/100000 Schrittweite + } +} + +private func TIME_Tick() +{ + return(10); +} + +private func GibTageszeit() +{ + var ZeitObjekt = FindObject(TIME); + if (!ZeitObjekt) return(-1); + return(Local(1, ZeitObjekt)*100/PrivateCall(ZeitObjekt,"TimeResolution")); // 0-100=Mittag-Mittag +} + +private func GibVektorDist(iSpieler) +{ + return(Distance(GibMittelpunktX(iSpieler),GibMittelpunktY(iSpieler),SonneX,SonneY)); +} + +// Bodenhöhe. Aus dem Schmetterling übernommen und aktuelle Syntax und global gemacht und so. k? +private func GetHorizonHeight(iX) +{ + var iY = - GetY(); // Zu globaler Koordinate wandeln + iX -= GetX(); // Zu globaler Koordinate wandeln + while ( (iY<LandscapeHeight())&&(!GBackSemiSolid(iX,iY))) + { + iY+=10; + } + return(iY+GetY()); +}
\ No newline at end of file |
