diff --git a/projects/mtg/src/Closest.cpp b/projects/mtg/src/Closest.cpp new file mode 100644 index 000000000..7403680bf --- /dev/null +++ b/projects/mtg/src/Closest.cpp @@ -0,0 +1,31 @@ +#ifndef _CLOSEST_H_ +#define _CLOSEST_H_ + +template +static inline Target* closest(vector& cards, Limitor* limitor, Target* ref) +{ + Target* card = ref; + float curdist = 1000000.0f; // This is bigger than any possible distance + for (typename vector::iterator it = cards.begin(); it != cards.end(); ++it) + { + if (!T::test(ref, (*it))) continue; + if ((*it)->actA < 32) continue; + if ((NULL != limitor) && (!limitor->select(*it))) continue; + if (ref) + { + float dist = ((*it)->x - ref->x) * ((*it)->x - ref->x) + ((*it)->y - ref->y) * ((*it)->y - ref->y); + if (dist < curdist) + { + curdist = dist; + card = *it; + } + } + else + card = *it; + } + { CardView* c = dynamic_cast(ref); if (c) c->zoom = 1.0; } + { CardView* c = dynamic_cast(card); if (c) c->zoom = 1.4; } + return card; +} + +#endif