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