{
std::vector<Coordinates> rangeVec;
std::vector<Coordinates>::iterator rangeIt;
+ this->sight.clear();
this->position.GetRoundRange(rangeVec, 0, 12);
//std::for_each(rangeVec.begin(), rangeVec.end(), [&](const Coordinates r) { this->lore.GetFieldLore(0, r->GetX(), r.GetY()); });
for(rangeIt = rangeVec.begin(); rangeIt != rangeVec.end(); rangeIt++)
if(fieldPtr->HaveSight(this->position.GetX(), this->position.GetY(), rangeIt->GetX(), rangeIt->GetY()))
{
this->lore.PutFieldLore(0, rangeIt->GetX(), rangeIt->GetY());
+ this->sight[rangeIt->GetY()][rangeIt->GetX()] = true;
}
}
}
oa << boost::serialization::make_nvp("Creature", *this);
}
+ bool Creature::InSight(int x, int y)
+ {
+ return this->sight[y][x];
+ }
+
}
\ No newline at end of file
HP hpTable[CREATURE_MAX_LEVEL]; //!< \83q\83b\83g\83_\83C\83X\82É\8aî\82Ã\82«\90¶\90¬\82³\82ê\82½\83\8c\83x\83\8b\96\88\82Ì\8aî\96{HP
Lore lore; //!< \8bL\89¯\8fî\95ñ
+ std::map<int, std::map<int, bool>> sight; //!<\8e\8b\8aE\8fî\95ñ
/*!
* @brief \83N\83\8a\81[\83`\83\83\81[\8e\80\96S\8e\9e\82Ì\8f\88\97\9d\82ð\8ds\82¤
Lore* Creature::GetLore() {return &this->lore; }
/*!
- * @brief \83N\83\8a\81[\83`\83\83\81[\82É\83t\83B\81[\83\8b\83h\94F\92m\8fî\95ñ\82ð\8dX\90V\82·\82é
+ * @brief \83N\83\8a\81[\83`\83\83\81[\82Ì\83t\83B\81[\83\8b\83h\94F\92m\8fî\95ñ\82ð\8dX\90V\82·\82é
* @return \82È\82µ
*/
void Creature::UpdateFieldLore(Field *fieldPtr);
+ /*!
+ * @brief \8ew\92è\92n\93_\82ª\83N\83\8a\81[\83`\83\83\81[\82Ì\8e\8b\8aE\82É\93ü\82Á\82Ä\82¢\82é\82©\82ð\95Ô\82·\81B
+ * @return \8e\8b\8aE\82É\93ü\82Á\82Ä\82¢\82é\82È\82ç true
+ */
+ bool Creature::InSight(int x, int y);
};
#define CREATURE_MAX_GOLD 999999999L //!< \8dÅ\91å\83S\81[\83\8b\83h\92l
#define CREATURE_MAX_MORTAL_LEVEL 30 //!< \92è\96½\8dÅ\91å\83\8c\83x\83\8b
#define CREATURE_MAX_DIVINE_LEVEL 30 //!< \90_\8ai\8dÅ\91å\92l
-#define FIELD_MAX_WIDTH 65535 //!< \83t\83B\81[\83\8b\83h\8dÅ\91å\95\9d
-#define FIELD_MAX_HEIGHT 65535 //!< \83t\83B\81[\83\8b\83h\8dÅ\91å\8d\82\82³
+#define FIELD_MAX_WIDTH 512 //!< \83t\83B\81[\83\8b\83h\8dÅ\91å\95\9d
+#define FIELD_MAX_HEIGHT 512 //!< \83t\83B\81[\83\8b\83h\8dÅ\91å\8d\82\82³
+#define FIELD_BUFFER_SIZE (FIELD_MAX_WIDTH * FIELD_MAX_HEIGHT)
+#define FIELD_BUFFER(X, Y) (FIELD_MAX_HEIGHT * Y + X)
#define CREATURE_MAX_LEVEL CREATURE_MAX_MORTAL_LEVEL+CREATURE_MAX_DIVINE_LEVEL //!< \90_\8ai\8d\9e\82Ý\8dÅ\91å\83\8c\83x\83\8b
#define SPECIAL_NAME_UNKNOWN "UNKNOWN" //!< \96¼\8fÌ\82Ì\83_\83~\81[\96¼
//! @note \8e\8b\8aE\8aO\92n\8c`\83O\83\89\83t\83B\83b\83N\82Ì\93Ç\82Ý\8d\9e\82Ý
- rwop = SDL_RWFromFile("img\\seenField.png", "rb");
+ rwop = SDL_RWFromFile("img\\UnseenField.png", "rb");
unseenFieldSurface = IMG_LoadPNG_RW(rwop);
symbolSurface = TTF_RenderUTF8_Blended(font, toUTF8(symBuf).c_str(), sdlSymCol);
blitRect.x += (24 - symbolSurface->w) / 2;
blitRect.y += (24 - symbolSurface->h) / 2;
- SDL_BlitSurface(symbolSurface, &symbolRect, surface, &blitRect);
+ SDL_BlitSurface(symbolSurface, &symbolRect, surface, &blitRect);
SDL_FreeSurface(symbolSurface);
floorSurfaces.insert(std::map<TAG, SDL_Surface*>::value_type(floorIt->first, surface));
{
SDL_Rect symbolRect = {0, 0, squareGraphicWidth, squareGraphicHeight};
CREATURE_IT creatureIt;
+ Creature *subJectCreaturePtr = subjectCreatureIt->second.get();
int px, py;
for(py = y; py < y + h; py++)
if(px < fieldPtr->GetWidth() && py < fieldPtr->GetHeight())
{
SDL_Rect blitRect = {GameSurfaceSDL::sideBarWidth + (px - x) * squareGraphicWidth, 30 + (py - y) * squareGraphicHeight , squareGraphicWidth, squareGraphicHeight};
- if(subjectCreatureIt->second->GetLore()->GetFieldLore(0, px, py) > 0)
+ if(subJectCreaturePtr->GetLore()->GetFieldLore(0, px, py) > 0)
{
TAG tag = fieldPtr->GetSquare(px, py)->GetFloorTag();
- SDL_BlitSurface(floorSurfaces[tag], &symbolRect, windowSurface, &blitRect);
+ SDL_BlitSurface(floorSurfaces[tag], &symbolRect, windowSurface, &blitRect);
+ if(subJectCreaturePtr->InSight(px, py) == false)
+ {
+ SDL_Rect fieldRect = {blitRect.x % 128, blitRect.y % 128, blitRect.x % 128 + squareGraphicWidth, blitRect.y % 128 + squareGraphicHeight};
+ SDL_BlitSurface(unseenFieldSurface, &fieldRect, windowSurface, &blitRect);
+ }
}
else
{