Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
30.06.2008, 12:07
Luketep



Hey Leute,

ich will ne Uhr ins Hud einbauen, etwa wie bei CS. Hat jemand nen Ansatz?

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
001
30.06.2008, 14:20
feigling



Wüsste zwar nicht, wo CS ne Uhr hat aber ok ...
Du gehst dabei vor wie bei allen anderen Hud Elementen. Wenns ne richtige Uhr sein soll, nimmst du einfach time(NULL) und benutzt strftime() und zeichnest die Werte ins HUD.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
02.07.2008, 14:25
Luketep



bei cs ist ne uhr in form eines digitalen timer der die rundenzeit angibt...

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
003
02.07.2008, 14:44
feigling



Wäre mir neu, dass man sowas Uhr nennt. Ich nenne es Countdown ~

--

zum Seitenanfang zum Seitenende Profil || Suche
004
03.07.2008, 00:43
Luketep



Anstatt darüber zu diskutieren ob das nun Countdown, Zähler, Timer, Counter, Uhr oder sonst wie heißt könntest du vielleicht lieber schreiben, ob du dafür einen Lösungsansatz hast.

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
005
03.07.2008, 01:18
feigling



Steht doch da, "wie" du es machst.

"Du gehst dabei vor wie bei allen anderen Hud Elementen." und wie du das machst, steht sicherlich (und da bin ich 100%ig sicher) irgendwo auf der Developer Seite von Valve zu dem HL2 SDK.

Was erwartest du mehr bei nem Lösungsansatz?

* Schauen, wie man Sachen aufs GUI zeichnet (gibts haufenweise Tutorials)
* Schauen, an welchen Stellen im Code man am Besten den Counter reinpacken könnte (möglichst irgendwas, was pro Sekunde getriggert wird) (selber mal die Dateien durchforsten, ja ich weiß, Eigeninitiative suckt aber ..)
* Vielleicht auch überlegen, ob man den Counter nicht zu einem env_counter/info_counter macht, also ein eigenes Entity, wo man direkt in der Map den Countdown einstellen kann und was danach getriggert wird. Dürfte 10 mal einfacher sein ein eigenes Entity zu erstellen und dort think() jede Sekunde aufzurufen als im Code rumzusuchen, wo man den Counter am Besten reinpacken könnte (gibts auch zu Hauf Tutorials zum Erstellen von Entities)

Und jetzt sag mir nicht, dass du auf sowas nicht selber kommen würdest. Dass dir hier niemand den fertigen Code zum Copy&Paste angibt, dürfte ja klar sein.

Ein Lösungsansatz kann alles oder nichts sein also wenn du was konkretes wissen willst, wie man was macht, stell konkrete Fragen, wobei ich nicht wüsste, welche Fragen man hierzu noch stellen kann, weil es für alles Tutorials gibt. Würde mich sehr wundern, wenns nicht sogar ein Countdown/Rundensystem Tutorial zum Copy&Paste irgendwo gibt.

Eigentlich wollte ich noch auf das alte Tutorial für Hl1 von resourcecode verlinken, aber das scheint down zu sein, merk ich gerade .. schade

--

zum Seitenanfang zum Seitenende Profil || Suche
006
03.07.2008, 01:46
Bluthund



3sek Suche:
http://developer.valvesoftware.com/wiki/Basic_Hud_Modification
Für weitere Recherche:
http://developer.valvesoftware.com/wiki/Category:VGUI

Und dass nen Timer jede Sekunde um Eins erhöht wird und ne Minute 60 Sekunden hat, solltest du wohl auch selbst wissen... als Student des Game-Designs ._.
Wie du Zahlen in nem VGUI-Element ausgibst, kannst du den Elementen für Health, Armor und/oder Ammo entnehmen, wo ist also das Problem?!
Die Logik am Server packst du in die Gamerules oder wie schon vorgeschlagen in nen extra Entity (falls mehr Dynamik gewünscht).
Wie feigling schon richtig gesagt hat: Selbst ist der Mann.

@feigling: Jo rescode ist schon seit einiger Zeit weg vom Fenster. Die Domain scheint auch den Besitzer gewechselt zu haben.

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 03.07.2008 um 01:51 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
007
03.07.2008, 11:42
Luketep



@feigling: Hey danke erstma für die längere antwort. Ich erwarte durchaus nicht das jemand hier fertige Dinge postet, das wäre ja langweilig. Die Sache ist das ich erst seit kurzem mit der Soruce Engine arbeite und bissl zeitdruck habe. Falls ich etwa forsch rüber kam, sorry :)
Hast du vielleicht ne Liste mit ein paar Tutorial-seiten? Ich kenn nur developer.valvesoftware.

@bluthund: ja die links kenn ich auch, danke. Die Sache mit den zahlen im VGUI ausgeben kenn ich noch net, da ich wie eben erwähnt er seit kurzem mit dem Source-Code arbeite... wäre nett wenn du da mal nen Link oder ne kurze Anmerkung zu schreibst.

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
008
03.07.2008, 13:55
Bluthund



Links:
game/client/hl2/hud_ammo.cpp (andere gute Beispiele hud_health.cpp und hud_battery.cpp)
game/client/hud_numericdisplay.[h|cpp]

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 03.07.2008 um 13:59 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
07.07.2008, 10:42
Luketep



Hey, ich nutze die von HL2 vordefinierte Funktion:

CHudNumericDisplay::PaintNumbers(HFont font, int xpos, int ypos, int value)

nur leider weiß ich nicht welche Font ich angeben muss und wurde auch im Internet bisher nicht fündig, weil es immer heißt, das es eigentlich keine richtige Font gibt, da die von Valve irgendwo versteckt ist.

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
010
07.07.2008, 12:28
PotKinRot



Du könntest einfach die Suchfunktion nutzen und den Namen der Methode suchen, da kommt vllt eine Anwendung mit Parametern bei raus.

€:
Quellcode:C:\Steam\steamapps\***\sourcesdk_content\display\src\cl_dll\hud_numericdisplay.cpp(145):                
PaintNumbers(m_hNumberGlowFont, digit_xpos, digit_ypos, m_iValue);
  C:\Steam\steamapps\***\sourcesdk_content\display\src\cl_dll\hud_numericdisplay.cpp(153):                
PaintNumbers(m_hNumberGlowFont, digit_xpos, digit_ypos, m_iValue);
  C:\Steam\steamapps\***\sourcesdk_content\display\src\cl_dll\hud_numericdisplay.cpp(162):        
PaintNumbers(m_hSmallNumberFont, digit2_xpos, digit2_ypos, m_iSecondaryValue);
Keine Garantie, ob das so funktioniert, von Coden hab ich relativ wenig Ahnung.

--


Dieser Beitrag wurde am 07.07.2008 um 12:29 von PotKinRot bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
07.07.2008, 13:09
Luketep



Das hilft mir leider nicht weiter, da ich eigentlich wissen will, was man anstelle von "HFont font" eintragen muss, wenn man die Funktion benutzt.

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
012
07.07.2008, 13:18
Bluthund



Hast du mal ne Sekunde drüber nachgedacht warum die Methode da protected ist?
Und wenn du dir mal die Suchergebnisse von PotKinRot angekuckt hättest, hättest du spätestens merken müssen, dass die Funktion von innerhalb der Klasse bereits an mehreren Stellen (innerhalb von Paint()) aufgerufen wird.

CHudNumericDisplay::SetDisplayValue(int value)
Anschließend zeichnen.

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-

zum Seitenanfang zum Seitenende Profil || Suche
013
22.07.2008, 09:45
Luketep



Okay, ich hab mal veruscht was einzubinden... ABer ich bekomme immer nen Compiler Error.

Code:
int x_posi = 350;
int y_posi = 350;
int countdown = 180;

// "NumberGlowFont"

// DISPLAY COUNTDOWN TIMER
PaintNumbers("NumberGlowFont", x_posi, y_posi, countdown);

Error:
1>.\timer.cpp(23) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>.\timer.cpp(23) : error C2078: too many initializers

Ich habe schonmal probiert den Funktion so zu nutzen:
CHudNumericDisplay::PaintNumbers...

Aber das war auch nicht dei Lösung. Anscheinend erwartet er Irgendwo eine INT , wo ich keine habe. Aber das kann eigentlich nur die Font sein. Wenn ich da aber ne INT setzte kommt der selbe Fehler...

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
014
22.07.2008, 10:29
luckerking



CHudNumericDisplay::PaintNumbers(HFont font, int xpos, int ypos, int value)
PaintNumbers("NumberGlowFont", x_posi, y_posi, countdown);

Ich denke als ersten Parameter erwartet er ein HFont keinen String.

Z.B.
PaintNumbers(m_hSmallNumberFont, digit2_xpos, digit2_ypos, m_iSecondaryValue);
Jetzt muss du nur gucken was m_hSmallNumberFont ist.

--

zum Seitenanfang zum Seitenende Profil || Suche
015
22.07.2008, 10:42
Luketep



ich habe im code schonmal nach den HFonts gesucht, bzw. nach den Platzhaltern, wie m_hSmallNumberFont. Aber da kam nie iene Definition... :/

--

www.silent-wars.de

be water
holiday from hapiness

zum Seitenanfang zum Seitenende Profil || Suche
016
22.07.2008, 11:59
Bluthund



Zitat:
Luketep postete
ich habe im code schonmal nach den HFonts gesucht, bzw. nach den Platzhaltern, wie m_hSmallNumberFont. Aber da kam nie iene Definition... :/
Was ist deiner Meinung das hier:
Quellcode:CPanelAnimationVar( vgui::HFont, m_hSmallNumberFont, "SmallNumberFont", "HudNumbersSmall" ); Präprozessor-Makros sollte man schon verstehen können, wenn man am HL/SourceSDK herumwerkt.

Zitat:
missing type specifier - int assumed. Note: C++ does not support default-int
Dieser Fehler weist darauf hin, dass der Typspezifizierer fehlt (gern auch als Rückgabetyp betitelt). Du wirst "PaintNumbers("NumberGlowFont", x_posi, y_posi, countdown);" wahrscheinlich irgendwo global hingepinselt haben, womit CPP natürlich nicht davon ausgeht, dass es sich um einen Funktionsaufruf handelt.
Zitat:
too many initializers
geht damit einher.

Zitat:
selfquote:
CHudNumericDisplay::SetDisplayValue(int value)
Anschließend zeichnen.
Das ist alles was du tun musst um Zahlen zu pinseln

--

The C language combines all the power of assembly language with all the ease-of-use of assembly language.
"humorig is n blödwort :>" by -CarniGGeLjumpR-


Dieser Beitrag wurde am 22.07.2008 um 12:04 von Bluthund bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche