Example #1
0
void EditorObject::save(QString filename)
{
    QFile file(filename);
    file.open(QIODevice::WriteOnly | QIODevice::Text);

    if( ! file.isOpen() ){
        qDebug() << "Unable to open " << filename << " for writing";
        return;
    }

    QTextStream out(&file);

    out << "version=1\n";
    out << "name=" << m_name << "\n";
    out << "size=" << tileCountX() << "," << tileCountY() << "," << layerCount() << "\n";
    out << "description=" << m_description << "\n";

    out << "\n# flatten a 3d grid in z,y,x order\n";
    QString surfaceTypes = "";
    QString shapes = "";
    for(int z=0; z<layerCount(); ++z) {
        for(int y=0; y<tileCountY(); ++y) {
            for(int x=0; x<tileCountX(); ++x) {
                surfaceTypes += QString::number(m_surfaceTypes->get(x,y,z)) + QString(",");
                shapes += QString::number(m_shapes->get(x,y,z)) + QString(",");
            }
            surfaceTypes += " \\\n";
            shapes += " \\\n";
        }
        surfaceTypes += "\\\n";
        shapes += "\\\n";
    }
    out << "surfaceTypes=" << surfaceTypes << "\n";
    out << "shapes=" << shapes << "\n";

    out << "\n# list of graphics and their locations\n";
    out << "# graphic=x,y,width,height,layer,graphicFile\n";
    for(int z=0; z<layerCount(); ++z) {
        QList<ObjectGraphic *> * list = m_graphics.at(z);
        for(int i=0; i<list->size(); ++i) {
            ObjectGraphic * graphic = list->at(i);
            out << "graphic=" << graphic->x << "," << graphic->y << ","
                << graphic->width << "," << graphic->height << "," << z
                << "," << graphic->graphicName << "\n";
        }
    }

    out << "\n# layer names\n";
    for(int z=0; z<layerCount(); ++z) {
        out << "layerName=" << m_layerNames.at(z) << "\n";
    }
}
Example #2
0
void EditorMap::addLayer(QString name)
{
    MapLayer * layer = new MapLayer;
    layer->name = name.isEmpty() ?
        QObject::tr("Layer %1").arg(QString::number(layerCount()+1)) : name;
    m_layers.append(layer);
}
Example #3
0
void EditorMap::save()
{
    QString filename = QDir(EditorResourceManager::mapsDir()).absoluteFilePath(m_name);
    QFile file(filename);
    file.open(QIODevice::WriteOnly | QIODevice::Text);

    if( ! file.isOpen() ){
        qDebug() << "Unable to open " << filename << " for writing";
        return;
    }

    QTextStream out(&file);

    out << "version=" << c_codeVersion << "\n";
    out << "# size=sizeX,sizeY,layerCount\n";
    out << "# sizes in number of tiles, not in actual coordinates.\n";
    out << "size=" << tileCountX() << "," << tileCountY() << "," << layerCount() << "\n\n";

    out << "# layer declarations. one declaration per layer\n";
    out << "# layer=layerName\n";
    for (int i=0; i<layerCount(); ++i)
        out << "layer=" << layerName(i) << "\n";
    out << "\n";

    out << "# object declarations. uses tile coordinates\n";
    out << "# object=tileX,tileY,layerIndex,objectId\n";
    for (int layerIndex=0; layerIndex<m_layers.size(); ++layerIndex) {
        QList<MapObject *> objects = m_layers.at(layerIndex)->objects;
        for (int i=0; i<objects.size(); ++i) {
            MapObject * object = objects.at(i);
            if (object->layer == layerIndex)
                out << "object=" << object->tileX << "," << object->tileY << "," << layerIndex << "," << object->object->resourceName() << "\n";
        }
    }
    out << "\n";

    out << "# entity declarations. use absolute coordinates\n";
    out << "# entity=x,y,layerIndex,entityId\n";
    for (int layerIndex=0; layerIndex<m_layers.size(); ++layerIndex) {
        QList<EditorEntity *> entities = m_layers.at(layerIndex)->entities;
        for (int i=0; i<entities.size(); ++i) {
            EditorEntity * entity = entities.at(i);
            out << "entity=" << entity->centerX() << "," << entity->centerY() << "," << entity->layer() << "," << entity->name() << "\n";
        }
    }
}
Example #4
0
inline void Net::compute (Iterator begin, Iterator end, OutIterator itOut)
{
    const int inputLayer = 0;
    node_iterator itNode = beginNodes (inputLayer);
    node_iterator itNodeEnd = endNodes (inputLayer);
    for (Iterator it = begin; it != end && itNode != itNodeEnd; ++it, ++itNode)
    {
    (*itNode)->value = (*it);
    }

    compute_E ();

    itNode  = beginNodes (layerCount () -1);
    itNodeEnd = endNodes (layerCount () -1);
    for (Iterator it = begin; it != end && itNode != itNodeEnd; ++it, ++itNode)
    {
    (*itOut) = (*it);
    }
}
Example #5
0
void EditorMap::addEntity(EditorEntity * entity)
{
    if (entity->parent() != NULL)
        entity->parent()->removeEntity(entity);

    entity->setParent(this);

    while (entity->layer() >= layerCount())
        addLayer();
    m_layers.at(entity->layer())->entities.append(entity);
}
Example #6
0
void EditorMap::addObject(MapObject * object)
{
    if (object->parent != NULL)
        object->parent->removeObject(object);

    object->parent = this;

    for (int i=0; i<object->object->layerCount(); ++i) {
        int layerIndex = object->layer + i;
        while (layerIndex >= layerCount())
            addLayer();
        m_layers.at(layerIndex)->objects.append(object);
    }
}
Example #7
0
void QgsMapCanvas::refreshAllLayers()
{
  // reload all layers in canvas
  for ( int i = 0; i < layerCount(); i++ )
  {
    QgsMapLayer *l = layer( i );
    if ( l )
      l->reload();
  }

  // clear the cache
  clearCache();

  // and then refresh
  refresh();
}
Example #8
0
bool EditorObject::build(ResourceFile & resources)
{
    // create the container to hold the graphic ids
    delete m_compiledGraphics;
    m_compiledGraphics = new Array3<QString>(tileCountX(), tileCountY(), layerCount());

    Array3< QList<QImage> * > animations(tileCountX(), tileCountY(), layerCount());
    // initialize animation list
    for (int z=0; z<layerCount(); z++) {
        for (int y=0; y<tileCountY(); ++y) {
            for (int x=0; x<tileCountX(); ++x) {
                animations.set(x,y,z,new QList<QImage>());
            }
        }
    }

    // find out the greatest frames per second
    int fps = 0;
    for (int layerIndex=0; layerIndex<m_graphics.size(); ++layerIndex) {
        QList<ObjectGraphic *> * layer = m_graphics.at(layerIndex);
        for (int i=0; i<layer->size(); ++i) {
            ObjectGraphic * graphicInstance = layer->at(i);
            if (graphicInstance->graphic->framesPerSecond() > fps)
                fps = graphicInstance->graphic->framesPerSecond();
        }
    }

    // for each animation frame
    int frame = 0;
    while (true) {
        if (frame > 0) {
            // check if the animation has looped yet.
            bool firstFrame = true;
            for (int layerIndex=0; layerIndex<m_graphics.size(); ++layerIndex) {
                QList<ObjectGraphic *> * layer = m_graphics.at(layerIndex);
                for (int i=0; i<layer->size(); ++i) {
                    ObjectGraphic * graphicInstance = layer->at(i);
                    if ((frame+1) % graphicInstance->graphic->frameCount() != 0) {
                        firstFrame = false;
                        break;
                    }
                }
                if (! firstFrame)
                    break;
            }

            // this means all animations have looped and we're done
            // collecting frames
            if (firstFrame)
                break;
        }

        for (int z=0; z<layerCount(); ++z) {
            // render the layer once into a QImage
            QImage layerImage(tileCountX() * Tile::sizeInt, tileCountY() * Tile::sizeInt, QImage::Format_ARGB32);
            layerImage.fill(Qt::transparent);
            QPainter layerPainter(&layerImage);
            render(layerPainter, z, frame, fps);

            // for each tile, draw that tile into a different QImage
            for (int y=0; y<tileCountY(); ++y) {
                for (int x=0; x<tileCountX(); ++x) {
                    QImage tileImage(Tile::sizeInt, Tile::sizeInt, QImage::Format_ARGB32);
                    tileImage.fill(Qt::transparent);
                    QPainter p(&tileImage);
                    p.drawImage(0, 0, layerImage, x * Tile::sizeInt, y * Tile::sizeInt, Tile::sizeInt, Tile::sizeInt);

                    QList<QImage> * frames = animations.get(x,y,z);
                    frames->append(tileImage);
                }
            }
        }

        ++frame;
    }
    int frameCount = frame;

    // create a spritesheet for each tile
    for (int z=0; z<layerCount(); ++z) {
        for (int y=0; y<tileCountY(); ++y) {
            for (int x=0; x<tileCountX(); ++x ) {
                // create the spritesheet
                QList<QImage> * frames = animations.get(x,y,z);
                QImage spritesheet(Tile::sizeInt * frameCount, Tile::sizeInt, QImage::Format_ARGB32);
                spritesheet.fill(Qt::transparent);
                QPainter p(&spritesheet);
                for (int i=0; i<frameCount; ++i)
                    p.drawImage(i * Tile::sizeInt, 0, frames->at(i % frames->size()));

                // create the binary data
                QByteArray tile;
                // magic character
                tile.append("G");

                int codeVersion = 1;
                tile.append((char *) &codeVersion, 4);

                int graphicType = Graphic::gtAnimation;
                tile.append((char *) &graphicType, 4);

                int storageType = Graphic::stPNG;
                tile.append((char *) &storageType, 4);

                // color key: hardcode magenta
                char red = 255;
                char green = 0;
                char blue = 255;
                tile.append(&red, 1);
                tile.append(&green, 1);
                tile.append(&blue, 1);

                tile.append((char *) &frameCount, 4);
                tile.append((char *) &fps, 4);

                // frame width and height
                tile.append((char *) &Tile::sizeInt, 4);
                tile.append((char *) &Tile::sizeInt, 4);

                // save spritesheet into memory
                QByteArray imageData;
                QBuffer buffer(&imageData);
                buffer.open(QIODevice::WriteOnly);
                spritesheet.save(&buffer, "PNG");

                int imageDataSize = imageData.size();
                tile.append((char *) &imageDataSize, 4);

                tile.append(imageData);

                // come up with a name
                QString dash = "-";
                QString ext = ".ani";
                QString graphicName = m_name + dash + QString::number(x) +
                    dash + QString::number(y) + dash + QString::number(z) + ext;

                resources.updateResource(graphicName.toStdString(), tile.constData(), tile.size());
                m_compiledGraphics->set(x,y,z,graphicName);
            }
        }
    }

    // cleanup animation list
    for (int z=0; z<layerCount(); z++) {
        for (int y=0; y<tileCountY(); ++y) {
            for (int x=0; x<tileCountX(); ++x) {
                delete animations.get(x,y,z);
            }
        }
    }

    return true;
}
Example #9
0
void EditorObject::addLayer(QString name)
{
    QString newLayerName = name.isEmpty() ? QObject::tr("Layer %1").arg(QString::number(layerCount()+1))
        : name;
    m_graphics.insert(m_shapes->sizeZ(), new QList<ObjectGraphic *>());
    m_shapes->redim(m_shapes->sizeX(), m_shapes->sizeY(), m_shapes->sizeZ()+1, (Tile::Shape) 0);
    m_surfaceTypes->redim(m_shapes->sizeX(), m_shapes->sizeY(), m_shapes->sizeZ(), (Tile::SurfaceType) 0);
    m_layerNames << newLayerName;
}
Example #10
0
bool Sky::hasLayer(int index) const
{
    return index >= 0 && index < layerCount();
}
Example #11
0
void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
{
  // create layer set
  QStringList layerSet, layerSetOverview;

  int i;
  for ( i = 0; i < layers.size(); i++ )
  {
    QgsMapCanvasLayer &lyr = layers[i];
    if ( !lyr.layer() )
    {
      continue;
    }

    if ( lyr.isVisible() )
    {
      layerSet.push_back( lyr.layer()->id() );
    }

    if ( lyr.isInOverview() )
    {
      layerSetOverview.push_back( lyr.layer()->id() );
    }
  }

  const QStringList& layerSetOld = mapSettings().layers();

  bool layerSetChanged = layerSetOld != layerSet;

  // update only if needed
  if ( layerSetChanged )
  {
    QgsDebugMsg( "Layers changed to: " + layerSet.join( ", " ) );

    for ( i = 0; i < layerCount(); i++ )
    {
      // Add check if vector layer when disconnecting from selectionChanged slot
      // Ticket #811 - racicot
      QgsMapLayer *currentLayer = layer( i );
      if ( !currentLayer )
        continue;
      disconnect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
      disconnect( currentLayer, SIGNAL( layerCrsChanged() ), this, SLOT( layerCrsChange() ) );
      QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
      if ( isVectLyr )
      {
        disconnect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
      }
    }

    mSettings.setLayers( layerSet );

    for ( i = 0; i < layerCount(); i++ )
    {
      // Add check if vector layer when connecting to selectionChanged slot
      // Ticket #811 - racicot
      QgsMapLayer *currentLayer = layer( i );
      connect( currentLayer, SIGNAL( repaintRequested() ), this, SLOT( refresh() ) );
      connect( currentLayer, SIGNAL( layerCrsChanged() ), this, SLOT( layerCrsChange() ) );
      QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
      if ( isVectLyr )
      {
        connect( currentLayer, SIGNAL( selectionChanged() ), this, SLOT( selectionChangedSlot() ) );
      }
    }

    updateDatumTransformEntries();

    QgsDebugMsg( "Layers have changed, refreshing" );
    emit layersChanged();

    refresh();
  }

  if ( mMapOverview )
  {
    const QStringList& layerSetOvOld = mMapOverview->layerSet();
    if ( layerSetOvOld != layerSetOverview )
    {
      mMapOverview->setLayerSet( layerSetOverview );
    }

    // refresh overview maplayers even if layer set is the same
    // because full extent might have changed
    updateOverview();
  }
} // setLayerSet