Beispiel #1
0
void PonyAnimation::updateState(unsigned added, unsigned /*removed*/) {
  if (added & Creature::TurnedLeft) {
    if (!m_flip) {
      scale(-1, 1);
      translate(-1, 0);
      m_flip = true;
    }

  } else if (added & Creature::TurnedRight) {
    if (m_flip) {
      scale(-1, 1);
      translate(-1, 0);
      m_flip = false;
    }
  }

  if (strcmp(currentSprite(), "preparePunch") == 0)
    return;
  else if (strcmp(currentSprite(), "prepareJump") == 0)
    return;

  if (owner()->currentState() & Creature::OnGround) {
    if (owner()->currentState() & (Creature::GoingLeft | Creature::GoingRight))
      setCurrentSprite("walking");
    else
      setCurrentSprite("standStill");
  }
}
void E_Tortoise_Fly::SetSprite()
{
    if (status == 0)
    {
        if (m_hSpeed.x<0)
            setCurrentSprite(E_FlyTortoiseGreenLeft);
        else
            setCurrentSprite(E_FlyTortoiseGreenRight);
    }
    else if (status == 1)
    {
        if (m_hSpeed.x<0)
            setCurrentSprite(E_TortoiseGreenLeft);
        else
            setCurrentSprite(E_TortoiseGreenRight);
    }
    else if (status == 2) {
        if (m_hSpeed.x<0)
            setCurrentSprite(E_TortoiseshellGreenLeft);
        else
            setCurrentSprite(E_TortoiseshellGreenRight);
    }
    else {
        if (m_hSpeed.x<0)
            setCurrentSprite(E_TortoiseshellGreenLeftReverse);
        else
            setCurrentSprite(E_TortoiseshellGreenRightReverse);
    }
}
static int drawScreen(ShellEffect *ef) {
	float x,y;
	State *state = (State*)ef->data;
	TravelingSprite *sprite = &state->currentSprite;
	
	//Calculate x and y
	float t = sprite->location;
	x = ((1-t)*(1-t))*sprite->x1 + 2*t*(1-t)*sprite->x2 + t*t*sprite->x3;
	y = ((1-t)*(1-t))*sprite->y1 + 2*t*(1-t)*sprite->y2 + t*t*sprite->y3;
	x *= ef->x;
	y *= ef->y;

	//draw it
	clearSpriteAtPoint(sprite->width, sprite->height, sprite->oldx, sprite->oldy, ef->screen);
	drawSpriteAtPoint(sprite->spriteArray,sprite->width, sprite->height, x, y, ef->screen);
	sprite->oldx = x; sprite->oldy = y;

	//update the location and speed
	sprite->location += sprite->speed;
	sprite->speed    += sprite->accelleration;

	if(sprite->location > 1) {
		if(sprite->nextSprite==NULL)
			return -1; //we are done

		//Otherwise, if there is another sprite, lets move on to that one
		setCurrentSprite(ef, sprite->nextSprite);
		srClearScreen(ef->screen);
	}
	
	return 100;
}
ShellEffect *effectTravelingSprite(const EffectTravelingSpriteDef list[]) {
	State *state = (State*)malloc(sizeof(State));
	if(state==NULL) return NULL;
	state->spriteDefinition = copySpriteDefList(list);

	ShellEffect *rv = allocEffect(drawScreen, NULL, effectFree, NULL, state);
	if(rv==NULL) return rv;

	setCurrentSprite(rv, list);
	return rv;
}
Beispiel #5
0
void Pony::initialize(QWorld* w) {
  Creature::initialize(w);

  m_body.initialize(m_bodySource.c_str());
  m_body.translate(-0.5 * size().width(), -0.5 * size().height());
  m_body.scale(size().width(), size().height());

  m_wings.initialize(m_wingsSource.c_str());
  m_wings.translate(-0.5 * size().width(), -0.5 * size().height());
  m_wings.scale(size().width(), size().height());

  setCurrentSprite("standStill");
}
void E_Tortoise_Fly::Load()
{
    E_FlyTortoiseGreenLeft = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_FlyTortoiseGreenLeft);
    E_FlyTortoiseGreenRight = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_FlyTortoiseGreenRight);
    E_TortoiseGreenLeft = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_TortoiseGreenLeft);
    E_TortoiseGreenRight = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_TortoiseGreenRight);
    E_TortoiseshellGreenLeft = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_TortoiseshellGreenLeft);
    E_TortoiseshellGreenRight = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_TortoiseshellGreenRight);
    E_TortoiseshellGreenLeftReverse = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_TortoiseshellGreenLeftReverse);
    E_TortoiseshellGreenRightReverse = ResourcesManager::GetInstance()->GetSprite(SpriteID::E_TortoiseshellGreenRightReverse);
    setCurrentSprite(E_FlyTortoiseGreenLeft);
    Object::Load();
    status = 0;
    m_hState = ON_SPACE;
    m_hSpeed.x = -2;
    m_hSpeed.y = -2;
    IsControl = false;
    timelife = 0;
}
Beispiel #7
0
void Pony::punchRequested() { setCurrentSprite("preparePunch"); }
Beispiel #8
0
void Pony::jumpRequested() { setCurrentSprite("prepareJump"); }