示例#1
0
void CBiotopDisplayGL::ResetAllSprites()
{
  CAnimatedSprite* pAnimatedSprite = NULL;
  int inst = 0;
  for (int i=0; i<m_tSpriteDisplayPrio.GetSize(); i++) 
  {
    DisplayPriority_t element = m_tSpriteDisplayPrio.GetAt(i);
    CBasicEntity* pEntity = element.pEntity; 
    pAnimatedSprite = GetAnimatedSprite(pEntity);
    if (pAnimatedSprite == NULL)
      break;
    inst = pAnimatedSprite->GetInstance(pEntity->getId(), pEntity->getColorRgb(), pEntity->getWeight());
    pAnimatedSprite->ResetSteps(inst);
  }
}
示例#2
0
void CBiotopDisplayGL::DrawAllVisibleEntities(bool noStep)
{
  int cbx_min, cby_min, cbx_max, cby_max;
  GetVisibleBiotopCoord(cbx_min, cby_min, cbx_max, cby_max);
  int i;
  CAnimatedSprite* pAnimatedSprite = NULL;
  bool isSelected = false;
  int inst = 0;
  int curAction = 0;

  m_tSpriteDisplayPrio.RemoveAll();

  for (i=0; i<m_pBiotop->getNbOfEntities(); i++) 
  {
    int posMapX,posMapY,coordx,coordy,offsetx,offsety;
    CBasicEntity* pEntity = m_pBiotop->getEntityByIndex(i); 

    if ( (pEntity == NULL) || (pEntity->isToBeRemoved()) )
      continue;
 
    Point_t coord = pEntity->getStepCoord();

    if ( (coord.x>=cbx_min)&&(coord.x<=cbx_max)
       &&(coord.y>=cby_min)&&(coord.y<=cby_max) )
    {
      // Process coordonate
      ConvertCoordBiotopStepToMapStep(coord.x,coord.y,posMapX,posMapY);
      m_Map.GetAbsCoordFromBlockStepPos(posMapX,posMapY,coordx,coordy,offsetx,offsety);
 
      DisplayPriority_t element;
      element.pEntity         = pEntity;
      element.displayPriority = ((pEntity->getLayer())<<16) - coordy;
      element.newMapCoordX    = coordx;
      element.newMapCoordY    = coordy;      
      element.spriteOffsetX   = offsetx;
      element.spriteOffsetY   = offsety;

      // Insert the item in proper position according to displayPriority
      INT_PTR start = 0, end = m_tSpriteDisplayPrio.GetSize(); 
      while(start < end) 
      { 
          INT_PTR pos = (start + end) / 2; 
          if(element.displayPriority > m_tSpriteDisplayPrio.GetAt(pos).displayPriority) 
              start = pos + 1; 
          else 
              end = pos; 
      } 
      m_tSpriteDisplayPrio.InsertAt(start, element); 
    }
    else
    {
      // Force step attribute for next move
      pAnimatedSprite = GetAnimatedSprite(pEntity);
      if (pAnimatedSprite != NULL)
      {
        inst = pAnimatedSprite->GetInstance(pEntity->getId(), pEntity->getColorRgb(), pEntity->getWeight());
        // Force NO step attribute for next move
        pAnimatedSprite->SetStepMode(inst,true);
      }
    }
  }

  m_RefreshCounter = (m_RefreshCounter+1)%m_nbRefreshPerStep;

  for (i=0; i<m_tSpriteDisplayPrio.GetSize(); i++) 
  {
    int coordx,coordy,offsetx,offsety;

    DisplayPriority_t element = m_tSpriteDisplayPrio.GetAt(i);
    CBasicEntity* pEntity = element.pEntity; 
    coordx  = element.newMapCoordX;
    coordy  = element.newMapCoordY;
    offsetx = element.spriteOffsetX;
    offsety = element.spriteOffsetY;

    // Check if selected entity
    isSelected = (pEntity->getId() == m_nSelectedEntityId);

    pAnimatedSprite = GetAnimatedSprite(pEntity);

    if (pAnimatedSprite == NULL)
      break;

    inst = pAnimatedSprite->GetInstance(pEntity->getId(), pEntity->getColorRgb(), pEntity->getWeight());

    if (noStep)
      pAnimatedSprite->MoveSprite(inst,coordx,coordy);
    else if ( m_RefreshCounter == 0)
      pAnimatedSprite->MoveSpriteByStep(inst,coordx,coordy);

    if (pEntity->getBrain() != NULL)
    {
      curAction = pEntity->getBrain()->GetCurrentReactionIndex();
      // According to speed, use walk or run animation instead of real action
      /*if ( pEntity->getCurrentSpeed() > 20)
        curAction = pAnimatedSprite->m_idActionRun;   
      else if ( pEntity->getCurrentSpeed() > 0)
        curAction = pAnimatedSprite->m_idActionWalk;*/
    }
    else
      curAction = 0;

    if (isSelected)
    {
      int posMapX,posMapY,coordx,coordy,offsetx,offsety;
      Point_t coord = pEntity->getGridCoord();
      ConvertCoordBiotopGridToMap(coord.x,coord.y,posMapX,posMapY);
      m_Map.GetAbsCoordFromBlockStepPos((posMapX)*NB_STEPS_PER_GRID_SQUARE+(1+(posMapY&1))*NB_STEPS_PER_GRID_SQUARE/2,(posMapY+1)*NB_STEPS_PER_GRID_SQUARE,coordx,coordy,offsetx,offsety);
      m_SprSquare.MoveSpriteAtPosition(coordx+offsetx,coordy+offsety);
      m_SprSquare.DrawSprite(m_appBindTexArray[SQUARE_ID]);
    }

    if (pEntity->getClass()>=CLASS_ANIMAL_FIRST)
      pAnimatedSprite->DrawSprite(inst,offsetx,offsety,pEntity->getDirection(),0,curAction,isSelected);
    else
      pAnimatedSprite->DrawSprite(inst,offsetx,offsety,0,0,curAction,isSelected);

    // Force step attribute for next move
    if ( m_RefreshCounter == 0)
      pAnimatedSprite->SetStepMode(inst,false);
  }

}
示例#3
0
void TestScene::Start( void )
{
	TRACE( "TestScene Start method!" );

	Entity& qMark = entityManager.New( "qMark" );

	//TODO: Need to add delete* methods to remove components
	AddTransform( qMark );
	AddSprite( qMark, "MarioQuestionBlockTexture");

	GetTransform( qMark ).translation.z = 5;

	GetTransform( qMark ).scale.x = 512;
	GetTransform( qMark ).scale.y = 512;

	GetSprite( qMark ).TextureDimensions.right = 2.0f;
	GetSprite( qMark ).TextureDimensions.bottom = 2.0f;

	//TESTING ANIMATED SPRITES//

	Entity& animTest = entityManager.New( "animTest" );
	
	AddTransform( animTest );
	AddAnimatedSprite( animTest );

	Transform& animTransform = GetTransform( animTest );
	animTransform.translation.x = -300;
	animTransform.translation.y = -200;
	animTransform.translation.z = 6;
	animTransform.scale.x = 100;
	animTransform.scale.y = 100;

	Animation2D testAnimation( "test" );
	Frame one = animatedSprites.NewFrame( EngineDuration( std::chrono::seconds( 1 ) ), "uvtest" );
	Frame two = animatedSprites.NewFrame( EngineDuration( std::chrono::seconds( 1 ) ), "uvtest" );
	Frame three = animatedSprites.NewFrame( EngineDuration( std::chrono::seconds( 1 ) ), "uvtest" );

	one.TextureDimensions.right = 0.1f;
	one.TextureDimensions.bottom = 0.1f;

	two.TextureDimensions.left = 0.1f;
	two.TextureDimensions.right = 0.2f;
	two.TextureDimensions.bottom = 0.1f;

	three.TextureDimensions.left = 0.2f;
	three.TextureDimensions.right = 0.3f;
	three.TextureDimensions.bottom = 0.1f; 

	testAnimation.AddFrame( one );
	testAnimation.AddFrame( two );
	testAnimation.AddFrame( three );

	GetAnimatedSprite( animTest ).AddAnimation( testAnimation );
	GetAnimatedSprite( animTest ).PlayAnimation( "test", Animation2D::PlaybackMode::LOOP );

	//TRANSPARENCY TEST//
	Entity& tTest = entityManager.New( "tTest" );

	AddTransform( tTest );
	AddSprite( tTest, "fucknope" );

	GetTransform( tTest ).scale.x = 79;
	GetTransform( tTest ).scale.y = 103;
	GetTransform( tTest ).translation.z = 4;

	State = SceneState::UPDATE;
}