MCPcopy Create free account
hub / github.com/DFHack/dfhack / VeinEdgeBitmask

Class VeinEdgeBitmask

plugins/changevein.cpp:38–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36static const df::coord2d DIAGONAL_OFFSETS[] = { df::coord2d(16, -16), df::coord2d(16, 16), df::coord2d(-16, -16), df::coord2d(-16, 16) };
37
38struct VeinEdgeBitmask
39{
40 int32_t mat;
41 // North: 0 | East: 1 | South: 2 | West: 3
42 uint16_t edges[4];
43 // NE: 0 | SE: 1 | SW: 2 | NW: 3
44 bool corners[4];
45
46 VeinEdgeBitmask(df::block_square_event_mineralst* event)
47 {
48 mat = event->inorganic_mat;
49
50 // North & South
51 edges[NORTH] = event->tile_bitmask.bits[0];
52 edges[SOUTH] = event->tile_bitmask.bits[15];
53
54 // East & West
55 edges[EAST] = 0;
56 edges[WEST] = 0;
57 for (uint8_t i = 0; i < 16; i++)
58 {
59 // East-most tile is represented by the largest bit
60 edges[EAST] |= (event->tile_bitmask.bits[i] & 0b1000000000000000) >> (15 - i);
61 // West-most tile is represented by the smallest bit
62 edges[WEST] |= (event->tile_bitmask.bits[i] & 0b0000000000000001) << i;
63 }
64
65 corners[NORTHEAST] = edges[NORTH] & 0b1000000000000000;
66 corners[SOUTHEAST] = edges[SOUTH] & 0b1000000000000000;
67 corners[SOUTHWEST] = edges[SOUTH] & 0b0000000000000001;
68 corners[NORTHWEST] = edges[NORTH] & 0b0000000000000001;
69 }
70
71 void SmudgeBitmask()
72 {
73 for (uint8_t i = 0; i < 4; i++)
74 {
75 edges[i] |= (edges[i] << 1) | (edges[i] >> 1);
76 }
77 }
78
79 bool Merge(VeinEdgeBitmask& other)
80 {
81 if (other.mat != this->mat)
82 return false;
83
84 for (uint8_t i = 0; i < 4; i++)
85 {
86 this->edges[i] |= other.edges[i];
87 this->corners[i] |= other.corners[i];
88 }
89
90 return true;
91 }
92
93 bool Merge(df::block_square_event_mineralst* event)
94 {
95 VeinEdgeBitmask temp = VeinEdgeBitmask(event);

Callers 3

MergeMethod · 0.85
df_changeveinFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected