Example #1
0
void TransformComponent::UpdateWorldPosition(corgi::EntityRef& entity,
                                             const mathfu::mat4& transform) {
  TransformData* transform_data = GetComponentData(entity);
  transform_data->world_transform =
      transform * transform_data->GetTransformMatrix();

  for (auto iter = transform_data->children.begin();
       iter != transform_data->children.end(); ++iter) {
    UpdateWorldPosition(iter->owner, transform_data->world_transform);
  }
}
Example #2
0
void TransformComponent::UpdateAllEntities(corgi::WorldTime /*delta_time*/) {
  for (auto iter = component_data_.begin(); iter != component_data_.end();
       ++iter) {
    corgi::EntityRef entity = iter->entity;
    TransformData* transform_data = Data<TransformData>(entity);
    // Go through and start updating everything that has no parent:
    if (!transform_data->parent) {
      UpdateWorldPosition(entity, mathfu::mat4::Identity());
    }
  }
}
Example #3
0
//该函数只有在Quantum(),GetBitMapRect()函数调用过后才能被调用
//计算机中新的位置可以绘制在屏幕上的部分 
//该函数有可能会改变iWorldPosition 和iDrawableBitMapRect的值
void TWorldObject::CalcDrawableRect()
{
    //先填充iWorldPoint 和 iDrawableBitMapRect
    GetBitMapRect();
    UpdateWorldPosition();
    iIsNeedDraw = ETrue;
    if (iWorldPosition.iTl.iY < Y_AXIS_MIN_LIMIT)
    {
        if (iWorldPosition.iBr.iY < Y_AXIS_MIN_LIMIT)
        {
            //此时表示该对象的位置已经超出了需要绘制的范围
            iIsNeedDraw = EFalse;
            //iWorldPosition.SetRect(0, 0, 0, 0);
            //iDrawableBitMapRect.SetRect(0, 0, 0, 0);
            return;
        }
        TInt offset = Y_AXIS_MIN_LIMIT - iWorldPosition.iTl.iY;
        iDrawableBitMapRect.iTl.iY += offset;
        iWorldPosition.iTl.iY += offset;
        return;
    }
    if (iWorldPosition.iBr.iY > Y_AXIS_MAX_LIMIT)
    {
        if (iWorldPosition.iTl.iY > Y_AXIS_MAX_LIMIT)
        {
            //此时对象刚加入队列 还没有到达可显示的区域
            //将可显示区间 设置为0
            iIsNeedDraw = EFalse;
            //iWorldPosition.SetRect(0, 0, 0, 0);
            //iDrawableBitMapRect.SetRect(0, 0, 0, 0);
            return;
        }
        else
        {
            TInt offset = iWorldPosition.iBr.iY - Y_AXIS_MAX_LIMIT;
            iDrawableBitMapRect.iBr.iY -= offset;
            iWorldPosition.iBr.iY -= offset;
        }
    }
}