ApartmentGrid::ApartmentGrid (int idBuilding, int type, int nbFloors, double side_X, double side_Y, double center_X, double center_Y) { SetIdBuilding(idBuilding); SetBuildingType(TYPE_3GPP_5x5_grid); SetFloors(nbFloors); double* side = new double[2]; side [0] = side_X; side [1] = side_Y; SetSide(side); CartesianCoordinates *Position = new CartesianCoordinates(center_X,center_Y); SetCenterPosition(Position); std::vector<Femtocell*>* femtoCellsInBuilding = new std::vector<Femtocell*>; SetFemtoCellsInBuilding(femtoCellsInBuilding); }
/** @brief カメラを用いて描画空間の一部を虫眼鏡のような表示で描画するサンプル。 */ void CameraObject2D_Magnify() { // Altseedを初期化する。 asd::Engine::Initialize(asd::ToAString("CameraObject2D_Magnify").c_str(), 640, 480, asd::EngineOption()); // 画像を読み込み、画像描画オブジェクトを設定する。 { auto tex0 = asd::Engine::GetGraphics()->CreateTexture2D(asd::ToAString("Data/Texture/Sample1.png").c_str()); auto obj0 = std::make_shared<asd::TextureObject2D>(); obj0->SetTexture(tex0); obj0->SetCenterPosition(asd::Vector2DF(256, 256)); obj0->SetPosition(asd::Vector2DF(320, 240)); obj0->SetScale(asd::Vector2DF(0.5f, 0.5f)); asd::Engine::AddObject2D(obj0); } //一つ目の画面全体を写すカメラ。(オブジェクトをそのまま描画する。) { auto entityCamera = std::make_shared<asd::CameraObject2D>(); entityCamera->SetSrc(asd::RectI(0, 0, 640, 480)); entityCamera->SetDst(asd::RectI(0, 0, 640, 480)); asd::Engine::AddObject2D(entityCamera); } //二つ目のマウスポインタの周辺を拡大して表示するカメラ。 auto camera2 = std::make_shared<asd::CameraObject2D>(); asd::Engine::AddObject2D(camera2); //フレーム用画像を読み込む auto frame = std::make_shared<asd::TextureObject2D>(); { auto tex = asd::Engine::GetGraphics()->CreateTexture2D(asd::ToAString("Data/Texture/Frame.png").c_str()); frame->SetTexture(tex); frame->SetCenterPosition(asd::Vector2DF(55.0f, 55.0f)); asd::Engine::AddObject2D(frame); } // Altseedのウインドウが閉じられていないか確認する。 while (asd::Engine::DoEvents()) { //マウスポインタの位置を取得する。 auto pos = asd::Engine::GetMouse()->GetPosition(); //拡大用カメラの描画元を指定する。 camera2->SetSrc(asd::RectI((int)(pos.X) - 25, (int)(pos.Y) - 25, 50, 50)); //ポインタを中心に100x100の拡大画像を表示する。 camera2->SetDst(asd::RectI((int)(pos.X) - 50, (int)(pos.Y) - 50, 100, 100)); //フレーム画像の描画中心をマウスポインタの位置に合わせる。 frame->SetPosition(pos); // Altseedを更新する。 asd::Engine::Update(); } // Altseedの終了処理をする。 asd::Engine::Terminate(); }
testsystem_instanced_magmadar() : SingleTest("testsystem_instanced_magmadar", MAP_MOLTEN_CORE, true) { SetCenterPosition(1136, -1028, -185.5); }
void CPythonMiniMap::Update(float fCenterX, float fCenterY) { CPythonBackground& rkBG=CPythonBackground::Instance(); if (!rkBG.IsMapOutdoor()) return; // 미니맵 그림 갱신 if (m_fCenterX != fCenterX || m_fCenterY != fCenterY ) SetCenterPosition(fCenterX, fCenterY); // 캐릭터 리스트 갱신 m_OtherPCPositionVector.clear(); m_PartyPCPositionVector.clear(); m_NPCPositionVector.clear(); m_MonsterPositionVector.clear(); m_WarpPositionVector.clear(); float fooCellScale = 1.0f / ((float) CTerrainImpl::CELLSCALE); CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance(); CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr(); if (!pkInstMain) return; CPythonCharacterManager::CharacterIterator i; for(i = rkChrMgr.CharacterInstanceBegin(); i!=rkChrMgr.CharacterInstanceEnd(); ++i) { CInstanceBase* pkInstEach=*i; TPixelPosition kInstancePosition; pkInstEach->NEW_GetPixelPosition(&kInstancePosition); float fDistanceFromCenterX = (kInstancePosition.x - m_fCenterX) * fooCellScale * m_fScale; float fDistanceFromCenterY = (kInstancePosition.y - m_fCenterY) * fooCellScale * m_fScale; if (fabs(fDistanceFromCenterX) >= m_fMiniMapRadius || fabs(fDistanceFromCenterY) >= m_fMiniMapRadius) continue; float fDistanceFromCenter = sqrtf(fDistanceFromCenterX * fDistanceFromCenterX + fDistanceFromCenterY * fDistanceFromCenterY ); if ( fDistanceFromCenter >= m_fMiniMapRadius ) continue; TMarkPosition aMarkPosition; if (pkInstEach->IsPC() && !pkInstEach->IsInvisibility()) { if (pkInstEach == CPythonCharacterManager::Instance().GetMainInstancePtr()) continue; aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX; aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY; aMarkPosition.m_eNameColor=pkInstEach->GetNameColorIndex(); if (aMarkPosition.m_eNameColor==CInstanceBase::NAMECOLOR_PARTY) m_PartyPCPositionVector.push_back(aMarkPosition); else m_OtherPCPositionVector.push_back(aMarkPosition); } else if (pkInstEach->IsNPC()) { aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX; aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY; m_NPCPositionVector.push_back(aMarkPosition); } else if (pkInstEach->IsEnemy()) { aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX; aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY; m_MonsterPositionVector.push_back(aMarkPosition); } else if (pkInstEach->IsWarp()) { aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX; aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY; m_WarpPositionVector.push_back(aMarkPosition); } } { DWORD dwCurTime=ELTimer_GetMSec(); std::map<DWORD, SObserver>::iterator i; for (i=m_kMap_dwVID_kObserver.begin(); i!=m_kMap_dwVID_kObserver.end(); ++i) { SObserver& rkObserver=i->second; float fPos=float(dwCurTime-rkObserver.dwSrcTime)/float(rkObserver.dwDstTime-rkObserver.dwSrcTime); if (fPos<0.0f) fPos=0.0f; else if (fPos>1.0f) fPos=1.0f; rkObserver.fCurX=(rkObserver.fDstX-rkObserver.fSrcX)*fPos+rkObserver.fSrcX; rkObserver.fCurY=(rkObserver.fDstY-rkObserver.fSrcY)*fPos+rkObserver.fSrcY; TPixelPosition kInstancePosition; kInstancePosition.x=rkObserver.fCurX; kInstancePosition.y=rkObserver.fCurY; kInstancePosition.z=0.0f; float fDistanceFromCenterX = (kInstancePosition.x - m_fCenterX) * fooCellScale * m_fScale; float fDistanceFromCenterY = (kInstancePosition.y - m_fCenterY) * fooCellScale * m_fScale; if (fabs(fDistanceFromCenterX) >= m_fMiniMapRadius || fabs(fDistanceFromCenterY) >= m_fMiniMapRadius) continue; float fDistanceFromCenter = sqrtf(fDistanceFromCenterX * fDistanceFromCenterX + fDistanceFromCenterY * fDistanceFromCenterY ); if ( fDistanceFromCenter >= m_fMiniMapRadius ) continue; TMarkPosition aMarkPosition; aMarkPosition.m_fX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX; aMarkPosition.m_fY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY; aMarkPosition.m_eNameColor=CInstanceBase::NAMECOLOR_PARTY; m_PartyPCPositionVector.push_back(aMarkPosition); } } { TAtlasMarkInfoVector::iterator itor = m_AtlasWayPointInfoVector.begin(); for (; itor != m_AtlasWayPointInfoVector.end(); ++itor) { TAtlasMarkInfo & rAtlasMarkInfo = *itor; if (TYPE_TARGET != rAtlasMarkInfo.m_byType) continue; if (0 != rAtlasMarkInfo.m_dwChrVID) { CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(rAtlasMarkInfo.m_dwChrVID); if (pInstance) { TPixelPosition kPixelPosition; pInstance->NEW_GetPixelPosition(&kPixelPosition); __UpdateWayPoint(&rAtlasMarkInfo, kPixelPosition.x, kPixelPosition.y); } } const float c_fMiniMapWindowRadius = 55.0f; float fDistanceFromCenterX = (rAtlasMarkInfo.m_fX - m_fCenterX) * fooCellScale * m_fScale; float fDistanceFromCenterY = (rAtlasMarkInfo.m_fY - m_fCenterY) * fooCellScale * m_fScale; float fDistanceFromCenter = sqrtf(fDistanceFromCenterX * fDistanceFromCenterX + fDistanceFromCenterY * fDistanceFromCenterY ); if (fDistanceFromCenter >= c_fMiniMapWindowRadius) { float fRadianX = acosf(fDistanceFromCenterX / fDistanceFromCenter); float fRadianY = asinf(fDistanceFromCenterY / fDistanceFromCenter); fDistanceFromCenterX = 55.0f * cosf(fRadianX); fDistanceFromCenterY = 55.0f * sinf(fRadianY); rAtlasMarkInfo.m_fMiniMapX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX + 2.0f; rAtlasMarkInfo.m_fMiniMapY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY + 2.0f; } else { rAtlasMarkInfo.m_fMiniMapX = ( m_fWidth - (float)m_WhiteMark.GetWidth() ) / 2.0f + fDistanceFromCenterX + m_fScreenX; rAtlasMarkInfo.m_fMiniMapY = ( m_fHeight - (float)m_WhiteMark.GetHeight() ) / 2.0f + fDistanceFromCenterY + m_fScreenY; } } } }
void PlayScene::Start() { const auto fitsH = static_cast<int32_t>(std::ceil(static_cast<float>(GGame.GetWidth()) / kSpriteWidth)) + 1; const auto fitsV = static_cast<int32_t>(std::ceil(static_cast<float>(GGame.GetHeight()) / kSpriteOddYOffset)) + 1; _columns = fitsH; _rows = fitsV; SpriteParams params; params.persistant = false; params.texture = nullptr; params.z = 5; for (int32_t i = 0; i < kMap.size(); i++) { params.textureName = kMap[i]; auto sprite = GGame.Create<Sprite>(params); assert(kSpriteWidth == sprite->GetWidth()); assert(kSpriteHeight == sprite->GetHeight()); auto pos = VectorIndexToXY(i); sprite->SetCenterPosition(pos.first, pos.second); _backgroundSprites.push_back(sprite); } params.z = 6; params.textureName = "landingPlatform"; _landingPlatform = GGame.Create<Sprite>(params); auto pos = VectorIndexToXY(RowColumnToVectorIndex(3, 5)); _landingPlatform->SetCenterPosition(pos.first, pos.second); _landingPlatform->SetAlpha(0.0f); params.z = 7; params.textureName = "spaceCraft"; _spacecraft = GGame.Create<Sprite>(params); pos = VectorIndexToXY(RowColumnToVectorIndex(3, 5)); pos.first += kLandingOffset.first; pos.second += kLandingOffset.second - 150; _spacecraft->SetCenterPosition(pos.first, pos.second); ResourceBarParams resourceBarParams; resourceBarParams.persistant = false; resourceBarParams.initialWood = 150; resourceBarParams.initialCrystal = 20; resourceBarParams.z = 100; _resourceBar = GGame.Create<ResourceBar>(resourceBarParams); BuildingPanelParams buildingPanelParams; buildingPanelParams.persistant = false; buildingPanelParams.z = 100; _buildingPanel = GGame.Create<BuildingPanel>(buildingPanelParams); _buildingPanel->SetPosition(GGame.GetWidth() - _buildingPanel->GetWidth(), GGame.GetHeight()); _landingTimer = 0.0f; _landingFinished = false; _landingDestination = VectorIndexToXY(RowColumnToVectorIndex(3, 5)); _landingDestination.first += kLandingOffset.first; _landingDestination.second += kLandingOffset.second; _uiSlideTimer = 0.0f; _uiSlideFinished = false; }