[Maniascript] Question pour les developpeurs

Parlez de tout ce qui est lié à Shootmania.

Moderator: French Moderator

Post Reply
blaize
Posts: 20
Joined: 15 Mar 2013, 23:24

[Maniascript] Question pour les developpeurs

Post by blaize »

Bonjour,
Je suis actuellement en train de me pencher sur le maniascript pour faire un mode de jeux.
Je commence à bien comprendre comment cela fonctionne mais j'ai besoin de petites précisions :
Comment affiche t'on un sprite sur l'UI ? J'ai recuperer du code du mode Rabbit, voila ce que ça donne, mais ca ne fonctionne pas (rien n'apparait) :

Code: Select all

#Const C_ImgBaseDir		"file://Media/Manialinks/Shootmania/Common/"

Code: Select all

Text CreateFlag() 
{
	declare Vec3 RedColor	= <1., 0., 0.>;
	declare Vec3 BlueColor	= <0., 0., 1.>;
		
	declare Text ImgPoleEngageLeft 	= C_ImgBaseDir^"shield_left.dds";
	declare Text ImgPoleEngageRight	= C_ImgBaseDir^"shield_right.dds";
	
	declare Real WidthFactor = 9./16.;
	declare Real EngagePoleImgSize = 7.;
		
	declare Text MLPage;
	
	MLPage = """
			<frame id="Flag" >
				<frame id="EngagePoleFrame">
					<quad posn="-0.1 0." halign="center" valign="center" sizen="{{{WidthFactor*EngagePoleImgSize}}} {{{EngagePoleImgSize}}}" image="{{{
						ImgPoleEngageLeft}}}" colorize="{{{RedColor.X}}} {{{RedColor.Y}}} {{{RedColor.Z}}}" autoscale="False" />
					<quad posn="0.1 0." halign="center" valign="center" sizen="{{{WidthFactor*EngagePoleImgSize}}} {{{EngagePoleImgSize}}}" image="{{{
						ImgPoleEngageRight}}}" colorize="{{{BlueColor.X}}} {{{BlueColor.Y}}} {{{BlueColor.Z}}}" autoscale="False" />
				</frame>
			</frame>""";
	return MLPage;
}

Code: Select all

// Create the markers
	declare LayerFlag <=> UIManager.UILayerCreate();
	LayerFlag.Type = CUILayer::EUILayerType::Markers;
	LayerFlag.ManialinkPage = CreateFlag();
	
	UIManager.UIAll.UILayers.add(LayerFlag);

Code: Select all

declare Vec3 FlagPos = Players[HighlightedPlayers[Clan]].Position; //HighlightedPlayers[Clan] == Ident
			MarkerText ^= """<marker manialinkframeid="Flag" pos="{{{FlagPos.X}}} {{{FlagPos.Y}}} {{{FlagPos.Z}}}" />""";
			MarkerText ^= """<marker manialinkframeid="Flag" playerlogin="{{{Players[HighlightedPlayers[Clan]].User.Login}}}" />""";
UIManager.UIAll.Hud3dMarkers = MarkerText;
Je pense qu'il doit y avoir une erreur bête, si quelqu'un pouvais m'expliquer comment faire, j'en serai reconnaissant. Et je pense que sa pourra servir au autres personne qui vont lire ce post.

Merci.
User avatar
Emilieng
Posts: 70
Joined: 17 Dec 2012, 13:13
Contact:

Re: [Maniascript] Question pour les developpeurs

Post by Emilieng »

Salut !

Je vois 2 soucis potentiels avec le code que tu as envoyé.
1. Tu utilises la même frame de manialink pour deux markers différents (manialinkframeid="Flag")
2. Tu affiches le marker au dessus d'un joueur.

Que cherches-tu à faire exactement ?
La ligne

Code: Select all

MarkerText ^= """<marker manialinkframeid="Flag" pos="{{{FlagPos.X}}} {{{FlagPos.Y}}} {{{FlagPos.Z}}}" />""";
signifie que tu veux afficher la frame d'id "Flag" à une position fixe dans l'espace (celle donnée par le vecteur FlagPos au moment de la construction)

La ligne

Code: Select all

MarkerText ^= """<marker manialinkframeid="Flag" playerlogin="{{{Players[HighlightedPlayers[Clan]].User.Login}}}" />""";
signifie que tu veux afficher la frame d'id "Flag" au dessus du joueur Players[HighlightedPlayers[Clan]] (et la frame va le suivre).

Je te déconseille fortement d'utiliser les mêmes frames de manialink pour deux markers différents. S'il t'en faut vraiment deux, crée plutôt deux frames d'id "Flag1" et "Flag2".
Sinon, reconstruis les markers au moment où tu veux que le "Flag" arrête de suivre un joueur.

Par ailleurs, il est fort possible que, s'il n'y a qu'un joueur dans ta map de test, HighlightedPlayers[Clan] soit "toi", et donc le marker est au dessus de ta tête :) ... et du coup il n'est pas affiché.
Essaye dans un premier temps d'afficher le marker à un endroit fixe, par exemple avec

Code: Select all

MarkerText = """<marker manialinkframeid="Flag" pos="0 0 0" />""";
Ensuite, relance ton test avec des fake players (après le ***StartMap***)

Code: Select all

Users_SetNbFakeUsers(1, 1);
mais en n'utilisant qu'un seul marker

Code: Select all

MarkerText = """<marker manialinkframeid="Flag" playerlogin="{{{Players[HighlightedPlayers[Clan]].User.Login}}}" />""";
blaize
Posts: 20
Joined: 15 Mar 2013, 23:24

Re: [Maniascript] Question pour les developpeurs

Post by blaize »

Merci pour cette réponse detaillée.
Effectivement, ce que tu dis à beaucoup de sens, j'essayerai de modifier pour tester ce soir.
Ce que j'essaye de faire, c'est un mode capture the flag. L'idée c'est d'afficher une image de drapeau par equipe à l'endroit où est le drapeau. Il peut être au sol, ou sur un joueur. J'ai besoin de 2 images differentes, une pour chaque team.
Outre l'envie d'achever cela, j'ai aussi envie de bien comprendre le fonctionnement du Maniascript.
Donc merci pour cette réponse complète. Je posterai l'avancement des resultats quand je ferai les modifications!

Tiens, tant qu'on y est, il y a t'il un moyen de carrément créer une entité 3D soumis au loi physique du moteur ?
User avatar
Emilieng
Posts: 70
Joined: 17 Dec 2012, 13:13
Contact:

Re: [Maniascript] Question pour les developpeurs

Post by Emilieng »

Merci à toi pour ce mode que tu nous prépares :thumbsup:

Personnellement je privilégierais l'approche avec une frame par équipe (manialinkframeid="FlagClan1" et manialinkframeid="FlagClan2"), et un reconstruction de la chaîne des markers au moment où le flag est capturé ou posé. Mais c'est à toi de voir ^^
Tiens, tant qu'on y est, il y a t'il un moyen de carrément créer une entité 3D soumis au loi physique du moteur ?
Non, on ne peut pas créer d'objets physiques.
blaize
Posts: 20
Joined: 15 Mar 2013, 23:24

Re: [Maniascript] Question pour les developpeurs

Post by blaize »

Ok dommage, ça aurai été cool que le flag puisse être deplacé au sol pour eviter que l'ennemi l'attrape!
Il y as peut être un moyen de recuperer la position et velocity des projectiles ?
Merci du conseil, j'essayerai de faire comme tu as dis.
blaize
Posts: 20
Joined: 15 Mar 2013, 23:24

Re: [Maniascript] Question pour les developpeurs

Post by blaize »

Hello,
Bon, apres multiples tests, dont ceux que Emilieng m'as recomandé, cela ne fonctionne toujours pas. J'ai reussi à afficher les markers sur le viseur en fixe, mais je n'arrive pas à les positionner dans un repere 3D.
A noté que lorsque je replace manialinkframeid="FlagRed" par text="Flag", j'ai bien le texte qui s'affiche dans le repere 3D.
Je pense que je n'ai pas bien compris le fonctionnement des UI layers, il doit me manquer quelque chose de capitale à ce niveau là. Quelqu'un pourrais t'il me faire un court résumé des possibilité des UI Layers avec les class UIManager, UIPlayers, ect...
Il y a t'il un moment crucial pour le refresh des layers ou c'est automatique ?

Merci
Post Reply

Return to “Shootmania”

Who is online

Users browsing this forum: No registered users and 0 guests