#include "T2FloorInfo.h" #include "T2ImageObj.h" #include "T2InfoDialog.h" #include "T2Message.h" #include "T2OutObj.h" #include "T2OuterObjDef.h" #include "T2OuterObjList.h" #include "T2TowerDoc.h" #include "T2WorldDef.h" #include "UT2Coordinate.h" T2OuterObjDef::T2OuterObjDef(DWORD type, T2PluginSpecifier& specifier, CResFile* resFile, T2WorldDef* worldDef, T2ToolPlugin* plugin) : T2ToolDef(type, specifier, resFile, worldDef, plugin) { mValiationCount = 1; } /*virtual*/ T2OuterObjDef::~T2OuterObjDef() { } /*virtual*/ CURSORTYPE T2OuterObjDef::QueryCursor(T2TowerDoc*, POINT inPt, CString& outStr, RECT& outRect, POINT& outPt, int factor, unsigned int, int) { outStr = "Csr"; inPt.x -= ((mWidth * UT2Coordinate::UnitHSize(factor)) / 2 - UT2Coordinate::UnitHSize(factor) / 2); inPt.y -= ((mHeight * UT2Coordinate::UnitVSize(factor)) / 2 - UT2Coordinate::UnitVSize(factor) / 2); UT2Coordinate::QDToUnit(inPt, factor); SetRect(&outRect, inPt.x, inPt.y, inPt.x + mWidth, inPt.y + mHeight); outPt.x = outRect.left; outPt.y = outRect.top; UT2Coordinate::UnitToQD(outRect, factor, true); return CursorType_0; } /*virtual*/ void T2OuterObjDef::DrawProc(T2HaveOutViewObject* obj, const RECT& inRect, T2TowerDoc* inDoc) const { RECT rect = ((T2OutObj *) obj)->_3C; UT2Coordinate::UnitToQD(rect, inDoc->GetZoomLevel(), true); int objectID = mImageObj->FindObject("View"); mImageObj->DrawObject(inDoc->GetImage(), objectID, rect, inDoc->GetZoomLevel()); } /*virtual*/ AREACHECKCODE T2OuterObjDef::AreaCheck(T2TowerDoc* inDoc, RECT& rect, unsigned int arg1, int inShowError) { LArrayIterator iterator(*inDoc->mOuterObjList); T2OutObj *theOutObj; while (iterator.Next(&theOutObj)) { RECT intersect; if (IntersectRect(&intersect, &theOutObj->_3C, &rect)) { if (inShowError) { // "重ねて設置できません" - cannot be placed on top of each other (new T2Message)->ShowMessage("\x8F\x64\x82\xCB\x82\xC4\x90\xDD\x92\x75\x82\xC5\x82\xAB\x82\xDC\x82\xB9\x81\xF1"); } return AreaCheckCode_0; } } for (int x = rect.left; x < rect.right; x++) { for (int y = rect.top; y < rect.bottom; y++) { if (!inDoc->mFloorInfo->GetTenant(y, x)) { if (inShowError) { // "はみだして設置できません" - it cannot be installed as it protrudes (new T2Message)->ShowMessage("\x82\xCD\x82\xDD\x82\xBE\x82\xB5\x82\xC4\x90\xDD\x92\x75\x82\xC5\x82\xAB\x82\xDC\x82\xB9\x82\xF1"); } return AreaCheckCode_0; } } } if (rect.bottom > (inDoc->mWorldDef->mGroundLine - inDoc->mWorldDef->mLobbyHeight)) { if (inShowError) { // "ここには設置できません" - cannot be installed here (new T2Message)->ShowMessage("\x82\xB1\x82\xB1\x82\xC9\x82\xCD\x90\xDD\x92\x75\x82\xC5\x82\xAB\x82\xDC\x82\xB9\x82\xF1"); } return AreaCheckCode_0; } return AreaCheckCode_1; } /*virtual*/ T2InfoDialog* T2OuterObjDef::ShowInfoDialog(T2TowerDoc* inDoc, T2OutObj* inOutObj) { CRect rect; AfxGetMainWnd()->GetWindowRect(rect); T2DLGTEMPLATE tmpl; tmpl.pt = rect.CenterPoint(); tmpl.moduleHandle = mModuleHandle; tmpl.resID = GetInfoDialogID(inDoc, inOutObj); T2InfoDialog *dialog = ConstructInfoDialog(inOutObj); dialog->Realize(this, &tmpl, inDoc, mImageObj, NULL, true, NULL, 0, true); return dialog; } /*virtual*/ int T2OuterObjDef::GetInfoDialogID(T2TowerDoc*, const T2OutObj*) const { return 1000; } /*virtual*/ T2InfoDialog* T2OuterObjDef::ConstructInfoDialog(T2OutObj*) { return NULL; } /*virtual*/ PROCCODE T2OuterObjDef::DoDestructProc(T2TowerDoc* inDoc, T2HaveOutViewObject* inObj, POINT, RECT& outRect) { outRect = ((T2OutObj *) inObj)->_3C; return ((T2OutObj *) inObj)->Destruct(inDoc, outRect); }