示例#1
0
MapTile* Map::createMapTileWithoutBody (const SpriteDefPtr& spriteDef, gridCoord gridX, gridCoord gridY, EntityAngle angle)
{
	MapTile* mapTile;
	const SpriteType& type = spriteDef->type;
	if (SpriteTypes::isCave(type)) {
		mapTile = new CaveMapTile(*this, spriteDef->id, gridX, gridY);
	} else if (SpriteTypes::isBackground(type)) {
		mapTile = new MapTile(*this, spriteDef->id, gridX, gridY, EntityTypes::DECORATION);
	} else if (SpriteTypes::isWindow(type)) {
		mapTile = new WindowTile(*this, spriteDef->id, gridX, gridY);
	} else if (SpriteTypes::isLava(type)) {
		mapTile = new MapTile(*this, spriteDef->id, gridX, gridY, EntityTypes::LAVA);
	} else if (SpriteTypes::isPackageTarget(type)) {
		mapTile = new PackageTarget(*this, spriteDef->id, gridX, gridY);
	} else if (SpriteTypes::isGeyser(type)) {
		mapTile = new Geyser(*this, spriteDef->id, gridX, gridY, _initialGeyserDelay);
	} else if (SpriteTypes::isAnyGround(type) || SpriteTypes::isBridge(type)) {
		mapTile = new MapTile(*this, spriteDef->id, gridX, gridY, EntityTypes::GROUND);
	} else if (SpriteTypes::isSolid(type)) {
		mapTile = new MapTile(*this, spriteDef->id, gridX, gridY, EntityTypes::SOLID);
	} else {
		mapTile = new MapTile(*this, spriteDef->id, gridX, gridY, EntityTypes::DECORATION);
	}
	mapTile->setGridDimensions(spriteDef->width, spriteDef->height, angle);
	return mapTile;
}
示例#2
0
void GeoJson::extractPoint(const rapidjson::Value& _in, Point& _out, const MapTile& _tile) {
    
    glm::dvec2 tmp = _tile.getProjection()->LonLatToMeters(glm::dvec2(_in[0].GetDouble(), _in[1].GetDouble()));
    _out.x = (tmp.x - _tile.getOrigin().x) * _tile.getInverseScale();
    _out.y = (tmp.y - _tile.getOrigin().y) * _tile.getInverseScale();
    
}
示例#3
0
文件: Map.cpp 项目: Iv/FlyHigh
void Map::setZoom(int z)
{
	MapTile *pTile;
	int rowNr;
	int rows;
	int colNr;
	int cols;

	rows = m_tileMatrix.size();

	for(rowNr=0; rowNr<rows; rowNr++)
	{
		cols = m_tileMatrix[rowNr].size();

		for(colNr=0; colNr<cols; colNr++)
		{
			pTile = m_tileMatrix[rowNr][colNr];

			if(pTile != NULL)
			{
				pTile->setZoom(z);
			}
		}
	}

	m_zoom = z;
}
示例#4
0
void DebugTextStyle::addData(TileData& _data, MapTile& _tile, const MapProjection& _mapProjection) {

    if (Tangram::getDebugFlag(Tangram::DebugFlags::TILE_INFOS)) {
        onBeginBuildTile(_tile);

        std::shared_ptr<VboMesh> mesh(new Mesh(m_vertexLayout, m_drawMode));
        
        auto ftContext = m_labels->getFontContext();
        auto textBuffer = _tile.getTextBuffer(*this);

        ftContext->setFont(m_fontName, m_fontSize * m_pixelScale);

        if (m_sdf) {
            float blurSpread = 2.5;
            ftContext->setSignedDistanceField(blurSpread);
        }

        std::string tileID = std::to_string(_tile.getID().x) + "/" + std::to_string(_tile.getID().y) + "/" + std::to_string(_tile.getID().z);
        m_labels->addLabel(_tile, m_name, { glm::vec2(0), glm::vec2(0) }, tileID, Label::Type::DEBUG);

        onEndBuildTile(_tile, mesh);

        mesh->compileVertexBuffer();
        _tile.addGeometry(*this, mesh);
    }

}
示例#5
0
std::shared_ptr<TileData> GeoJsonSource::parse(const MapTile& _tile, std::stringstream& _in) {

    std::shared_ptr<TileData> tileData = std::make_shared<TileData>();

    // parse written data into a JSON object
    rapidjson::Document doc;
    doc.Parse(_in.str().c_str());

    if (doc.HasParseError()) {

        logMsg("Json parsing failed on tile [%d, %d, %d]\n", _tile.getID().z, _tile.getID().x, _tile.getID().y);
        return tileData;

    }

    // transform JSON data into a TileData using GeoJson functions
    for (auto layer = doc.MemberBegin(); layer != doc.MemberEnd(); ++layer) {
        tileData->layers.emplace_back(std::string(layer->name.GetString()));
        GeoJson::extractLayer(layer->value, tileData->layers.back(), _tile);
    }


    // Discard original JSON object and return TileData

    return tileData;

}
示例#6
0
bool MapTileLayer::addTile(const MapTileInfo& info, const Coordinate& position, const Coordinate& size, bool async)
{
    if(!info.blank)
    {
        const MapTileInfo& blank = MapViewLayer::Context.Loader->getBlankTile();
        MapTile* tile = MapTile::create(blank, size);
        tile->setPosition(position);
        // push blank tiles all way to the back
        addChild(tile, -100);
    }
    MapTile* tile = nullptr;
    if(async)
    {
        tile = MapTile::createAsync(info, size);
    }
    else
    {
        tile = MapTile::create(info, size);
    }
    tile->setPosition(position);
    
    // draw tiles with lower LOD first
    addChild(tile, -info.lod);
    
    return !tile->isLoaded();
}
示例#7
0
文件: engine.cpp 项目: jastadj/johnrl
bool Engine::validWalkableTile(MapChunk *tmap, int x, int y)
{
    if(tmap == NULL) return false;

    sf::Vector2i tpos(x,y);

    //check that tile is within map dimensions
    sf::Vector2i mapdim = tmap->getDimensions();
    if(x < 0 || y < 0 || x >= mapdim.x || y >= mapdim.y) return false;

    //check that tile is walkable
    MapTile *ttile = getMapTile( tmap->getTile(x,y) );
    if(!ttile->isWalkable()) return false;

    //check that there are no actors there
    std::vector<Monster*> *actors = tmap->getMapMonsters();
    for(int i = 0; i < int(actors->size()); i++)
    {
        if((*actors)[i]->getPosition() == tpos) return false;
    }

    //check if player is there
    if( m_Player->getPosition() == tpos) return false;

    return true;
}
示例#8
0
文件: engine.cpp 项目: jastadj/johnrl
void Engine::drawMap()
{

    for(int i = 0; i < m_CurrentMap->getDimensions().y; i++)
    {
        for(int n = 0; n < m_CurrentMap->getDimensions().x; n++)
        {
            MapTile *ttile = getMapTile( m_CurrentMap->getTile(n, i));

            if(posInViewport(n, i))
            {
                if( inFOV(m_Player->getPosition().x, m_Player->getPosition().y, n, i) )
                {
                    drawTileInViewport(n, i, ttile->getTileID(), ttile->getFGColor(), ttile->getBGColor());

                    if(!m_CurrentMap->tileExplored(n,i)) m_CurrentMap->setExplored(n, i, true);
                }
                else
                    if( m_CurrentMap->tileExplored(n, i) ) drawTileInViewport(n, i, ttile->getTileID(), SFC_WHITE, SFC_BLACK);

            }

        }
    }
}
示例#9
0
文件: Map.cpp 项目: jotak/shahnarman
// -----------------------------------------------------------------
// Name : changeTerrainType
// -----------------------------------------------------------------
void Map::changeTerrainType(CoordsMap pos, u8 uType, Server * pServer)
{
    MapTile * pTile = getTileAt(pos);
    pTile->m_uTerrainType = uType;
    if (pServer != NULL)
    {
        NetworkData msg(NETWORKMSG_CHANGE_TERRAIN);
        msg.addLong(pos.x);
        msg.addLong(pos.y);
        msg.addLong(uType);
        pServer->sendMessageToAllClients(&msg);
    }
    else
    {
        pTile->resetTexture(pTile->getDisplay());
        for (int i = -1; i <= 1; i++)
        {
            for (int j = -1; j <= 1; j++)
            {
                int x = pos.x + i;
                int y = pos.y + j;
                if (x < 0 || y < 0 || x >= m_iWidth || y >= m_iHeight)
                    continue;
                setTileMask(x, y);
            }
        }
    }
}
示例#10
0
void Style::addData(TileData& _data, MapTile& _tile, const MapProjection& _mapProjection) {
    onBeginBuildTile(_tile);

    std::shared_ptr<VboMesh> mesh(newMesh());

    for (auto& layer : _data.layers) {

        // Skip any layers that this style doesn't have a rule for
        auto it = m_layers.begin();
        while (it != m_layers.end() && it->first != layer.name) { ++it; }
        if (it == m_layers.end()) { continue; }

        // Loop over all features
        for (auto& feature : layer.features) {

            /*
             * TODO: do filter evaluation for each feature for sublayer!
             *     construct a unique ID for a the set of filters matched
             *     use this ID pass to the style's parseStyleParams method to construct styleParam cache
             *     NOTE: for the time being use layerName as ID for cache
             */

            feature.props.numericProps["zoom"] = _tile.getID().z;

            switch (feature.geometryType) {
                case GeometryType::POINTS:
                    // Build points
                    for (auto& point : feature.points) {
                        buildPoint(point, parseStyleParams(it->first, it->second), feature.props, *mesh);
                    }
                    break;
                case GeometryType::LINES:
                    // Build lines
                    for (auto& line : feature.lines) {
                        buildLine(line, parseStyleParams(it->first, it->second), feature.props, *mesh);
                    }
                    break;
                case GeometryType::POLYGONS:
                    // Build polygons
                    for (auto& polygon : feature.polygons) {
                        buildPolygon(polygon, parseStyleParams(it->first, it->second), feature.props, *mesh);
                    }
                    break;
                default:
                    break;
            }
        }
    }

    onEndBuildTile(_tile, mesh);

    if (mesh->numVertices() == 0) {
        mesh.reset();
    } else {
        mesh->compileVertexBuffer();

        _tile.addGeometry(*this, mesh);
    }
}
示例#11
0
bool AppStateGameMode::render(sf::RenderTarget& target, int frame)
{
  // Set focus for areas.
  the_message_log.set_focus(pImpl->current_input_state == GameInputState::MessageLog);
  pImpl->status_area->set_focus(pImpl->current_input_state == GameInputState::Map);

  ThingRef player = TM.get_player();
  ThingRef location = player->get_location();

  if (location == TM.get_mu())
  {
    throw std::exception("Uh oh, the player's location appears to have been deleted!");
  }

  /// @todo We need a way to determine if the player is directly on a map,
  ///       and render either the map, or a container interior.
  ///       Should probably use an overridden "render_surroundings" method
  ///       for Things.

  if (!player->is_inside_another_thing())
  {
    MapTile* tile = player->get_maptile();
    if (tile != nullptr)
    {
      Map& game_map = MF.get(tile->get_map_id());
      sf::Vector2i tile_coords = tile->get_coords();
      sf::Vector2f player_pixel_coords = MapTile::get_pixel_coords(tile_coords);
      sf::Vector2f cursor_pixel_coords = MapTile::get_pixel_coords(pImpl->cursor_coords);

      // Update thing vertex array.
      game_map.update_thing_vertices(player, frame);

      if (pImpl->current_input_state == GameInputState::CursorLook)
      {
        game_map.set_view(target, cursor_pixel_coords, pImpl->map_zoom_level);
        game_map.draw_to(target);

        auto& cursor_tile = game_map.get_tile(pImpl->cursor_coords);
        cursor_tile.draw_highlight(target,
                                   cursor_pixel_coords,
                                   Settings.get<sf::Color>("cursor_border_color"),
                                   Settings.get<sf::Color>("cursor_bg_color"),
                                   frame);
      }
      else
      {
        game_map.set_view(target, player_pixel_coords, pImpl->map_zoom_level);
        game_map.draw_to(target);
      }
    }
  }

  the_message_log.render(target, frame);
  pImpl->status_area->render(target, frame);
  pImpl->inventory_area->render(target, frame);

  return true;
}
示例#12
0
bool Map::load (const std::string& name)
{
	ScopedPtr<IMapContext> ctx(getMapContext(name));

	resetCurrentMap();

	if (name.empty()) {
		info(LOG_MAP, "no map name given");
		return false;
	}

	info(LOG_MAP, "load map " + name);

	if (!ctx->load(false)) {
		error(LOG_MAP, "failed to load the map " + name);
		return false;
	}

	ctx->save();
	_settings = ctx->getSettings();
	_startPositions = ctx->getStartPositions();
	_name = ctx->getName();
	_title = ctx->getTitle();
	_width = getSetting(msn::WIDTH, "-1").toInt();
	_height = getSetting(msn::HEIGHT, "-1").toInt();
	_solution = getSolution();
	const std::string solutionSteps = string::toString(_solution.length());
	_settings.insert(std::make_pair("best", solutionSteps));
	info(LOG_MAP, "Solution has " + solutionSteps + " steps");

	if (_width <= 0 || _height <= 0) {
		error(LOG_MAP, "invalid map dimensions given");
		return false;
	}

	const std::vector<MapTileDefinition>& mapTileList = ctx->getMapTileDefinitions();
	for (std::vector<MapTileDefinition>::const_iterator i = mapTileList.begin(); i != mapTileList.end(); ++i) {
		const SpriteType& t = i->spriteDef->type;
		info(LOG_MAP, "sprite type: " + t.name + ", " + i->spriteDef->id);
		MapTile *mapTile = new MapTile(*this, i->x, i->y, getEntityTypeForSpriteType(t));
		mapTile->setSpriteID(i->spriteDef->id);
		mapTile->setAngle(randBetweenf(-0.1, 0.1f));
		loadEntity(mapTile);
	}

	info(LOG_MAP, String::format("map loading done with %i tiles", mapTileList.size()));

	ctx->onMapLoaded();

	_frontend->onMapLoaded();
	const LoadMapMessage msg(_name, _title);
	_serviceProvider->getNetwork().sendToAllClients(msg);

	_mapRunning = true;
	return true;
}
示例#13
0
void WarpTile::reopen() {
    holePixmap.setVisible(true);
    holeOpen = true;
    if(position().x() < MAPW/2) {
        MapTile *mt = playfield->tileAt(position() + QPoint(1,0));
        if(mt->walls() & MT_W) mt->setWalls(mt->walls() - MT_W);
    } else {
        if(walls() & MT_W) setWalls(walls() - MT_W);
    }
}
示例#14
0
文件: Map.cpp 项目: zyphrus/Akaro
	void Map::render ( const Ldouble& delta, graphics::TextureManager* textures , etc::Camera& camera )
	{
		std::vector<graphics::drawable*> tiles;
		this->map.getSpritesFromArea( camera.getViewport() , &tiles );
		for ( auto t : tiles )
		{
			MapTile* tile = (MapTile*)t;
			tile->render( delta , textures , camera );
		}
	}
示例#15
0
float MapMgr::GetZ(float x, float y)
{
    GridCoordPair gcoords = GetTransformGridCoordPair(x,y);
    MapTile *tile = _tiles->GetTile(gcoords.x,gcoords.y);
    if(tile)
    {
        return tile->GetZ(x,y);
    }

    logerror("MapMgr::GetZ() called for not loaded MapTile (%u, %u) for (%f, %f)",gcoords.x,gcoords.y,x,y);
    return INVALID_HEIGHT;
}
示例#16
0
void BattleLayer::cardBattleLose()
{
	removeChild(m_cardbattleLayer);
	
	m_curTile->setMark(MapTile::None);
	
	cocos2d::CCCallFunc* callback = CCCallFunc::create(this, callfunc_selector(BattleLayer::fight));
	MapTile* nextTile = m_terrain->getTileByID(m_curTile->getNextTile());
	m_enemySprite->runAction(CCSequence::create(CCMoveTo::create(1.0, nextTile->getPosition()),callback,NULL));
	m_curTile = nextTile;
	
	updateEnemyHpBar();
}
示例#17
0
void DebugStyle::addData(TileData &_data, MapTile &_tile, const MapProjection &_mapProjection) {

    if (Tangram::getDebugFlag(Tangram::DebugFlags::TILE_BOUNDS)) {

        Mesh* mesh = new Mesh(m_vertexLayout, m_drawMode);

        // Add four vertices to draw the outline of the tile in red

        std::vector<PosColVertex> vertices;

        GLuint abgr = 0xff0000ff;

        vertices.reserve(4);
        vertices.push_back({{ -1.f, -1.f, 0.f }, abgr });
        vertices.push_back({{  1.f, -1.f, 0.f }, abgr });
        vertices.push_back({{  1.f,  1.f, 0.f }, abgr });
        vertices.push_back({{ -1.f,  1.f, 0.f }, abgr });

        mesh->addVertices(std::move(vertices), { 0, 1, 2, 3, 0 });
        mesh->compileVertexBuffer();

        _tile.addGeometry(*this, std::unique_ptr<VboMesh>(mesh));

    }

}
示例#18
0
QPointF WarpTile::warpTo() {
    if(!holeOpen)
        return pos();
    Q_ASSERT(targetTile);
    holePixmap.setVisible(false);
    holeOpen = false;
    closedTimer.start(5000);
    targetTile->warpTo();
    if(position().x() < MAPW/2) {
        MapTile *mt = playfield->tileAt(position() + QPoint(1,0));
        mt->setWalls(mt->walls() | MT_W);
    } else {
        setWalls(walls() | MT_W);
    }
    return targetTile->pos();
}
示例#19
0
std::shared_ptr<TileData> GeoJsonSource::parse(const MapTile& _tile, std::vector<char>& _rawData) const {

    std::shared_ptr<TileData> tileData = std::make_shared<TileData>();

    // parse written data into a JSON object
    rapidjson::Document doc;

    rapidjson::MemoryStream ms(_rawData.data(), _rawData.size());
    rapidjson::EncodedInputStream<rapidjson::UTF8<char>, rapidjson::MemoryStream> is(ms);

    doc.ParseStream(is);

    if (doc.HasParseError()) {

        size_t offset = doc.GetErrorOffset();
        const char* error = rapidjson::GetParseError_En(doc.GetParseError());
        logMsg("Json parsing failed on tile [%d, %d, %d]: %s (%u)\n", _tile.getID().z, _tile.getID().x, _tile.getID().y, error, offset);
        return tileData;

    }

    // transform JSON data into a TileData using GeoJson functions
    for (auto layer = doc.MemberBegin(); layer != doc.MemberEnd(); ++layer) {
        tileData->layers.emplace_back(std::string(layer->name.GetString()));
        GeoJson::extractLayer(layer->value, tileData->layers.back(), _tile);
    }


    // Discard original JSON object and return TileData

    return tileData;

}
示例#20
0
void MapMgr::_LoadTile(uint32 gx, uint32 gy, uint32 m)
{
    _mapsLoaded = false;
    if(!_tiles->TileExists(gx,gy))
    {
        if(TileExistsInFile(m,gx,gy))
        {
            logerror("MapMgr: Tile (%u, %u) exists not in WDT, but as file?!",gx,gy);
            // continue loading...
        }
        else
        {
            logerror("MAPMGR: Not loading MapTile (%u, %u) map %u, no entry in WDT tile map",gx,gy,m);
            return;
        }
    }

    if( !_tiles->GetTile(gx,gy) )
    {

        char buf[300];
        MakeMapFilename(buf,m,gx,gy);
        MemoryDataHolder::MemoryDataResult mdr = MemoryDataHolder::GetFileBasic(buf);
        if(mdr.flags & MemoryDataHolder::MDH_FILE_OK && mdr.data.size)
        {
            ByteBuffer bb(mdr.data.size);
            bb.append(mdr.data.ptr,mdr.data.size);
            MemoryDataHolder::Delete(buf);
            ADTFile *adt = new ADTFile();
            adt->LoadMem(bb);
            logdebug("MAPMGR: Loaded ADT '%s'",buf);
            MapTile *tile = new MapTile();
            tile->ImportFromADT(adt);
            delete adt;
            _tiles->SetTile(tile,gx,gy);
            logdebug("MAPMGR: Imported MapTile (%u, %u) for map %u",gx,gy,m);
        }
        else
        {
            logerror("MAPMGR: Loading ADT '%s' failed!",buf);
        }
    }
    else
    {
        logdebug("MAPMGR: No need to load MapTile (%u, %u) map %u",gx,gy,m);
    }
}
示例#21
0
文件: Bar.cpp 项目: bschalich/Taverna
Bar::Bar(int i, int j, int xSize, int zSize) {
   this->i = i;
   this->j = j;
   barPos = Vector3(i, 0, j);
   barkeepTile = Vector3(i + 1, 0 , j + 1);

   for (int index = i; index < i + xSize; index++) {
      for (int index2 = j; index2 < j + zSize; index2++) {

	 if (index == i) {
	    patronTiles.push_back(Vector3(index - 1, 0, index2));
	 }
	 if (index2 == j) {
	    patronTiles.push_back(Vector3(index, 0, index2 - 1));
	 }
	 if (index == i + xSize  -1) {
	    patronTiles.push_back(Vector3(index + 1, 0, index2));
	 }
	 if (index2 == j + zSize - 1) {
	    patronTiles.push_back(Vector3(index, 0, index2 + 1));
	 }
	 MapTile *barTile = GameData::getInstance()->getGameMap()->getMapTile(index, index2);
	 barTile->setPrimitive(new ScenePrimitive(ScenePrimitive::TYPE_BOX, 5, 8, 5), "WoodMaterial", 6, true);
      }
   }

   for (int index = i + 1; index < i - 1 + xSize; index++) {
      for (int index2 = j + 1; index2 < j - 1 + zSize; index2++) {
	 MapTile *barTile = GameData::getInstance()->getGameMap()->getMapTile(index, index2);
	 barTile->removeObject(index, index2);
      }
   }
   
   MapTile * temp = GameData::getInstance()->getGameMap()->getMapTile(i + xSize - 2, j + 1);
   temp->setObject("barrel_03.mesh", "BitgemMaterial", 4, true);
   temp->getObject()->setScale(0.1, 0.1, 0.1);

   
   SceneMesh *object = new SceneMesh("barrel_01.mesh");
   object->depthTest = true;
   object->depthWrite = true;
   object->setPosition(i*5, 4.5, j*5);
   object->setMaterialByName("BitgemMaterial");
   object->setScale(0.06, 0.06, 0.06);
   GameData::getInstance()->getScene3D()->addChild(object);
   
   
   
   /*ScenePrimitive *objectShadow;
   objectShadow = new ScenePrimitive(ScenePrimitive::TYPE_CIRCLE, 5, 5, 20);
   objectShadow->setPitch(-90);
   objectShadow->depthTest = true;
   objectShadow->depthWrite = true;
   objectShadow->setPosition(i*5, 6, i*5);
   objectShadow->setMaterialByName("SolidMaterial");
   objectShadow->setColor(1, 1, 1, 0.3);
   GameData::getInstance()->getScene3D()->addChild(objectShadow);
   */
   TavernResources::getInstance()->barList.push_back(this);
}
示例#22
0
bool Map::undoPackage (int col, int row, int targetCol, int targetRow)
{
	MapTile* package = getPackage(col, row);
	if (package != nullptr) {
		info(LOG_SERVER, "move package back");
		rebuildField();
		const int origCol = package->getCol();
		const int origRow = package->getRow();
		if (!package->setPos(targetCol, targetRow))
			return false;
		rebuildField();
		const int index = INDEX(targetCol, targetRow);
		StateMapConstIter i = _state.find(index);
		if (i == _state.end()) {
			package->setPos(origCol, origRow);
			return false;
		}

		const char c = i->second;
		if (c == Sokoban::PACKAGEONTARGET)
			package->setState(CavePackerEntityStates::DELIVERED);
		else
			package->setState(CavePackerEntityStates::NONE);

		--_pushes;
		return true;
	}
	info(LOG_SERVER, "don't move package back");
	return false;
}
示例#23
0
bool BattleLayer::checkGuardBuff(int x, int y)
{
	MapTile* tile = m_terrain->getTileByCoordinate(x, y);
	if(!tile)
		return false;
	
	if(tile->getMark() == MapTile::Guard1)
	{
		m_preventEnemyBuff++;
		m_enemycards[m_curEnemy]->buffHP(-0.1);
		MapTile::TileMark mark = m_curTile->getMark();
		if(mark == MapTile::Card1 || mark == MapTile::Card2 || mark == MapTile::Card3)
		{
			m_herocards[m_curTile->getMark()]->buffAtk(0.1);
		}
		
		m_guardLabel->setString("攻击守卫");
		m_guardLabel->runAction(CCSequence::create(CCShow::create(), CCDelayTime::create(c_trapDelayTime), CCHide::create(), NULL));
		
		
		return true;
	}
	
	if(tile->getMark() == MapTile::Guard2)
	{
		m_preventEnemyBuff++;
		MapTile::TileMark mark = m_curTile->getMark();
		if(mark == MapTile::Card1 || mark == MapTile::Card2 || mark == MapTile::Card3)
		{
			m_herocards[m_curTile->getMark()]->buffDef(0.1);
			m_herocards[m_curTile->getMark()]->buffHP(0.3);
		}
		
		m_guardLabel->setString("守护守卫");
		m_guardLabel->runAction(CCSequence::create(CCShow::create(), CCDelayTime::create(c_trapDelayTime), CCHide::create(), NULL));
		
		
		return true;
	}
	
	return true;
}
示例#24
0
unsigned int World::getAreaID()
{
	MapTile *curTile;

	int mtx,mtz,mcx,mcz;
	mtx = (int) (camera.x / TILESIZE);
	mtz = (int) (camera.z / TILESIZE);
	mcx = (int) (fmod(camera.x, TILESIZE) / CHUNKSIZE);
	mcz = (int) (fmod(camera.z, TILESIZE) / CHUNKSIZE);

	if ((mtx<cx-1) || (mtx>cx+1) || (mtz<cz-1) || (mtz>cz+1)) return 0;
	
	curTile = current[mtz-cz+1][mtx-cx+1];
	if(curTile == 0) return 0;

	MapChunk *curChunk = curTile->getChunk(mcx, mcz);

	if(curChunk == 0) return 0;

	return curChunk->areaID;
}
示例#25
0
void BattleLayer::copyTerrainTile(TerrainMap *terrain)
{
	if(m_terrain)
	{
		m_terrain->removeFromParent();
		m_terrain = NULL;
	}
	
	m_terrain = new TerrainMap;
	m_terrain->autorelease();
	addChild(m_terrain);
	
	CCArray* children = terrain->getChildren();
	for (int i = children->count()-1; i > -1; i--)
	{
		MapTile* node = (MapTile*)children->objectAtIndex(i);
		node->retain();
		node->removeFromParent();
		m_terrain->addTile(node);
		node->release();
	}
}
示例#26
0
void MapTile::lock() {
	if (state_ == DEADBEEF) {
		return;
	}

	if (locked++ > 0) {
		return;
	}

	MapTile *p;
	for (int i = 0; i < 4; i++) {
		p = (MapTile *)pNode->child(i);
		if (p == NULL)
			continue;
		if (p->state(READY | NEW_DATA)) {
			proxy |= (1 << i);
			p->refs++;
		}
	}

	if (pNode->isRoot())
		return;

	p = (MapTile *)pNode->parent();
	if (p != NULL && p->state(READY | NEW_DATA)) {
		proxy |= PROXY_PARENT;
		p->refs++;
	}

	if (pNode->pParent->isRoot())
		return;
	p = (MapTile *)pNode->pParent->parent();
	if (p != NULL && p->state(READY | NEW_DATA)) {
		proxy |= PROXY_GRAMPA;
		p->refs++;
	}
}
示例#27
0
void TileLoader::finishedRequest(QNetworkReply *reply) {
  const QNetworkRequest request = reply->request();

  //  find corresponding tile
  MapTile *tile = 0;
  for (MapTile &t : tiles_) {
    if (t.reply() == reply) {
      tile = &t;
    }
  }
  if (!tile) {
    //  removed from list already, ignore this reply
    return;
  }

  if (reply->error() == QNetworkReply::NoError) {
    //  decode an image
    QImageReader reader(reply);
    if (reader.canRead()) {
      QImage image = reader.read();
      tile->setImage(image);
      emit receivedImage(request);
    } else {
      //  probably not an image
      QString err;
      err = "Unable to decode image at " + request.url().toString();
      emit errorOcurred(err);
    }
  } else {
    QString err;
    err = "Failed loading " + request.url().toString();
    err += " with code " + QString::number(reply->error());
    emit errorOcurred(err);
  }

   emit finishedLoading();
}
示例#28
0
void DebugTextStyle::addData(TileData& _data, MapTile& _tile, const MapProjection& _mapProjection) {

    if (Tangram::getDebugFlag(Tangram::DebugFlags::TILE_INFOS)) {
        onBeginBuildTile(_tile);

        Mesh* mesh = new Mesh(m_vertexLayout, m_drawMode);

        auto labelContainer = LabelContainer::GetInstance();
        auto ftContext = labelContainer->getFontContext();
        auto textBuffer = _tile.getTextBuffer(*this);

        ftContext->setFont(m_fontName, m_fontSize * m_pixelScale);

        if (m_sdf) {
            float blurSpread = 2.5;
            ftContext->setSignedDistanceField(blurSpread);
        }

        std::string tileID = std::to_string(_tile.getID().x) + "/" + std::to_string(_tile.getID().y) + "/" + std::to_string(_tile.getID().z);
        labelContainer->addLabel(_tile, m_name, { glm::vec2(0), glm::vec2(0) }, tileID, Label::Type::DEBUG);

        std::vector<PosTexID> vertices;
        vertices.resize(textBuffer->getVerticesSize());

        if (textBuffer->getVertices(reinterpret_cast<float*>(vertices.data()))) {
            mesh->addVertices(std::move(vertices), {});
        }

        mesh->compileVertexBuffer();

        _tile.addGeometry(*this, std::unique_ptr<VboMesh>(mesh));

        onEndBuildTile(_tile);
    }

}
示例#29
0
bool Map::movePlayer (Player* player, char step)
{
	int x;
	int y;
	getXY(step, x, y);
	debug(LOG_SERVER, String::format("move player %i:%i (current: %i:%i)", x, y, player->getCol(), player->getRow()));
	// move player and move touching packages
	const int targetCol = player->getCol() + x;
	const int targetRow = player->getRow() + y;
	MapTile* package = getPackage(targetCol, targetRow);
	if (package != nullptr) {
		const int pCol = targetCol + x;
		const int pRow = targetRow + y;
		if (!isFree(pCol, pRow)) {
			debug(LOG_SERVER, "can't move here - can't move package. target field is blocked");
			return false;
		}
		if (!package->setPos(pCol, pRow)) {
			debug(LOG_SERVER, "failed to move the package - thus can't move the player");
			return false;
		}
		debug(LOG_SERVER, String::format("moved package %i", package->getID()));
		increasePushes();
		rebuildField();
		if (isTarget(pCol, pRow)) {
			package->setState(CavePackerEntityStates::DELIVERED);
			debug(LOG_SERVER, String::format("mark package as delivered %i", package->getID()));
		} else if (package->getState() == CavePackerEntityStates::DELIVERED) {
			debug(LOG_SERVER, String::format("reset package state %i", package->getID()));
			package->setState(CavePackerEntityStates::NONE);
		}
		// sokoban standard - if a package was moved, the move char is uppercase
		step = toupper(step);
	}
	if (!player->setPos(targetCol, targetRow)) {
		debug(LOG_SERVER, "failed to move the player");
		return false;
	}

	player->storeStep(step);
	increaseMoves();
	return true;
}
示例#30
0
//-----------------------------------------------------------------------------------------------
void PrepareForBattle( int playerID, const ArenaInfo& arenaInfo )
{
	InitializeCriticalSection( &cs_ordersAndResults );

	gameInfo.g_playerID = playerID;
    gameInfo.g_arenaInfo = arenaInfo;
    gameInfo.secondsSinceLastFetchOrders = GetAbsoluteTimeSeconds();

    if( gameInfo.g_arenaInfo.numPlayers == 1 )
        gameInfo.currentStrategy = GameInfo::STRATEGY_SOLO;

    gameInfo.g_mapTiles = std::vector< MapTile >( arenaInfo.width * arenaInfo.height );
    vec3 mapSize( arenaInfo.width, arenaInfo.height, 0.0f );

    MapTile initializingDefaultGCosts;
    initializingDefaultGCosts.setNodeTypeID( "dirt" );
    initializingDefaultGCosts.setDefaultGCost( 0.5f );
    initializingDefaultGCosts.setNodeTypeID( "stone" );
    initializingDefaultGCosts.setDefaultGCost( 0.0f );
    initializingDefaultGCosts.setNodeTypeID( "food" );
    initializingDefaultGCosts.setNodeTypeID( "unknown" );

    for( int y = 0; y < arenaInfo.height; ++y )
    {
        for( int x = 0; x < arenaInfo.width; ++x )
        {
            MapTile& currentTile = gameInfo.g_mapTiles[ y * arenaInfo.width + x ];
            currentTile.setType( ARENA_SQUARE_TYPE_UNKNOWN );
            currentTile.setPosition( vec3( x, y, 0.0f ) );

            for( int sign = -1; sign <= 1; sign += 2 )
            {
                for( int axis = 0; axis < 2; ++axis)
                {
                    vec3 neighorPos( x, y, 0.0f );
                    neighorPos[axis] += sign;

                    if( neighorPos[axis] >= 0 && neighorPos[axis] < mapSize[axis] )
                    {
                        currentTile.addNeighbor( &gameInfo.g_mapTiles[neighorPos.y * mapSize.x + neighorPos.x] );
                    }
                }
            }
        }
    }

	//DebuggerPrintf( "[%d] PrepareForBattle called; arena is %dx%d, with %d players\n", g_playerID, arenaInfo.width, arenaInfo.height, arenaInfo.numPlayers );
}