Final implementation of MetaRotater
This commit is contained in:
parent
84913299f4
commit
0acfbdd912
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West>
|
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched = false>
|
||||||
class cMetaRotater : public Base
|
class cMetaRotater : public Base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -19,64 +19,70 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West>
|
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||||
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West>::MetaRotateCW(NIBBLETYPE a_Meta)
|
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West, AssertIfNotMatched>::MetaRotateCW(NIBBLETYPE a_Meta)
|
||||||
{
|
{
|
||||||
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
||||||
switch (a_Meta & BitFilter)
|
switch (a_Meta & BitFilter)
|
||||||
{
|
{
|
||||||
case South: return West | OtherMeta;
|
case South: return West | OtherMeta;
|
||||||
case West: return North | OtherMeta;
|
case West: return North | OtherMeta;
|
||||||
case North: return East | OtherMeta;
|
case North: return East | OtherMeta;
|
||||||
case East: return South | OtherMeta;
|
case East: return South | OtherMeta;
|
||||||
}
|
}
|
||||||
ASSERT(!"Invalid Meta value");
|
if(AssertIfNotMatched)
|
||||||
return a_Meta;
|
{
|
||||||
|
ASSERT(!"Invalid Meta value");
|
||||||
|
return a_Meta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West>
|
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||||
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West>::MetaRotateCCW(NIBBLETYPE a_Meta)
|
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West, AssertIfNotMatched>::MetaRotateCCW(NIBBLETYPE a_Meta)
|
||||||
{
|
{
|
||||||
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
||||||
switch (a_Meta & BitFilter)
|
switch (a_Meta & BitFilter)
|
||||||
{
|
{
|
||||||
case South: return East | OtherMeta;
|
case South: return East | OtherMeta;
|
||||||
case East: return North | OtherMeta;
|
case East: return North | OtherMeta;
|
||||||
case North: return West | OtherMeta;
|
case North: return West | OtherMeta;
|
||||||
case West: return South | OtherMeta;
|
case West: return South | OtherMeta;
|
||||||
}
|
}
|
||||||
ASSERT(!"Invalid Meta value");
|
if(AssertIfNotMatched)
|
||||||
return a_Meta;
|
{
|
||||||
|
ASSERT(!"Invalid Meta value");
|
||||||
|
return a_Meta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West>
|
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||||
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West>::MetaMirrorXY(NIBBLETYPE a_Meta)
|
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West, AssertIfNotMatched>::MetaMirrorXY(NIBBLETYPE a_Meta)
|
||||||
{
|
{
|
||||||
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
||||||
switch (a_Meta & BitFilter)
|
switch (a_Meta & BitFilter)
|
||||||
{
|
{
|
||||||
case South: return North | OtherMeta;
|
case South: return North | OtherMeta;
|
||||||
case North: return South | OtherMeta;
|
case North: return South | OtherMeta;
|
||||||
}
|
}
|
||||||
// Not Facing North or South; No change.
|
// Not Facing North or South; No change.
|
||||||
return a_Meta;
|
return a_Meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West>
|
template<class Base, NIBBLETYPE BitFilter, NIBBLETYPE North, NIBBLETYPE East, NIBBLETYPE South, NIBBLETYPE West, bool AssertIfNotMatched>
|
||||||
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West>::MetaMirrorYZ(NIBBLETYPE a_Meta)
|
NIBBLETYPE cMetaRotater<Base, BitFilter, North, East, South, West, AssertIfNotMatched>::MetaMirrorYZ(NIBBLETYPE a_Meta)
|
||||||
{
|
{
|
||||||
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
NIBBLETYPE OtherMeta = a_Meta & (~BitFilter);
|
||||||
switch (a_Meta & BitFilter)
|
switch (a_Meta & BitFilter)
|
||||||
{
|
{
|
||||||
case West: return East | OtherMeta;
|
case West: return East | OtherMeta;
|
||||||
case East: return West | OtherMeta;
|
case East: return West | OtherMeta;
|
||||||
}
|
}
|
||||||
// Not Facing East or West; No change.
|
// Not Facing East or West; No change.
|
||||||
return a_Meta;
|
return a_Meta;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user