Forum de la communauté SFML

Général => Suggestions de nouvelles fonctionnalités => Discussion démarrée par: L01man le Mai 01, 2012, 09:42:55 pm

Titre: Un peu plus de Vector2
Posté par: L01man le Mai 01, 2012, 09:42:55 pm
Les Vector2 sont beaucoup utilisés pour les coordonnées, les vecteurs, etc. C'est un effort d'écriture, et d'autres auraient eu peur pour la performance, mais finalement c'est plus beau.
On trouve donc des Vector2 dans les attributs Position, Size, avec leurs accesseurs et mutateurs correspondants - j'ai vu que récemment GetWidth() et GetHeight()  avaient été remplacés par un getSize() dans Image dans SFML2 -, mais pas dans une seule classe : Rect ! Elle est définie avec left, top, width, height. Du coup, on perd l'avantage du tout-Vector2, et on doit faire setPosition(unRect.left, unRect.top) au lieu de setPosition(unRect.topLeft) par exemple. Pourquoi ne pas créer un rectangle à partir d'un point Position ou TopLeft et d'un autre Size ? RectangleShape le fait.
D'autre part, devrait-on systématiquement conserver deux fonctions de de type int, int pour l'une et Vector2 pour l'autre, comme on le voit dans setPosition, setScale, setOrigin, setCenter et move ? Je pense que ça encourage plutôt à utiliser des coordonnées séparées partout, et à ce moment-là on recommence à créer des Vector2 et à en extraire les coordonnées en permanence, ce qui allonge le code.  Laurent, tu disais :
Citer
toi tu voudrais du minimalisme (pourquoi faire ?) alors que moi je privilégie les noms explicites et qui s'auto-documentent.
Titre: Re : Un peu plus de Vector2
Posté par: Koryushin le Mai 01, 2012, 10:17:02 pm
Rien de t’empêche de créer toi même ces 2 fonctions.
Je l'ai fais pour les sf::Vector2 et sf::Vector3 pour leur rajouter des fonctions mathématiques ( produit scalaire, vectoriel, norme et autres)

il suffit de créer un fichier .hpp et de l'appeler à la place de SFML/Graphics/Rect.hpp
#include <SFML/Graphics/Rect.hpp>

template <class T>     
sf::Vector2<T> GetPosition(const sf::Rect<T>& rect)
{
   return sf::Vector2<T>(rect.left, rect.top);
}

template <class T>     
sf::Vector2<T> GetSize(const sf::Rect<T>& rect)
{
   return sf::Vector2<T>(rect.width, rect.height);
}
 

après il suffit d'appeler un:
- SetPosition(GetPosition(unrect));
ou
- SetSize(GetSize(unrect));

Biensur c'est qu'un exemple de ce qui est possible, mais ça gène pas trop vu que les attributs de Rect sont publics. Comme y a les 2 implémentations avec Vector2 et avec (x, y) ca me dérange pas plus que ça.
Titre: Re : Un peu plus de Vector2
Posté par: Laurent le Mai 01, 2012, 10:57:46 pm
Pour l'instant je ne vois pas d'argument contre, mais je ne pense pas m'y intéresser pour SFML 2. Donc si je décide de le faire, il faudra que ce soit de manière compatible avec l'API actuelle, sinon ça attendra SFML 3.
Titre: Re : Un peu plus de Vector2
Posté par: L01man le Mai 01, 2012, 11:00:37 pm
Je vais utiliser ton code, Koryushin :).
(http://media.telemarket.fr/imgnwprd/000/000318/00031852/00031852-t0.jpg) Yeah, une de mes propositions a été acceptée. Qu'en est-il de ma proposition d'enlever les méthodes de type set(x, y) au profit des set(vector) ?
Titre: Re : Un peu plus de Vector2
Posté par: Laurent le Mai 01, 2012, 11:13:34 pm
J'ai pas refusé, mais j'ai pas dit que j'allais le faire ;D

Retirer les fonctions(x, y), dans le principe j'aime assez, et j'ai même déjà essayé, mais je me fais immédiatement taper dessus. J'imagine que ça passera mieux dans quelques années, quand tous les compilos seront compatibles C++11 et que les gens n'auront plus besoin d'écrire sf::Vector2f(x, y) mais juste {x, y}.
Titre: Re : Un peu plus de Vector2
Posté par: L01man le Mai 01, 2012, 11:54:21 pm
C'est vrai que les sucres syntaxiques manquent beaucoup au C++. C'est l'une des grandes raisons pour lesquelles je suis souvent tenté d'aller du côté des langages "de scripts" ou fonctionnels plus souvent.
Titre: Re : Un peu plus de Vector2
Posté par: Laurent le Mai 02, 2012, 08:20:59 am
J'ai retiré [Accepté] du titre, pour deux raisons :
- personne ne met jamais ce tag
- c'est pas accepté, j'ai juste dit que je ne voyais rien contre ; même si c'était accepté ça ne se ferait pas avant plusieurs mois/années, alors...
Titre: Re : Un peu plus de Vector2
Posté par: L01man le Mai 02, 2012, 10:40:11 am
OK, j'aurai tout mon temps pour éditer le titre.