MCPcopy Create free account
hub / github.com/OpenApoc/OpenApoc / draw

Method draw

game/state/tilemap/tileobject_scenery.cpp:16–74  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14}
15
16void TileObjectScenery::draw(Renderer &r, TileTransform &transform, Vec2<float> screenPosition,
17 TileViewMode mode, bool visible, int, bool, bool)
18{
19 std::ignore = transform;
20 // Mode isn't used as TileView::tileToScreenCoords already transforms according to the mode
21 auto scenery = this->scenery.lock();
22 if (!scenery)
23 {
24 LogError("Called with no owning scenery object");
25 return;
26 }
27 // FIXME: If damaged use damaged tile sprites?
28 auto &type = scenery->type;
29 sp<Image> sprite;
30 sp<Image> overlaySprite;
31 Vec2<float> transformedScreenPos = screenPosition;
32 switch (mode)
33 {
34 case TileViewMode::Isometric:
35 sprite = type->sprite;
36 overlaySprite = type->overlaySprite;
37 transformedScreenPos -= type->imageOffset;
38 break;
39 case TileViewMode::Strategy:
40 sprite = type->strategySprite;
41 // All strategy sprites so far are 8x8 so offset by 4 to draw from the center
42 // FIXME: Not true for large sprites (2x2 UFOs?)
43 if (sprite)
44 {
45 transformedScreenPos -= sprite->size / (unsigned)2;
46 }
47 break;
48 default:
49 LogError("Unsupported view mode");
50 }
51 if (sprite)
52 {
53 if (visible)
54 {
55 r.draw(sprite, transformedScreenPos);
56 }
57 else
58 {
59 r.drawTinted(sprite, transformedScreenPos, COLOUR_TRANSPARENT_BLACK);
60 }
61 }
62 // FIXME: Should be drawn at 'later' Z than scenery (IE on top of any vehicles on tile?)
63 if (overlaySprite)
64 {
65 if (visible)
66 {
67 r.draw(overlaySprite, transformedScreenPos);
68 }
69 else
70 {
71 r.drawTinted(overlaySprite, transformedScreenPos, COLOUR_TRANSPARENT_BLACK);
72 }
73 }

Callers

nothing calls this directly

Calls 1

drawTintedMethod · 0.45

Tested by

no test coverage detected