aboutsummaryrefslogtreecommitdiff
path: root/build/android/icons/minimap_btn.svg
blob: deda327175dd5a17a54bb2eae8b31ea17376f278 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="512"
   height="512"
   viewBox="0 0 135.46666 135.46667"
   version="1.1"
   id="svg8"
   inkscape:version="0.92.1 r15371"
   sodipodi:docname="minimap_btn.svg"
   inkscape:export-filename="/home/stu/Desktop/icons/png/minimap_btn.png"
   inkscape:export-xdpi="24.000002"
   inkscape:export-ydpi="24.000002">
  <defs
     id="defs2">
    <filter
       style="color-interpolation-filters:sRGB;"
       inkscape:label="Colorize"
       id="filter4628">
      <feComposite
         in2="SourceGraphic"
         operator="arithmetic"
         k1="0"
         k2="1"
         result="composite1"
         id="feComposite4614" />
      <feColorMatrix
         in="composite1"
         values="1"
         type="saturate"
         result="colormatrix1"
         id="feColorMatrix4616" />
      <feFlood
         flood-opacity="1"
         flood-color="rgb(158,0,0)"
         result="flood1"
         id="feFlood4618" />
      <feBlend
         in="flood1"
         in2="colormatrix1"
         mode="multiply"
         result="blend1"
         id="feBlend4620" />
      <feBlend
         in2="blend1"
         mode="screen"
         result="blend2"
         id="feBlend4622" />
      <feColorMatrix
         in="blend2"
         values="1"
         type="saturate"
         result="colormatrix2"
         id="feColorMatrix4624" />
      <feComposite
         in="colormatrix2"
         in2="SourceGraphic"
         operator="in"
         k2="1"
         result="composite2"
         id="feComposite4626" />
    </filter>
  </defs>
  <sodipodi:namedview
     id="base"
     pagecolor="#404040"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0"
     inkscape:pageshadow="2"
     inkscape:zoom="0.56808711"
     inkscape:cx="140.1995"
     inkscape:cy="242.801"
     inkscape:document-units="mm"
     inkscape:current-layer="layer2"
     showgrid="true"
     units="px"
     inkscape:window-width="1920"
     inkscape:window-height="1023"
     inkscape:window-x="0"
     inkscape:window-y="34"
     inkscape:window-maximized="1"
     inkscape:pagecheckerboard="false"
     inkscape:snap-grids="true"
     inkscape:snap-page="true"
     showguides="false">
    <inkscape:grid
       type="xygrid"
       id="grid16"
       spacingx="0.26458333"
       spacingy="0.26458333"
       empspacing="4"
       color="#40ff40"
       opacity="0.1254902"
       empcolor="#40ff40"
       empopacity="0.25098039" />
  </sodipodi:namedview>
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
        <cc:license
           rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
      </cc:Work>
      <cc:License
         rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
        <cc:permits
           rdf:resource="http://creativecommons.org/ns#Reproduction" />
        <cc:permits
           rdf:resource="http://creativecommons.org/ns#Distribution" />
        <cc:requires
           rdf:resource="http://creativecommons.org/ns#Notice" />
        <cc:requires
           rdf:resource="http://creativecommons.org/ns#Attribution" />
        <cc:permits
           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
        <cc:requires
           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
      </cc:License>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:groupmode="layer"
     id="layer2"
     inkscape:label="Layer 2"
     style="display:inline">
    <path
       style="fill:none;stroke:#ffffff;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="M 25.4,25.400001 52.859457,36.945456 V 110.06667 L 25.4,98.521213 Z"
       id="path4857"
       inkscape:connector-curvature="0"
       sodipodi:nodetypes="ccccc" />
    <path
       style="display:inline;fill:none;stroke:#ffffff;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="M 82.607193,25.496213 110.06667,37.041668 V 110.16289 L 82.607192,98.617425 Z"
       id="path4857-9"
       inkscape:connector-curvature="0"
       sodipodi:nodetypes="ccccc" />
    <path
       style="display:inline;fill:#ffffff;fill-opacity:0.1254902;stroke:#ffffff;stroke-width:6;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="M 52.859457,36.900035 82.607203,25.400001 V 98.233546 L 52.859457,109.73359 Z"
       id="path4857-1"
       inkscape:connector-curvature="0"
       sodipodi:nodetypes="ccccc" />
  </g>
</svg>
opt">, '\0'); is.read(&a.data[0], data_len); areas.emplace_back(std::move(a)); } bool read_ids = is.good(); // EOF for old formats for (auto &area : areas) { if (read_ids) area.id = readU32(is); insertArea(&area); } } void AreaStore::invalidateCache() { if (m_cache_enabled) { m_res_cache.invalidate(); } } u32 AreaStore::getNextId() const { u32 free_id = 0; for (const auto &area : areas_map) { if (area.first > free_id) return free_id; // Found gap free_id = area.first + 1; } // End of map return free_id; } void AreaStore::setCacheParams(bool enabled, u8 block_radius, size_t limit) { m_cache_enabled = enabled; m_cacheblock_radius = MYMAX(block_radius, 16); m_res_cache.setLimit(MYMAX(limit, 20)); invalidateCache(); } void AreaStore::cacheMiss(void *data, const v3s16 &mpos, std::vector<Area *> *dest) { AreaStore *as = (AreaStore *)data; u8 r = as->m_cacheblock_radius; // get the points at the edges of the mapblock v3s16 minedge(mpos.X * r, mpos.Y * r, mpos.Z * r); v3s16 maxedge( minedge.X + r - 1, minedge.Y + r - 1, minedge.Z + r - 1); as->getAreasInArea(dest, minedge, maxedge, true); /* infostream << "Cache miss with " << dest->size() << " areas, between (" << minedge.X << ", " << minedge.Y << ", " << minedge.Z << ") and (" << maxedge.X << ", " << maxedge.Y << ", " << maxedge.Z << ")" << std::endl; // */ } void AreaStore::getAreasForPos(std::vector<Area *> *result, v3s16 pos) { if (m_cache_enabled) { v3s16 mblock = getContainerPos(pos, m_cacheblock_radius); const std::vector<Area *> *pre_list = m_res_cache.lookupCache(mblock); size_t s_p_l = pre_list->size(); for (size_t i = 0; i < s_p_l; i++) { Area *b = (*pre_list)[i]; if (AST_CONTAINS_PT(b, pos)) { result->push_back(b); } } } else { return getAreasForPosImpl(result, pos); } } //// // VectorAreaStore //// bool VectorAreaStore::insertArea(Area *a) { if (a->id == U32_MAX) a->id = getNextId(); std::pair<AreaMap::iterator, bool> res = areas_map.insert(std::make_pair(a->id, *a)); if (!res.second) // ID is not unique return false; m_areas.push_back(&res.first->second); invalidateCache(); return true; } bool VectorAreaStore::removeArea(u32 id) { AreaMap::iterator it = areas_map.find(id); if (it == areas_map.end()) return false; Area *a = &it->second; for (std::vector<Area *>::iterator v_it = m_areas.begin(); v_it != m_areas.end(); ++v_it) { if (*v_it == a) { m_areas.erase(v_it); break; } } areas_map.erase(it); invalidateCache(); return true; } void VectorAreaStore::getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos) { for (Area *area : m_areas) { if (AST_CONTAINS_PT(area, pos)) { result->push_back(area); } } } void VectorAreaStore::getAreasInArea(std::vector<Area *> *result, v3s16 minedge, v3s16 maxedge, bool accept_overlap) { for (Area *area : m_areas) { if (accept_overlap ? AST_AREAS_OVERLAP(minedge, maxedge, area) : AST_CONTAINS_AREA(minedge, maxedge, area)) { result->push_back(area); } } } #if USE_SPATIAL static inline SpatialIndex::Region get_spatial_region(const v3s16 minedge, const v3s16 maxedge) { const double p_low[] = {(double)minedge.X, (double)minedge.Y, (double)minedge.Z}; const double p_high[] = {(double)maxedge.X, (double)maxedge.Y, (double)maxedge.Z}; return SpatialIndex::Region(p_low, p_high, 3); } static inline SpatialIndex::Point get_spatial_point(const v3s16 pos) { const double p[] = {(double)pos.X, (double)pos.Y, (double)pos.Z}; return SpatialIndex::Point(p, 3); } bool SpatialAreaStore::insertArea(Area *a) { if (a->id == U32_MAX) a->id = getNextId(); if (!areas_map.insert(std::make_pair(a->id, *a)).second) // ID is not unique return false; m_tree->insertData(0, nullptr, get_spatial_region(a->minedge, a->maxedge), a->id); invalidateCache(); return true; } bool SpatialAreaStore::removeArea(u32 id) { std::map<u32, Area>::iterator itr = areas_map.find(id); if (itr != areas_map.end()) { Area *a = &itr->second; bool result = m_tree->deleteData(get_spatial_region(a->minedge, a->maxedge), id); areas_map.erase(itr); invalidateCache(); return result; } else { return false; } } void SpatialAreaStore::getAreasForPosImpl(std::vector<Area *> *result, v3s16 pos) { VectorResultVisitor visitor(result, this); m_tree->pointLocationQuery(get_spatial_point(pos), visitor); } void SpatialAreaStore::getAreasInArea(std::vector<Area *> *result, v3s16 minedge, v3s16 maxedge, bool accept_overlap) { VectorResultVisitor visitor(result, this); if (accept_overlap) { m_tree->intersectsWithQuery(get_spatial_region(minedge, maxedge), visitor); } else { m_tree->containsWhatQuery(get_spatial_region(minedge, maxedge), visitor); } } SpatialAreaStore::~SpatialAreaStore() { delete m_tree; } SpatialAreaStore::SpatialAreaStore() { m_storagemanager = SpatialIndex::StorageManager::createNewMemoryStorageManager(); SpatialIndex::id_type id; m_tree = SpatialIndex::RTree::createNewRTree( *m_storagemanager, .7, // Fill factor 100, // Index capacity 100, // Leaf capacity 3, // dimension :) SpatialIndex::RTree::RV_RSTAR, id); } #endif