示例#1
0
文件: utrains.cpp 项目: danvac/signus
void TToweredTrainUnit::Draw()
{
    TField *f = GetField(X, Y);
    TSprite *s, *sst;
    int rrx = GetRelX(X), rry = GetRelY(Y);
    int drawx = 28 * (rrx - rry) + LittleX + 28;
    int drawy = 14 * (rrx + rry - (f->Height)) + LittleY + 14;
    
    if ((!SelectCrossLock) && (SelectedUnit == this)) {
        void *oldb = MapBuf;
        MapBuf = FullBuf;
        DrawL2Selector(drawx-LittleX, drawy+28-LittleY, f->Terrain, BmpSelected);
        MapBuf = oldb;
  }

    s = GetSprite();
    DrawSprite(drawx, drawy, s);
    if (ActualSprite < 8/*tj.jsme v rovine*/) {
        s = UnitsSprites[Type][40 + WpnOrient];
        DrawSprite(drawx + SpriteLocators[Type][SpriteOrient*2], 
                   drawy + SpriteLocators[Type][SpriteOrient*2+1], s);
    }

    s = GetSmoke();
    if (s) DrawSprite(drawx, drawy, s);

    if (iniShowStatusbar && (!StatusbarLock)) {
        if ((sst = GetStatusBar()) != NULL) {
            DrawSprite(drawx, drawy, sst);
            memfree(sst);
        }
    }
    GetDrawRect(&(LD_rect[ID])); LD_used[ID] = TRUE;
}
示例#2
0
文件: utrains.cpp 项目: danvac/signus
void TToweredTrainUnit::GetDrawRect(TRect *r)
{
    TRect r1;
    TField *f = GetField(X, Y);
    TSprite *s = GetSprite();
    int rrx = GetRelX(X), rry = GetRelY(Y);
    int drawx = 28 * (rrx - rry) + LittleX + 28;
    int drawy = 14 * (rrx + rry - (f->Height)) + LittleY + 14;
    
    r->x1 = drawx - s->dx, r->y1 = drawy - s->dy;
    r->x2 = r->x1 + s->w, r->y2 = r->y1 + s->h;

    s = UnitsSprites[Type][40 + WpnOrient];
    r1.x1 = drawx + SpriteLocators[Type][SpriteOrient*2] - s->dx, 
    r1.y1 = drawy + SpriteLocators[Type][SpriteOrient*2+1] - s->dy;
    r1.x2 = r1.x1 + s->w, r1.y2 = r1.y1 + s->h;
    Union(r, &r1);

    s = GetSmoke();
    if (s) {
        r1.x1 = drawx - s->dx, r1.y1 = drawy - s->dy;
        r1.x2 = r1.x1 + s->w, r1.y2 = r1.y1 + s->h;
        Union(r, &r1);
    }
}
示例#3
0
bool cFurnaceEntity::Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk)
{
	UNUSED(a_Dt);

	if (m_FuelBurnTime <= 0)
	{
		// If a furnace is out of fuel, the progress bar reverses at twice the speed of cooking.
		m_TimeCooked = std::max((m_TimeCooked - 2), 0);

		// Reset progressbars, block type, and bail out
		m_BlockType = E_BLOCK_FURNACE;
		a_Chunk.FastSetBlock(GetRelX(), m_PosY, GetRelZ(), E_BLOCK_FURNACE, m_BlockMeta);
		UpdateProgressBars();
		return false;
	}

	if (m_IsCooking)
	{
		m_TimeCooked++;
		if (m_TimeCooked >= m_NeedCookTime)
		{
			// Finished smelting one item
			FinishOne();
		}
	}

	m_TimeBurned++;
	if (m_TimeBurned >= m_FuelBurnTime)
	{
		// The current fuel has been exhausted, use another one, if possible
		BurnNewFuel();
	}

	UpdateProgressBars();

	return true;
}
示例#4
0
void ProcessFieldAnim(int x, int y)
{
    int oldt, t;
    TSprite *s;
    int rx, ry, drawx, drawy;
    
    t = oldt = GetField(x, y)->Terrain2;
    t = CycleF(t, 389, 390, 900, 901, 902, 903, 904, 905);
    t = CycleF(t, 391, 392, 906, 907, 908, 909, 910, 911);
    t = CycleF(t, 395, 396, 397, 912, 913, 914, 915, 916);
    t = CycleF(t, 398, 399, 400, 918, 919, 920, 921, 922);
    if (t != oldt) {
        PlaceL2(x, y, t, 1);
        s = (TSprite*)(BmpTerr2[GetField(x, y)->Terrain2]);
        if (s) {
            rx = GetRelX(x), ry = GetRelY(y);
            drawx = 28 * (rx - ry) + 28;
            drawy = 14 * (rx + ry - (GetField(x, y)->Height)) + 14;
            StartDraw(drawx - s->dx, drawy - s->dy, s->w, s->h);
            PaintUnits();
            EndDraw();
        }
    }
}
示例#5
0
文件: eng800.cpp 项目: danvac/signus
void DrawField(int x, int y)
{
	TField *f = GetField(x, y);
	word Ter1 = f->Terrain;
	word Ter2 = f->Terrain2;
	
	int rx = GetRelX(x), ry = GetRelY(y);
	int drawx = VIEW_OFS_X + 28 * (rx - ry);
	int drawy = VIEW_OFS_Y + 14 * (rx + ry - (f->Height));
	int localx = drawx/2, localy = drawy/2;
	int ldx = (x < 0) ? 0xFF : ((x >= MapSizeX) ? 0xFF : x);
	int ldy = (y < 0) ? 0xFF : ((y >= MapSizeY) ? 0xFF : y);

	if ((drawx < 0) || (drawy < 0) || (drawx > VIEW_PIXSZ_X - FIELD_X) || 
	    (drawy > VIEW_PIXSZ_Y - TerrOfssEnd[Ter1])) return;

	// PLNA VIDITELNOST:
	
	if (f->Visib == 2) {
		// Prvni vrstva terenu & lokalizace:
		if ((Ter1 % 256) < tofsL1B) {
			DrawTerrA(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalA(LocalBufX, localx, localy, ldx);
			DrawLocalA(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1C) {
			DrawTerrB(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalB(LocalBufX, localx, localy, ldx);
			DrawLocalB(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1D) {
			DrawTerrC(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalC(LocalBufX, localx, localy, ldx);
			DrawLocalC(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1E) {
			DrawTerrD(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalD(LocalBufX, localx, localy, ldx);
			DrawLocalD(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1F) {
			DrawTerrE(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalE(LocalBufX, localx, localy, ldx);
			DrawLocalE(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1G) {
			DrawTerrF(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalF(LocalBufX, localx, localy, ldx);
			DrawLocalF(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1H) {
			DrawTerrG(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalG(LocalBufX, localx, localy, ldx);
			DrawLocalG(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1I) {
			DrawTerrH(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalH(LocalBufX, localx, localy, ldx);
			DrawLocalH(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1J) {
			DrawTerrI(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalI(LocalBufX, localx, localy, ldx);
			DrawLocalI(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1K) {
			DrawTerrJ(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalJ(LocalBufX, localx, localy, ldx);
			DrawLocalJ(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1L) {
			DrawTerrK(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalK(LocalBufX, localx, localy, ldx);
			DrawLocalK(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1M) {
			DrawTerrL(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalL(LocalBufX, localx, localy, ldx);
			DrawLocalL(LocalBufY, localx, localy, ldy);
		}
		else {
			DrawTerrM(drawx, drawy, BmpTerr1[Ter1]);
			DrawLocalM(LocalBufX, localx, localy, ldx);
			DrawLocalM(LocalBufY, localx, localy, ldy);
		}
	
		// Druha vrstva terenu:
		if (Ter2 != 0) {
			if (Ter2 < tofsL2B)
				DrawUpTerrA(drawx, drawy, BmpTerr2[Ter2]);
			else if (Ter2 < tofsL2C)
				DrawUpTerrB(drawx, drawy, BmpTerr2[Ter2]);
			else if (Ter2 < tofsL2D)
				DrawUpTerrC(drawx, drawy, BmpTerr2[Ter2]);
			else if (Ter2 < tofsL2E)
				DrawUpTerrD(drawx, drawy, BmpTerr2[Ter2]);
			else if (Ter2 < tofsL2Spec)
				DrawUpTerrE(drawx, drawy, BmpTerr2[Ter2]);
		}
		
		
		// Pomocne zobrazovace:
		if (f->HasHelper) DrawRangesOnField(x, y, drawx, drawy);
		// Jednotky:
//		if (f->Unit != 0xFF) {}
	}
	
	
	
	// CASTECNA VIDITELNOST:
	else if (f->Visib == 1) {
		// Prvni vrstva terenu & lokalizace:
		if ((Ter1 % 256) < tofsL1B) {
			DrawTerrA(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalA(LocalBufX, localx, localy, ldx);
			DrawLocalA(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1C) {
			DrawTerrB(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalB(LocalBufX, localx, localy, ldx);
			DrawLocalB(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1D) {
			DrawTerrC(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalC(LocalBufX, localx, localy, ldx);
			DrawLocalC(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1E) {
			DrawTerrD(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalD(LocalBufX, localx, localy, ldx);
			DrawLocalD(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1F) {
			DrawTerrE(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalE(LocalBufX, localx, localy, ldx);
			DrawLocalE(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1G) {
			DrawTerrF(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalF(LocalBufX, localx, localy, ldx);
			DrawLocalF(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1H) {
			DrawTerrG(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalG(LocalBufX, localx, localy, ldx);
			DrawLocalG(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1I) {
			DrawTerrH(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalH(LocalBufX, localx, localy, ldx);
			DrawLocalH(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1J) {
			DrawTerrI(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalI(LocalBufX, localx, localy, ldx);
			DrawLocalI(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1K) {
			DrawTerrJ(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalJ(LocalBufX, localx, localy, ldx);
			DrawLocalJ(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1L) {
			DrawTerrK(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalK(LocalBufX, localx, localy, ldx);
			DrawLocalK(LocalBufY, localx, localy, ldy);
		}
		else if ((Ter1 % 256) < tofsL1M) {
			DrawTerrL(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalL(LocalBufX, localx, localy, ldx);
			DrawLocalL(LocalBufY, localx, localy, ldy);
		}
		else {
			DrawTerrM(drawx, drawy, BmpTerr1D[Ter1]);
			DrawLocalM(LocalBufX, localx, localy, ldx);
			DrawLocalM(LocalBufY, localx, localy, ldy);
		}
	
		// Druha vrstva terenu:
		if (Ter2 != 0) {
			if (!DontDrawL2[Ter2]) {
				if (Ter2 < tofsL2B)
					DrawUpTerrA(drawx, drawy, BmpTerr2D[Ter2]);
				else if (Ter2 < tofsL2C)
					DrawUpTerrB(drawx, drawy, BmpTerr2D[Ter2]);
				else if (Ter2 < tofsL2D)
					DrawUpTerrC(drawx, drawy, BmpTerr2D[Ter2]);
				else if (Ter2 < tofsL2E)
					DrawUpTerrD(drawx, drawy, BmpTerr2D[Ter2]);
				else if (Ter2 < tofsL2Spec)
					DrawUpTerrE(drawx, drawy, BmpTerr2D[Ter2]);
			}
		}

		// Pomocne zobrazovace:
		if (f->HasHelper) DrawRangesOnField(x, y, drawx, drawy);
	}
	
	
	
	// NULOVA VIDITELNOST:
	else {
		// Prvni vrstva terenu & lokalizace:
		if ((Ter1 % 256) < tofsL1B) {
			DrawTerrA(drawx, drawy, BmpTerr1[0]);
			DrawLocalA(LocalBufX, localx, localy, 0xFF);
			DrawLocalA(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1C) {
			DrawTerrB(drawx, drawy, BmpTerr1[tofsL1B]);
			DrawLocalB(LocalBufX, localx, localy, 0xFF);
			DrawLocalB(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1D) {
			DrawTerrC(drawx, drawy, BmpTerr1[tofsL1C]);
			DrawLocalC(LocalBufX, localx, localy, 0xFF);
			DrawLocalC(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1E) {
			DrawTerrD(drawx, drawy, BmpTerr1[tofsL1D]);
			DrawLocalD(LocalBufX, localx, localy, 0xFF);
			DrawLocalD(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1F) {
			DrawTerrE(drawx, drawy, BmpTerr1[tofsL1E]);
			DrawLocalE(LocalBufX, localx, localy, 0xFF);
			DrawLocalE(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1G) {
			DrawTerrF(drawx, drawy, BmpTerr1[tofsL1F]);
			DrawLocalF(LocalBufX, localx, localy, 0xFF);
			DrawLocalF(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1H) {
			DrawTerrG(drawx, drawy, BmpTerr1[tofsL1G]);
			DrawLocalG(LocalBufX, localx, localy, 0xFF);
			DrawLocalG(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1I) {
			DrawTerrH(drawx, drawy, BmpTerr1[tofsL1H]);
			DrawLocalH(LocalBufX, localx, localy, 0xFF);
			DrawLocalH(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1J) {
			DrawTerrI(drawx, drawy, BmpTerr1[tofsL1I]);
			DrawLocalI(LocalBufX, localx, localy, 0xFF);
			DrawLocalI(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1K) {
			DrawTerrJ(drawx, drawy, BmpTerr1[tofsL1J]);
			DrawLocalJ(LocalBufX, localx, localy, 0xFF);
			DrawLocalJ(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1L) {
			DrawTerrK(drawx, drawy, BmpTerr1[tofsL1K]);
			DrawLocalK(LocalBufX, localx, localy, 0xFF);
			DrawLocalK(LocalBufY, localx, localy, 0xFF);
		}
		else if ((Ter1 % 256) < tofsL1M) {
			DrawTerrL(drawx, drawy, BmpTerr1[tofsL1L]);
			DrawLocalL(LocalBufX, localx, localy, 0xFF);
			DrawLocalL(LocalBufY, localx, localy, 0xFF);
		}
		else {
			DrawTerrM(drawx, drawy, BmpTerr1[tofsL1M]);
			DrawLocalM(LocalBufX, localx, localy, 0xFF);
			DrawLocalM(LocalBufY, localx, localy, 0xFF);
		}
	}
	
}