| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | /* * MapView.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */#include "StdInc.h"#include "MapView.h"#include "MapViewActions.h"#include "MapViewCache.h"#include "MapViewController.h"#include "MapViewModel.h"#include "mapHandler.h"#include "../CGameInfo.h"#include "../CPlayerInterface.h"#include "../adventureMap/CAdvMapInt.h"#include "../gui/CGuiHandler.h"#include "../render/CAnimation.h"#include "../render/Canvas.h"#include "../render/IImage.h"#include "../renderSDL/SDL_Extensions.h"#include "../../CCallback.h"#include "../../lib/CConfigHandler.h"#include "../../lib/mapObjects/CGHeroInstance.h"#include "../../lib/mapping/CMap.h"BasicMapView::~BasicMapView() = default;std::shared_ptr<MapViewModel> BasicMapView::createModel(const Point & dimensions) const{	auto result = std::make_shared<MapViewModel>();	result->setLevel(0);	result->setTileSize(Point(32, 32));	result->setViewCenter(Point(0, 0));	result->setViewDimensions(dimensions);	return result;}BasicMapView::BasicMapView(const Point & offset, const Point & dimensions)	: model(createModel(dimensions))	, tilesCache(new MapViewCache(model))	, controller(new MapViewController(model, tilesCache)){	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;	pos += offset;	pos.w = dimensions.x;	pos.h = dimensions.y;}void BasicMapView::render(Canvas & target, bool fullUpdate){	Canvas targetClipped(target, pos);	controller->update(GH.mainFPSmng->getElapsedMilliseconds());	tilesCache->update(controller->getContext());	tilesCache->render(controller->getContext(), targetClipped, fullUpdate);}void BasicMapView::show(SDL_Surface * to){	Canvas target(to);	CSDL_Ext::CClipRectGuard guard(to, pos);	render(target, false);}void BasicMapView::showAll(SDL_Surface * to){	Canvas target(to);	CSDL_Ext::CClipRectGuard guard(to, pos);	render(target, true);}void MapView::show(SDL_Surface * to){	actions->setContext(controller->getContext());	BasicMapView::show(to);}MapView::MapView(const Point & offset, const Point & dimensions)	: BasicMapView(offset, dimensions)	, isSwiping(false){	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;	actions = std::make_shared<MapViewActions>(*this, model);	actions->setContext(controller->getContext());}void MapView::onMapLevelSwitched(){	if(LOCPLINT->cb->getMapSize().z > 1)	{		if(model->getLevel() == 0)			controller->setViewCenter(model->getMapViewCenter(), 1);		else			controller->setViewCenter(model->getMapViewCenter(), 0);	}}void MapView::onMapScrolled(const Point & distance){	if(!isSwiping)		controller->setViewCenter(model->getMapViewCenter() + distance, model->getLevel());}void MapView::onMapSwiped(const Point & viewPosition){	isSwiping = true;	controller->setViewCenter(viewPosition, model->getLevel());}void MapView::onMapSwipeEnded(){	isSwiping = false;}void MapView::onCenteredTile(const int3 & tile){	controller->setViewCenter(tile);}void MapView::onCenteredObject(const CGObjectInstance * target){	controller->setViewCenter(target->getSightCenter());}void MapView::onViewSpellActivated(uint32_t tileSize, const std::vector<ObjectPosInfo> & objectPositions, bool showTerrain){	controller->activateSpellViewContext();	controller->setTileSize(Point(tileSize, tileSize));	controller->setOverlayVisibility(objectPositions);	controller->setTerrainVisibility(showTerrain);}void MapView::onViewWorldActivated(uint32_t tileSize){	controller->activateWorldViewContext();	controller->setTileSize(Point(tileSize, tileSize));}void MapView::onViewMapActivated(){	controller->activateAdventureContext();	controller->setTileSize(Point(32, 32));}PuzzleMapView::PuzzleMapView(const Point & offset, const Point & dimensions, const int3 & tileToCenter)	: BasicMapView(offset, dimensions){	controller->setViewCenter(tileToCenter);	controller->activatePuzzleMapContext(tileToCenter);}
 |