예제 #1
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
Entity::~Entity()
{
	//printf("Entity dtor %d\n", _guid);
	deleteSprite();
	deleteLine();
	deleteSpritebatch();
}
예제 #2
0
void NavigationScene::createMouseCursor() {

	const NavigationItem &navigationItem = (*_navigationList)[_navigationIndex];
	uint32 mouseCursorFileHash;
	int areaType;

	if (_mouseCursor) {
		deleteSprite((Sprite**)&_mouseCursor);
	}

	mouseCursorFileHash = navigationItem.mouseCursorFileHash;
	if (mouseCursorFileHash == 0)
		mouseCursorFileHash = 0x63A40028;
		
	if (_itemsTypes) {
		areaType = _itemsTypes[_navigationIndex];
	} else if (navigationItem.middleSmackerFileHash != 0 || navigationItem.middleFlag) {
		areaType = 0;
	} else {
		areaType = 1;
	}

	insertNavigationMouse(mouseCursorFileHash, areaType);
	sendPointMessage(_mouseCursor, 0x4002, _vm->getMousePos());
	
}
예제 #3
0
void animate_spermicides(char *base) {

	if (spermicides->first == NULL) return;

	lst_iitem_t* curSp;
	
	int n = 0;
	for(curSp = spermicides->first; curSp != NULL; curSp = curSp->next)
		n++;
	
	for(curSp = spermicides->first; curSp != NULL; curSp = curSp->next){
		destroySprite(curSp->spr, base);
		
		if (!check_spermicide_colision(curSp->spr,curSp->spr->y - curSp->spr->yspeed)) {
			curSp->spr->y -= curSp->spr->yspeed;
			drawSprite(curSp->spr, base);
		}
		else {
			deleteSprite(curSp->spr);
			curSp = lst_remove(spermicides, curSp->spr);
			if (curSp == NULL) break;
		}
	}
	
}
예제 #4
0
파일: text.cpp 프로젝트: wheein/MiHaJong
void ITextRenderer::reconstruct(unsigned int ID, bool rescanStr) {
	MUTEXLIB::unique_lock<MUTEXLIB::recursive_mutex> lock(SpriteMutex);
	if (SpriteData.size() <= ID) SpriteData.resize(ID + 1, std::vector<SpriteAttr*>()); // 配列の拡張
	if ((!SpriteData[ID].empty()) && rescanStr) deleteSprite(ID); // 既に存在した場合
	if (!StringData[ID]) /* ぬるぽ */
		return; /* ガッ */
	float chrAdvance = (FontWidth() - FontPadding() * 2) * StringData[ID]->scale * StringData[ID]->width;
	float cursorPos = 0;
	if (rescanStr) {
		for (const auto& k : StringData[ID]->str) {
			SpriteData[ID].push_back(new SpriteAttr);
			SpriteData[ID].back()->isFullWidth = fontmap->map(k).first;
			SpriteData[ID].back()->chr_id = fontmap->map(k).second;
			spriteRecalc(ID, SpriteData[ID].back(), chrAdvance, cursorPos);
			if (SpriteData[ID].back()->isFullWidth) cursorPos += 1.0f;
			else cursorPos += .5f;
		}
	} else {
		for (const auto& k : SpriteData[ID]) {
			spriteRecalc(ID, k, chrAdvance, cursorPos);
			if (k->isFullWidth) cursorPos += 1.0f;
			else cursorPos += .5f;
		}
	}
}
예제 #5
0
void doFontification (struct spriteBank *sprites, unsigned int fontifySpaceWidth) {
	
	int which = 1;
	int fromColumn = 0;
	int yhot = (sprites->sprites[0].height * 3) / 4;
	
	for (int thisColumn = 0; thisColumn < sprites->sprites[0].width; thisColumn ++) {
		int y;
		
		// Find out if the column's empty...
		for (y = 0; y < sprites->sprites[0].height; y ++) {
			if (sprites->sprites[0].data[y*sprites->sprites[0].width*4 + thisColumn*4 + 3]) break;
		}
		
		int width = (thisColumn - fromColumn);
		
		// So was it?
		if (y == sprites->sprites[0].height || (thisColumn == sprites->sprites[0].width - 1)) {
			
			// Make sure we didn't find a blank column last time
			if (width) {
				
				// Reserve memory
				GLubyte * toHere = (GLubyte *) new GLubyte [width * sprites->sprites[0].height * 4];
				GLubyte * dataIfOK = toHere;
				if (toHere) {
					
					for (y = 0; y < sprites->sprites[0].height; y ++) {
						GLubyte * from = sprites->sprites[0].data + 4*sprites->sprites[0].width*y + fromColumn*4;
						for (int x = 0; x < width*4; x ++) {
							* (toHere ++) = from[x];
						}
					}
					
					addSprite (which, sprites);
					sprites->sprites[which].width = width;
					sprites->sprites[which].height = sprites->sprites[0].height;
					sprites->sprites[which].yhot = yhot;
					delete sprites->sprites[which].data;
					sprites->sprites[which].data = dataIfOK;
					which ++;
				}					
			}
			fromColumn = thisColumn + 1;
		}
	}
	
	addSprite (which, sprites);
	sprites->sprites[which].width = fontifySpaceWidth;
	sprites->sprites[which].height = 1;
	sprites->sprites[which].yhot = 0;
	delete sprites->sprites[which].data;
	sprites->sprites[which].data = new GLubyte [fontifySpaceWidth * 4];
	memset(sprites->sprites[which].data, 0, fontifySpaceWidth * 4);

	deleteSprite (0, sprites);
	
	loadSpriteTextures (sprites);	
}
예제 #6
0
파일: entity.cpp 프로젝트: jlsa/rt2d
void Entity::addSpriteSheet(const std::string& filename, int u, int v)
{
	deleteSprite();
	_sprite = new Sprite();
	float uvwidth = 1.0f / u;
	float uvheight = 1.0f / v;
	_sprite->setupSprite(filename, 0.5f, 0.5f, uvwidth, uvheight);
}
예제 #7
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addSpriteSheet(const std::string& filename, int u, int v)
{
	deleteSprite();
	_sprite = new Sprite();
	float uvwidth = 1.0f / u;
	float uvheight = 1.0f / v;
	_sprite->setupSprite(filename, 0.5f, 0.5f, uvwidth, uvheight, DEFAULTFILTER, DEFAULTWRAP); // trilinear filter, mirror repeat
}
예제 #8
0
void game_end() {
	deleteScore(score);

	saveHighScores(highScores);
	deleteHighScores(highScores);
	
	deleteHammer(hammer);

	int i;
	for (i = 0; i < NUM_PCS; i++)
		deleteCScreen(cscreens[i]);
	free(cscreens);
	
	deleteButton(helpButton);
	deleteButton(exitButton);
	
	deleteSprite(helpBoard);
	deleteSprite(scoreBoard);
	deleteSprite(spriteBG);
}
예제 #9
0
파일: text.cpp 프로젝트: wheein/MiHaJong
ITextRenderer::~ITextRenderer() {
	deleteSprite();
	for (auto& k : StringData) {
		if (k) {
			delete k; k = nullptr;
		}
	}
#if defined(_WIN32) && defined(WITH_DIRECTX)
	if (font) font->Release();
#endif
}
예제 #10
0
/**
 * メモリを開放する。
 */
void deleteAnimation(ANIME_SET* graphic){
	int i=0,anime_num = graphic->anime_num;
	for(;i<anime_num;i++){
		ANIMATION* anime = graphic->anime[i];
		free(anime->frame);
		free(anime);
	}
	free(graphic->anime);
	deleteSprite(&graphic->sprite);
	free(graphic->filename);
	free(graphic);
}
예제 #11
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addCircleSprite(const std::string& filename, int radius, int segments)
{
	deleteSprite();
	_sprite = new Sprite();
	_sprite->setupCircleSprite(filename, radius, segments);
}
예제 #12
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addDynamicSprite(PixelBuffer* pixels)
{
	deleteSprite();
	_sprite = new Sprite();
	_sprite->setupSpriteByPixelBuffer(pixels);
}
예제 #13
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addSprite(Sprite* spr)
{
	deleteSprite();
	_sprite = new Sprite();
	*_sprite = *spr;
}
예제 #14
0
void Scene1201::update() {
	Scene::update();
	if (_asMatch && getGlobalVar(V_MATCH_STATUS) == 3)
		deleteSprite(&_asMatch);
}
예제 #15
0
void Scene::insertMouse(Mouse *mouseCursor) {
    if (_mouseCursor)
        deleteSprite((Sprite**)&_mouseCursor);
    _mouseCursor = mouseCursor;
    addEntity(_mouseCursor);
}
예제 #16
0
파일: text.cpp 프로젝트: wheein/MiHaJong
void ITextRenderer::reconstruct() {
	// VERY SLOW. DO NOT USE.
	deleteSprite();
	for (unsigned i = 0; i < StringData.size(); i++)
		reconstruct(i);
}
예제 #17
0
static void cutToClipboard(Sprite* sprite)
{
	copyToClipboard(sprite);
	deleteSprite(sprite);
}
예제 #18
0
static void processKeyboard(Sprite* sprite)
{
	tic_mem* tic = sprite->tic;

	if(tic->ram.input.keyboard.data == 0) return;

	switch(getClipboardEvent())
	{
	case TIC_CLIPBOARD_CUT: cutToClipboard(sprite); break;
	case TIC_CLIPBOARD_COPY: copyToClipboard(sprite); break;
	case TIC_CLIPBOARD_PASTE: copyFromClipboard(sprite); break;
	default: break;
	}

	bool ctrl = tic->api.key(tic, tic_key_ctrl);

	if(ctrl)
	{	
		if(keyWasPressed(tic_key_z)) 		undo(sprite);
		else if(keyWasPressed(tic_key_y))	redo(sprite);
	}
	else
	{
		if(hasCanvasSelection(sprite))
		{
			if(keyWasPressed(tic_key_up)) 			upCanvas(sprite);
			else if(keyWasPressed(tic_key_down)) 	downCanvas(sprite);
			else if(keyWasPressed(tic_key_left)) 	leftCanvas(sprite);
			else if(keyWasPressed(tic_key_right)) 	rightCanvas(sprite);
			else if(keyWasPressed(tic_key_delete)) 	deleteCanvas(sprite);
		}
		else
		{
			if(keyWasPressed(tic_key_up)) 			upSprite(sprite);
			else if(keyWasPressed(tic_key_down)) 	downSprite(sprite);
			else if(keyWasPressed(tic_key_left)) 	leftSprite(sprite);
			else if(keyWasPressed(tic_key_right)) 	rightSprite(sprite);
			else if(keyWasPressed(tic_key_delete)) 	deleteSprite(sprite);
			else if(keyWasPressed(tic_key_tab)) 		switchBanks(sprite);

			if(!sprite->editPalette)
			{

				if(keyWasPressed(tic_key_1)) 		sprite->mode = SPRITE_DRAW_MODE;
				else if(keyWasPressed(tic_key_2)) 	sprite->mode = SPRITE_PICK_MODE;
				else if(keyWasPressed(tic_key_3)) 	sprite->mode = SPRITE_SELECT_MODE;
				else if(keyWasPressed(tic_key_4)) 	sprite->mode = SPRITE_FILL_MODE;

				else if(keyWasPressed(tic_key_5)) 	flipSpriteHorz(sprite);
				else if(keyWasPressed(tic_key_6)) 	flipSpriteVert(sprite);
				else if(keyWasPressed(tic_key_7)) 	rotateSprite(sprite);
				else if(keyWasPressed(tic_key_8)) 	deleteSprite(sprite);

				if(sprite->mode == SPRITE_DRAW_MODE)
				{
					if(keyWasPressed(tic_key_leftbracket)) {if(sprite->brushSize > 1) sprite->brushSize--;}
					else if(keyWasPressed(tic_key_rightbracket)) {if(sprite->brushSize < 4) sprite->brushSize++;}
				}				
			}
		}
	}
}
예제 #19
0
파일: text.cpp 프로젝트: wheein/MiHaJong
void ITextRenderer::deleteSprite() {
	MUTEXLIB::unique_lock<MUTEXLIB::recursive_mutex> lock(SpriteMutex);
	for (unsigned int i = 0; i < SpriteData.size(); i++)
		deleteSprite(i);
	SpriteData.clear();
}
예제 #20
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addSegmentSprite(const std::string& filename, int radius, int segments, int which)
{
	deleteSprite();
	_sprite = new Sprite();
	_sprite->setupSegmentSprite(filename, radius, segments, which);
}
예제 #21
0
파일: text.cpp 프로젝트: wheein/MiHaJong
/* 文字列オブジェクトの後始末 */
void ITextRenderer::DelText(unsigned int ID) {
	if (StringData.size() <= ID) return;
	delete StringData[ID]; StringData[ID] = nullptr;
	deleteSprite(ID);
}
예제 #22
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addSprite(const std::string& filename, float pivotx, float pivoty)
{
	deleteSprite();
	_sprite = new Sprite();
	_sprite->setupSprite(filename, pivotx, pivoty, 1.0f, 1.0f, DEFAULTFILTER, DEFAULTWRAP); // trilinear filter, mirror repeat
}
예제 #23
0
void deleteCScreen(CScreen* cscreen){
	deleteSprite(cscreen->sprite);
	deleteSong(cscreen->crash);
	deleteSong(cscreen->reinstall);
	free(cscreen);
}
예제 #24
0
파일: entity.cpp 프로젝트: rktrlng/rt2d
void Entity::addSprite(const std::string& filename, float pivotx, float pivoty, int filter, int wrap)
{
	deleteSprite();
	_sprite = new Sprite();
	_sprite->setupSprite(filename, pivotx, pivoty, 1.0f, 1.0f, filter, wrap);
}