#include "character.hpp" Character::Character(int player){ playerNum = player; ASSERT(texture.loadFromFile(spriteFile)); height = texture.getSize().y/8; width = texture.getSize().x/4; timestamp = indexX = idleFrame = 0; indexY = magicNumber; setTexture(texture); sf::IntRect rect = sf::IntRect(indexX*width, indexY*height, width, height); setTextureRect(rect); actualState = PlayerState::idle; if (playerNum == 0){ setPosition(posX1, posY1); magicNumber = 0; } else{ setPosition(posX2, posY2); magicNumber = 4; } } void Character::update(float deltaTime){ timestamp += deltaTime; if (timestamp >= frameTime){ timestamp = 0; sf::IntRect rect = sf::IntRect(indexX*width, indexY*height, width, height); setTextureRect(rect); indexX = (indexX+1)%4; //Acabar automaticament la animacio de attack if ((actualState == PlayerState::attacking or actualState == PlayerState::hurt or actualState == PlayerState::success) and indexX%4 == 3){ setState(PlayerState::idle); } idleFrame = (idleFrame+1)%4; } } void Character::setState(PlayerState::playerState state){ actualState = state; if (state == PlayerState::idle){ indexX = idleFrame; indexY = 0 + magicNumber; } else if (state == PlayerState::attacking){ indexX = 0; indexY = 1 + magicNumber; std::string sample = "atk"+std::to_string(rand()%20+1); SoundManager::setVolume(100,sample); SoundManager::playSound(sample); ////std::cout << "playing sample " << sample << std::endl; } else if (state == PlayerState::hurt){ ////std::cout << "i am hurt" << std::endl; indexX = 0; indexY = 2 + magicNumber; std::string sample = "fail"+std::to_string(rand()%6+1); SoundManager::setVolume(100,sample); SoundManager::playSound(sample); ////std::cout << "playing sample " << sample << std::endl; } else if (state == PlayerState::success){ ////std::cout << "i am succeed!" << std::endl; indexX = 0; indexY = 3 + magicNumber; std::string sample = "bona"+std::to_string(rand()%8+1); SoundManager::setVolume(10,sample); SoundManager::playSound(sample); //std::cout << "playing sample " << sample << std::endl; } } bool Character::isLastFrame(){ return indexX == 3; }