Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Thor 2.0  (Lu 12806 fois)

0 Membres et 1 Invité sur ce sujet

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Thor 2.0
« le: Mars 25, 2012, 12:07:50 pm »
[Ouvert de nouveau a cause de l'échange de forum]


Thor 2.0

Entretemps, j'ai fini d'adapter la convention de nommage et de changer quelques autres choses (liste détaillé). En deux mots, j'utilise maintenant GitHub a j'ai délocalisé une partie de Thor dans une bibliothèque autonome.

Maintenant je peux commencer à améliorer des parties différentes de la bibliothèque Thor. Pour séparer mieux du development de Thor 1, j'ai ouvert un nouveau thread. Ici, je vous informe régulièrement des nouvelles. Si vous avez des suggestions, discutez les ici s'il vous plaît :)

Links
Page web du projet Thor
GitHub
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Thor 2.0
« Réponse #1 le: Avril 08, 2012, 09:44:05 pm »
Recémment, j'ai changé l'API des modules Particles et Resources un peu.

Particles
Il y a maintenant thor::UniversalEmitter qui remplace les autres emitters. Il est capable de definir les valeurs initiales d'une particule par un constant ou une fonction.
thor::UniversalEmitter::Ptr emitter = thor::UniversalEmitter::create();
emitter->setEmissionRate( 20 );
emitter->setColor( sf::Color::Red );
emitter->setLifetime( sf::seconds(4) );

// Positionner les particules dans un cercle
emitter->setPosition( thor::Distributions::circle(center, radius) );

 // Tourner avec un angle aléatoire
emitter->setRotation( thor::Distributions::uniform(0.f, 360) );

Resources
J'ai implementé des nouvelles clés de resource et remplacé thor::ResourcePtr par std::shared_ptr.
thor::ResourceManager<sf::Texture> mgr;
thor::ResourceKey<sf::Texture> key = thor::Resources::fromFile<sf::Texture>("image.png");
std::shared_ptr<sf::Texture> ptr = mgr.acquire(key);

// ou directement
std::shared_ptr<sf::Texture> ptr =
    mgr.acquire( thor::Resources::fromFile<sf::Texture>("image.png") );

En outre, j'utilise maintenant C++11 pour Thor.
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Orwel

  • Full Member
  • ***
  • Messages: 208
    • Voir le profil
Re : Thor 2.0
« Réponse #2 le: Avril 09, 2012, 02:13:10 am »
Citer
En outre, j'utilise maintenant C++11 pour Thor.

Donc, faut mettre à jour le compilateur??? Ou une vielle version de GCC suffit???

Il peut être plus simple et naturelle de faire  :
thor::ResourceManager::aquire(std::string &str)
Cela simplifie le thor::Resources::fromFile.

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Re : Thor 2.0
« Réponse #3 le: Avril 09, 2012, 09:27:35 am »
Donc, faut mettre à jour le compilateur??? Ou une vielle version de GCC suffit???
Oui, je pense qu'il faut avoir g++ 4.6. Maintenant, une plus vieille version suffit, mais quand j'introduis nullptr, les versions avant 4.6 ne sont plus compatibles.


Il peut être plus simple et naturelle de faire  :
thor::ResourceManager::aquire(std::string &str)
Oui, mais je veux sèparer l'API de ResourceManager et des fonctions qui chargent la resource. En plus, c'est pas évident ce qu'un std::string veut dire, car sf::Shader par exemple utilise aussi des strings pour être construit, mais pas d'un fichier.

Mais si c'est trop compliqué, on peut écrire une fonction libre:
template <typename T>
std::shared_ptr<T> acquireFromFile(
    thor::ResourceManager<T>& mgr, const std::string& filename)
{
    return mgr.acquire( thor::Resources::fromFile<T>(filename) );
}
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : Thor 2.0
« Réponse #4 le: Avril 27, 2012, 10:42:42 pm »
Salut
je regarde le tuto sur les actions:
thor::Action both = a && b;Pourquoi tu overload les && et les || au lieu de & et de | ? J'aurais plutot pensé faire :
thor::Action both = a & b;

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Thor 2.0
« Réponse #5 le: Avril 28, 2012, 12:18:11 am »
Parce que les operateurs de thor::Action se comportent comme les operateurs logiques, pas comme les operateurs des bits.

L'action a && b est active quand a est active et b est active
L'action a || b est active quand a est active ou b est active
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : Thor 2.0
« Réponse #6 le: Avril 28, 2012, 01:14:38 am »
Ben euh c'est pareil avec les operateurs sur les bits non?
En fait je suis habitué à avoir && et || qui "renvoient" un booléen, et & et | qui renvoient un objet du même type que les arguments. Vu que toi ça fait le 2eme cas, je pensais que c'était plus logique d'utiliser les opérateurs de bits.
Enfin bon c'est pas important

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Thor 2.0
« Réponse #7 le: Mai 19, 2012, 08:54:59 pm »
Des nouvelles:

Il y a thor::MultiResourceCache qui peut s'occuper de plusieures types de resource. Cela veut dire qu'il ne faut plus avoir des différentes managers, un pour chaque resource (mais c'est encore possible avec thor::ResourceCache):
thor::MultiResourceCache cache;
cache.acquire( thor::Resources::fromFile<sf::Image>(...) );
cache.acquire( thor::Resources::fromFile<sf::SoundBuffer>(...) );

J'ai implementé la nouvelle API des animations. Au lieu de l'héritage et des std::shared_ptr, il y a maintenant des functors. thor::Animator est devenu un template pour permettre des IDs et des objets animés definis par l'utilisateur. Par exemple, on peut animer sf::Text et utiliser des enums au lieu des strings:
thor::Animator<sf::Text, MyEnum> animator;

La classe thor::Animation a été enlevé, maintenant tout ce qui a un operator() avec une telle signature est considéré comme animation:
void operator() (Animated& animated, float progress) const;

Cela inclut les fonctions normales et les expressions lambda, par exemple c'est possible de definir une animation reverse qui renverse une autre animation anim en utilisant une seule ligne:
auto reverse = [anim] (sf::Sprite& s, float pr) { return anim(s, 1.f - pr); };

Et l'ancien code
thor::FrameAnimation::Ptr explosion = thor::FrameAnimation::create();
explosion.addFrame(1.f, sf::IntRect(...));
explosion.addFrame(1.5f, sf::IntRect(...));

thor::Animator animator;
animator.addAnimation("expl", explosion, sf::seconds(3));
est changé à
thor::FrameAnimation explosion;
explosion.addFrame(1.f, sf::IntRect(...));
explosion.addFrame(1.5f, sf::IntRect(...));

thor::Animator<sf::Sprite, std::string> animator;
animator.addAnimation("expl", explosion, sf::seconds(3));

Le module est encore assez petit, je projètte d'implementer plus des animations (e.g. des gradients de couleur) et des primitives (renverser, concaténer).
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Légulysse Des Bois

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : Thor 2.0
« Réponse #8 le: Juin 26, 2012, 12:11:16 am »
Salut !
Je me permets un très léger apport pour ton projet^^
En cherchant à améliorer mon implémentation de FOR_EACH, je suis tombé sur ta version qui m'a aiguillé sur un truc plus simple que ma première version, ce qui m'a amené à une nouvelle version encore plus robuste. Du coup, juste retour des choses, voici mon résultat (vu qu'il me semble que Thor utilise c++11) :

#define FOR_EACH(CONTAINER, ITERATOR)       \
    for (auto ITERATOR = CONTAINER.begin();  ITERATOR != CONTAINER.end();  ++ITERATOR)

   
#define FOR_EACH_CONST(CONTAINER, ITERATOR) \
    for (auto ITERATOR = CONTAINER.cbegin(); ITERATOR != CONTAINER.cend(); ++ITERATOR)

L’intérêt par rapport à ta version est de virer un paramètre (le type de conteneur), ainsi que d'éviter un crash si le contenu de la boucle erase des elements (en ne stockant pas le end()).

genre :
std::vector<std::string> vecTest;
vecTest.push_back("A");
vecTest.push_back("B");
vecTest.push_back("C");
     
FOR_EACH(vecTest, iteCurrent)
{
    if ("B" == *iteCurrent)
        iteCurrent = vecTest.erase(iteCurrent);
}

En attendant le "vrai" ForEach de C++11  ;D

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Re : Thor 2.0
« Réponse #9 le: Juin 29, 2012, 12:19:52 am »
Du coup, juste retour des choses, voici mon résultat (vu qu'il me semble que Thor utilise c++11) :

#define FOR_EACH(CONTAINER, ITERATOR)       \
    for (auto ITERATOR = CONTAINER.begin();  ITERATOR != CONTAINER.end();  ++ITERATOR)

   
#define FOR_EACH_CONST(CONTAINER, ITERATOR) \
    for (auto ITERATOR = CONTAINER.cbegin(); ITERATOR != CONTAINER.cend(); ++ITERATOR)
Merci beaucoup. J'en ai déjà pensé, mais je l'ai oublié parce que je me concentrais toujours sur Thor (pas Aurora). Une fois j'ai même réfléchi si j'offre un AURORA_FOREACH comme BOOST_FOREACH (avec C++11, c'est plus simple à implémenter). Ca veut dire :
std::vector<int> v;
AURORA_FOREACH(int& i, v)
    ++i;

C'était aussi la raison pourquoi les deux autres macros contiennent "_ITR". Mais l'execution de AURORA_FOREACH est toujours un peu plus lent que AURORA_ITR_FOREACH (particulièrement si on traite break et continue), à cause de ça je veux garder le dernier.

Je projète de modifier ton code un peu: Sauvegarder le resultat de end(), parce que c'est possible que CONTAINER est une expression chère à évaluer. Peut-être même sauvegarder CONTAINER (sinon il y a toujours deux evaluations).

À propos, car ça concerne plutôt Aurora, il y a aussi un autre thread ;)
« Modifié: Juin 29, 2012, 12:24:02 am par Nexus »
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Légulysse Des Bois

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : Re : Re : Thor 2.0
« Réponse #10 le: Juin 29, 2012, 02:15:24 am »
Je projète de modifier ton code un peu: Sauvegarder le resultat de end(), parce que c'est possible que CONTAINER est une expression chère à évaluer. Peut-être même sauvegarder CONTAINER (sinon il y a toujours deux evaluations).
Le soucis si tu fais ça, comme j'essayais de l'expliquer, c'est que si tu modifies le contenu de ton CONTAINER à l'interieur de la boucle, t'auras des soucis (le end() que t'as stocké se retrouve invalidé). Solution possible : split FOR_EACH_SAFE + FOR_EACH_FAST :D
Par contre je comprends pas trop le but de stocker CONTAINER qqpart, c'est pas comme si c’était un pointeur vers qqchose (vu que c'est le container lui même).

À propos, car ça concerne plutôt Aurora, il y a aussi un autre thread ;)
J'y penserais pour les prochaines fois :p

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Thor 2.0
« Réponse #11 le: Juin 29, 2012, 11:20:27 am »
Le soucis si tu fais ça, comme j'essayais de l'expliquer, c'est que si tu modifies le contenu de ton CONTAINER à l'interieur de la boucle, t'auras des soucis (le end() que t'as stocké se retrouve invalidé).
Excuse-moi, je l'ai pas vu. Oui, c'est vrai, mais en utilisant la sémantique "for each", on veut normalement juste faire quelque chose pour chaque élément.

Quand on efface des éléments, on a plutot une boucle comme celle-là:
for (auto itr = container.begin(); itr != container.end(); /* fais rien */)
{
    if (/* besoin d'effacer */)
        itr = container.erase(itr);
    else
        ++itr;
}
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Légulysse Des Bois

  • Newbie
  • *
  • Messages: 35
    • Voir le profil
Re : Thor 2.0
« Réponse #12 le: Juin 29, 2012, 02:38:10 pm »
Effectivement.
Bah, au final j'essayais de trouver un compromis qui marche pour toutes les utilisations possibles, justement pour ne plus avoir à retaper les déclarations de boucle, mais c'est peut être un peu illusoire de ma part^^
A moins de faire encore plus de sous-versions du même define...  :P

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6286
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Thor 2.0
« Réponse #13 le: Août 01, 2012, 03:47:25 pm »
Les modifications les plus importantes au mois de juillet:
  • Ajouté un module FindThor pour CMake (grace à nokurn).
  • Enlevé Animator::setDefaultAnimation(). L'interface devient plus simple sans perte de fonctionnalité.
  • Partagé le module Multimedia en deux nouveaux modules Graphics et Shapes.
  • Dessiné une meilleure texture pour l'exemple Animation et utilisé une animation plus complexe.
Pour la fête nationale de Suisse, j'ai développé un nouvel exemple des feux d'artifices aujourd'hui. Il montre comment à écrire des emitters et des affectors spécifiques, et les combine avec des autres parties comme thor::CallbackTimer ou thor::PolarVector2f.
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Metalcolic

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
    • E-mail
Re : Thor 2.0
« Réponse #14 le: Août 03, 2012, 12:45:47 pm »
Salut!

Je viens de découvrir Thor et donc j'ai voulu tester la version 2.0.
Cependant lorsque je lance mingw32-make install j'obtiens des erreurs, j'ai fais plusieurs recherches mais impossible de trouver une solution :

http://nsa29.casimages.com/img/2012/08/03/120803125608296808.png


Merci pour l'aide !
« Modifié: Août 03, 2012, 12:57:38 pm par Metalcolic »