From ded76a35275b5c3422c8b2aa83942789731fd620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Mon, 11 Apr 2016 22:49:41 +0200 Subject: [PATCH] Ajout des nouvelles textures joueurs --- include/player.hpp | 9 +++---- res/textures/player.tga | Bin 2635 -> 0 bytes res/textures/player_1.tga | Bin 0 -> 2755 bytes res/textures/player_2.tga | Bin 0 -> 2790 bytes res/textures/player_shadow.tga | Bin 0 -> 2883 bytes src/player.cpp | 42 ++++++++++++++++++++++----------- 6 files changed, 31 insertions(+), 20 deletions(-) delete mode 100644 res/textures/player.tga create mode 100644 res/textures/player_1.tga create mode 100644 res/textures/player_2.tga create mode 100644 res/textures/player_shadow.tga diff --git a/include/player.hpp b/include/player.hpp index 856606d..3fa412b 100644 --- a/include/player.hpp +++ b/include/player.hpp @@ -11,6 +11,9 @@ public: private: mutable sf::CircleShape sprite; + sf::CircleShape shadow_sprite; + + mutable sf::Vector2f previous_position; unsigned int player_number; protected: @@ -79,12 +82,6 @@ public: */ virtual void save(std::ofstream& file) const; - /** - * Met à jour la position de l'objet selon sa - * vitesse actuelle - */ - virtual void updatePosition(); - /** * Renvoie le numéro du joueur */ diff --git a/res/textures/player.tga b/res/textures/player.tga deleted file mode 100644 index 7954ab3b2cfaf12d30ef2bb3c74a5730424c7753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2635 zcmZXW>q;C!5QTeY*LAabiM&Aa76ycnKyKu9#@rL~X8sXDL=i<4QA82Zzmt4lr>Zwb zVW+z;=bWmpxs?(Xi!+uPgm>gsB|yu2JSvj55AyCG~34-X9? zoG@&k@OG@Qd}H@DP1o1g8T#Bcm~1-Rt56UZ2c+eot>Ybs~NK6<74vzd4q(GqK(H~(U8#4x)57y1tsZvvVlp) z0*sL#u@{Kl_Bb$Mk$Sebw`V8z_xAXBw|N|w_h zUpq<48!$NyVtA9qEr1@PGk*pzJ6O=j{_O0mMRa&l(IaBw9KsXYxk8TJGg3ewB_*k4 zrQU)#m0L{O-2qjnhnW=^mJY0pY(q0ymcn$aV3m@IrhFnE&V6Md0tt)k#P}_Pg2`Kvz?G5tOXyUBx9Y+u^;8zZE2>G}vkzLtf_jw5igurF5IajOokU zfF=;*BhQ<$VaKVVwkc#M_XNG>pl17spwoHnaq0;?1$38w(h5Y_Y~K zPKO1Ye;;s()T5JVEcGl{(Iq^g&&QhgaA+}h9^GItg9%;ahc<^~5~mg(^V>LjvdqKo z?rv4y-Vh#+_o_)N5QL0)hSGoy82gZnd^2anhEPH_H#alCHVOGexpRVN%N=DJqZ@fb zK6P_vk-l5y{O{Qby6SVtP?E!2ABIRTJRptiX-Bk6RLvcUm^Cffg|;XZ2(Yl@M?Xqi zek&Hgc8_?v31)bo9VesPos}ymO#}fGc}6hMlXDe219r z$Hz1R;3F~nWh<~k&hZ5-S4s$V3GH`NdqXUucme*Z4)!M%#avQ`g6rf* zgUCXjNk0&^8bp|bj4LGA1TfUE!1k)LDb@D(Yw_*tcWdw0->koS`Sio{^%rZ;%5USs B{Wkyr diff --git a/res/textures/player_1.tga b/res/textures/player_1.tga new file mode 100644 index 0000000000000000000000000000000000000000..5d78731d479f93b1b31531a8b9aee132dda0c16a GIT binary patch literal 2755 zcmZ9ONlP425XZY`b1=+z2zXA8p1c|mf`P<@fP&lE57EYqP8P4?x9}=@6+8%TM?n<# zW!$gw(!YOAy&e+DbiI02|N7VRUU!o8CjRejlK<5gUtV5blc%Sr*X;iO{xxOE>X-ES z&vh&R3DsN|&d$!l!^1;B&W$DiV7K)A{4DL=-CdYRljJ{bld#SnA0I;<3Crv2Ygr#3 z9|t_x#0gB|ns*baOgselos;(J>MGpc-bS=pw2=iqvJ;D+>?Op_B;DNHgbb51D9)Ux zP*PZ6n29+01cLtori8~r`tf`9#9jpxF_R*8X>DySOifLNiHV6Y zi%=UK9S!5-<6&%UEKE*LYIkvQQIV8P39^(BWYI5DuArl3L?_D9(o$&U-4Ds|@Ng$t zvS6=ZWw`j_2fk&#zP=tZSf%hA85s$gu=@M^Lk77XHe0Qh{NRKy*xurTpEctA{M@k1 z9*rj+w!gQxXED-+g#~43dMYWY;&~I&8AW zJO)eI!NuSx%jV{$CD%hC@t{yV@#5+2GU7@Lla#&ue_H~eR#OZlrC1gE?d|Q(RFI#6 zot&I>Y@r=(OCB2dGI7}Ad3t(kt`#qgmptyI?8KI-nC{J!3W#0}JF4W(J3Ks841!uJ z>=@BVE#c5er&`9O()sy$RmxJwGY%Y=XW$y`fDs_kO+!kvaU%|4^i+(PON|bBX}q}P zPmgs-<6$8pVSW>#gbh(5k`4{pf-NiMRrPvw*9NRQSioT5G+4Wyr(KLl;=Z-D)j6g# zJ!aaA#NlywpIRKd<$P`PMY(j>#3Ds7r3a_o-CYY-^H7>Hk>Ws={Wzi} z2lHm7s}14c;2|@zf9T0Sp=$7|7kPT>#Z?EHg)z+6;LQU1y-fpYz z6NZd8e2ZiO&iVd5>m0cXbJkgpfBkFiwbx7#R0a0;O%VTA2CuKL zCx6Euufg;4^K0?`{{BDz8mmfw#2+pf8{Eakg^O(t1<%LFNB4o35Gxw_0$2Ko9ynKg zdU|q|NT_aZZXAl!(^GeMcPAM=Sbr%d{wU2NWzZoI`||SQb7gODZ-s&dG%Q74A|wQu z2tiE5Fi5;IWW@v2tE($lM38-k;PBz$!DFH?5*I-DGr-Wu`vw41DwVuf4hXP7;0Xw_ zrxI&QN+sOiaLCNf&AGwBK{qrs$wVU#i?U_2S+};fR&LDM+1Z;mQEZBoWXMpPu_8jK z@35n#7u19WzQ|O4d3ouYo12w2m&>{J^>x`qOcb@4Agp^Fot&H`P0&SAo^-I%a|jqz zLFC|kczEcVnwpfUva-@`Zf=&lk#s*of-U}vjN*ZNG`=&KlrFMDlhBkv{^;n))z#H0 zQB6&a+uz?$K%u1h(#@s`G>E5a`GgeGt0YwxE?Zk$j*;V%_4M?35D8TrY{$s{+(pm2-fN27g-vDPnfU0<3deYmi&;Hs;u-A6__V$V!W zOo*Xs&{0bYt!_UW;AxQFS>2YK5o2q>va_?(H8wW7hK2^$*4F06$H(2y&W`wcRQm!c zLMenhcqwNu(G_LOTc0eB3JEp6_LN+89lZouO>WlQj4UuJsLC{eeO?k(D5XYVI1NAf>1pWQ|<1ZaOg`W!DKYaUZXW{#f?}GmU5@pEv literal 0 HcmV?d00001 diff --git a/res/textures/player_shadow.tga b/res/textures/player_shadow.tga new file mode 100644 index 0000000000000000000000000000000000000000..ff5402837cbfe1bd1511a96adbd89d1f5a8629f9 GIT binary patch literal 2883 zcmbu>ds9_q7{+0cjS>iQP{AZNB2YkrhIz=0R6sWx-~qJ6$eb**(f+UxpmuJWK0+TA z?`yT!jvQxdCY|5fd%f@TKKFB4i`~@J-c7TydKVUqtT(M;A??66=t6r2=c8}~oD?9QDYiAquAKtoi+LELYJ zsctdnx}Q4zVbmnS+I1X)H5T!#lzHc3@ddjuzS(%@T91rgWk(YWDu7x$4>onKuE6e#55#71q zBo90dH8jn=Q)=2DJo5UtJxAS9FN5pIRsG&h{S9d3r}fi6qEJsVU>u77DB%(qJL z-tY_zglZTMWe>|7^-eu`rFSRX4fn$5;j^$2?5TlDtBd-a4!U}vk!jh@KC59k=(l>9 zbDcaN#J(EV1MigX%k+Uv?*}o+Sf$nDQgBjdRk-Jsny+W)P%y1C!3?O6%3cmKkjZBF zB0Qw|nC92@l~41@;%d-Y6&AJVTN|1?bJrR62Gt%36G0F3LO0EXYN_leK}KJNM>L<% zd=$P6YW#5!ohU^s>IrYPLX*b-(R`fq--RdP-&BitX+w2;NB>K8<*^y`@SE^$p#CtZ z_-1&yzOz{?{u&jk=H^wZFVB(A)IvE&Cf6LPsBS(8qOfMh%$iAZ#w2wYe_$IeEgzWP zYz>5J7!TVYm~*+m7|I7mvIgd^mfq7KO%{k0HJ;^S7%qMuG{kmf$pmxJX84Ptjx$n!zSPMO(sq0xA~im5B?3+14e4~LOH6J#Yuqo_cY~+FEUP#XE|$Y8fvbv6Qkm?Gh2|po#*YRW za6TADg6OBiY)~f7Wv~z~g(Z$JD=>#FdJ12~FP-+>HiwR2n(0jjNgWT&J?(ShJV*1a z6>5L+ORV^zsBxmwJWk4}G;bmt4w~9lSbK*3yK!x8VZC;}wz7QW)?)3-!gSLMTz&ZB literal 0 HcmV?d00001 diff --git a/src/player.cpp b/src/player.cpp index b20c034..5952cdb 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -64,12 +64,34 @@ sf::Vector2f Player::getForces(const Game& game) const { } void Player::draw(Level& level) { - // utilisation de la texture + // on charge la texture selon le numéro du joueur + std::string texture_name; + + if (getPlayerNumber() == 0) { + texture_name = "player_1.tga"; + } else { + texture_name = "player_2.tga"; + } + + sprite.setTexture(&level.getResourceManager().getTexture(texture_name)); sprite.setRadius(getRadius()); sprite.setOrigin(sf::Vector2f(getRadius(), getRadius())); - sprite.setTexture( - &level.getResourceManager().getTexture("player.tga") - ); + sprite.setPosition(getPosition()); + + shadow_sprite.setTexture(&level.getResourceManager().getTexture("player_shadow.tga")); + shadow_sprite.setRadius(getRadius() - 1); + shadow_sprite.setOrigin(sf::Vector2f(getRadius() - 1, getRadius() - 1)); + shadow_sprite.setPosition(getPosition()); + + // on fait tourner le sprite selon la différence de position + if (previous_position != sf::Vector2f(0, 0)) { + sprite.rotate( + (getPosition() - previous_position).x * + level.getRightDirection().x * .015f + ); + } + + previous_position = getPosition(); // si le joueur est sélectionné, on met sa bordure en rouge if (isSelected()) { @@ -87,9 +109,9 @@ void Player::draw(Level& level) { sprite.setFillColor(sf::Color::Transparent); } - // déplacement du sprite à la position de la balle - sprite.setPosition(getPosition()); + // dessin des sprites level.getWindow().draw(sprite); + level.getWindow().draw(shadow_sprite); } void Player::activate(Game& game, Object::Ptr object) { @@ -98,14 +120,6 @@ void Player::activate(Game& game, Object::Ptr object) { // qui s'occupe de la réponse } -void Player::updatePosition() { - // calcul de la différence de position pour connaître - // (approximativement) la rotation de la balle - sf::Vector2f last_position = getPosition(); - Object::updatePosition(); - sprite.rotate((getPosition() - last_position).x * 3.f); -} - sf::FloatRect Player::getAABB() const { return sf::FloatRect( getPosition().x - getRadius(),