void GameObjectFactory::addContainer() { GSvector2 zero(0, 0); const int length = 17; GSvector2 navSize(45,100); GameObject* objs[length] = { /* 画像名, 位置(原型),見た目のサイズ(基本画像サイズ), 位置からの当たり判定位置と横縦幅 */ new Respawn("respawn.bmp", zero, GSvector2(94, 88), MyRectangle(GSvector2(11, 11), GSvector2(85, 0))), new Player("orihime.bmp", zero, GSvector2(64, 64), MyRectangle(GSvector2(20, 50), GSvector2(30, 14)), &scroll, device, effectMediator), new ImMovable("meteo.bmp", zero, GSvector2(44, 44), MyRectangle(zero, GSvector2(44, 44)), GAMEOBJ_TYPE::PLANET), new ImMovable("start.bmp", zero, GSvector2(200, 100), MyRectangle(GSvector2(30, 15), GSvector2(180, 30)), GAMEOBJ_TYPE::START), new ImMovable("goal.bmp", zero, GSvector2(200, 100), MyRectangle(GSvector2(30, 15), GSvector2(180, 30)), GAMEOBJ_TYPE::GOAL), new Magpie("magpie.bmp", zero, GSvector2(128, 128), MyRectangle(GSvector2(0, 0), GSvector2(128, 128)), objMediator,device), new ImMovable("magpieEnd.bmp", zero, GSvector2(94, 88), MyRectangle(GSvector2(11, 11), GSvector2(85, 23)), GAMEOBJ_TYPE::MAGPIE_ENDSPOT), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_R), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_L), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_U), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_D), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_RU), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_RD), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_LD), new Signboard("nav.bmp", zero, navSize, GAMEOBJ_TYPE::SIGNBOARD_LU), new ImMovable("sasa.bmp", zero, GSvector2(96, 128), MyRectangle(zero, zero), GAMEOBJ_TYPE::SASA), new Hikoboshi("hikobosi.bmp",zero,GSvector2(64,64),MyRectangle(zero,GSvector2(64,64))) }; GAMEOBJ_TYPE types[length] = { GAMEOBJ_TYPE::RESPAWN, GAMEOBJ_TYPE::PLAYER, GAMEOBJ_TYPE::PLANET, GAMEOBJ_TYPE::START, GAMEOBJ_TYPE::GOAL, GAMEOBJ_TYPE::MAGPIE, GAMEOBJ_TYPE::MAGPIE_ENDSPOT, GAMEOBJ_TYPE::SIGNBOARD_R, GAMEOBJ_TYPE::SIGNBOARD_L, GAMEOBJ_TYPE::SIGNBOARD_U, GAMEOBJ_TYPE::SIGNBOARD_D, GAMEOBJ_TYPE::SIGNBOARD_RU, GAMEOBJ_TYPE::SIGNBOARD_RD, GAMEOBJ_TYPE::SIGNBOARD_LD, GAMEOBJ_TYPE::SIGNBOARD_LU, GAMEOBJ_TYPE::SASA, GAMEOBJ_TYPE::HIKOBOSHI }; for (int i = 0; i < length; i++) { GameObj_Ptr obj = GameObj_Ptr(objs[i]); container.insert(std::pair<GAMEOBJ_TYPE, GameObj_Ptr>(types[i], obj)); } }
Signboard::Signboard(const std::string& textrue, const GSvector2& position, const GSvector2& viewSize, GAMEOBJ_TYPE type) :GameObject(textrue, position, viewSize,MyRectangle(0,0,0,0), type), angle(0) { switch (type) { case GAMEOBJ_TYPE::SIGNBOARD_R: angle = 0; break; case GAMEOBJ_TYPE::SIGNBOARD_L: angle = 180; break; case GAMEOBJ_TYPE::SIGNBOARD_U: angle = 270; break; case GAMEOBJ_TYPE::SIGNBOARD_D: angle = 90; break; case GAMEOBJ_TYPE::SIGNBOARD_RU: angle = 315; break; case GAMEOBJ_TYPE::SIGNBOARD_RD: angle = 45; break; case GAMEOBJ_TYPE::SIGNBOARD_LU: angle =215; break; case GAMEOBJ_TYPE::SIGNBOARD_LD: angle = 135; break; } }
/************************************************ 函数名:set_position 功能:设置屏幕坐标 备注:无 ************************************************/ void UIBlock::set_position(Vec2 _position) { position = _position; touch_box = MyRectangle(Vec2(_position.x - size.x / 2, _position.y + size.y / 2) , Vec2(_position.x + size.x / 2, _position.y - size.y / 2)); front_sprite->setPosition(_position); mid_sprite->setPosition(_position); back_sprite->setPosition(_position); }
STATICFN VOID NEAR DrawColorRect( HDC hdc, DWORD rgb, INT x, INT y, INT cx, INT cy, HDC hdcMem, BOOL fMonoOK) { HBRUSH hbr; HBRUSH hbrOld; hbr = CreateSolidBrush(rgb); hbrOld = SelectObject(hdc, hbr); MyRectangle(hdc, x, y, x + cx, y + cy, hdcMem, fMonoOK); SelectObject(hdc, hbrOld); DeleteObject(hbr); }
STATICFN VOID NEAR ColorLRDrawSamples( HDC hdc, PRECT prc, BOOL fLeft) { INT xLeftStart; INT xRightStart; INT ySolidStart; INT yDitherStart; INT cx; INT cy; HBRUSH hbrOld; HPEN hpenOld; BOOL fMonoOK; /* * The width and height of each square includes the border. */ cx = ((prc->right - prc->left) - (6 * PALETTEMARGIN)) / 2; cy = ((prc->bottom - prc->top) - (4 * PALETTEMARGIN)) / 2; xLeftStart = prc->left + (PALETTEMARGIN * 2) + 1; xRightStart = xLeftStart + cx + (PALETTEMARGIN * 2); ySolidStart = prc->top + (PALETTEMARGIN * 2) + 1; yDitherStart = ySolidStart - 1 + cy; /* * Draw either the left or the right color sample. */ if (fLeft) { fMonoOK = (gfModeLeft == MODE_COLOR) ? TRUE : FALSE; /* * Draw the solid color. */ hbrOld = SelectObject(hdc, ghbrLeftSolid); hpenOld = SelectObject(hdc, GetStockObject(NULL_PEN)); MyRectangle(hdc, xLeftStart, ySolidStart, xLeftStart + cx, yDitherStart + 1, NULL, fMonoOK); /* * Draw the true color (may be dithered). */ SelectObject(hdc, ghbrLeft); MyRectangle(hdc, xLeftStart, yDitherStart, xLeftStart + cx, yDitherStart + cy, NULL, fMonoOK); } else { fMonoOK = (gfModeRight == MODE_COLOR) ? TRUE : FALSE; hbrOld = SelectObject(hdc, ghbrRightSolid); hpenOld = SelectObject(hdc, GetStockObject(NULL_PEN)); MyRectangle(hdc, xRightStart, ySolidStart, xRightStart + cx, yDitherStart + 1, NULL, fMonoOK); SelectObject(hdc, ghbrRight); MyRectangle(hdc, xRightStart, yDitherStart, xRightStart + cx, yDitherStart + cy, NULL, fMonoOK); } /* * Now draw the outline rectangle. */ SelectObject(hdc, GetStockObject(BLACK_PEN)); SelectObject(hdc, GetStockObject(NULL_BRUSH)); if (fLeft) { Rectangle(hdc, xLeftStart - 1, ySolidStart - 1, xLeftStart + cx, yDitherStart + cy); } else { Rectangle(hdc, xRightStart - 1, ySolidStart - 1, xRightStart + cx, yDitherStart + cy); } /* * Clean up. */ SelectObject(hdc, hpenOld); SelectObject(hdc, hbrOld); }