16 if (dx<-8 || 8<dx || dy<-8 || 8<dy)
return false;
24 assert(! offset.
zero());
25 int dx1=dx+offset.
dx();
26 int dy1=dy+offset.
dy();
28 if (abs(dx0-dx1)>1 || abs(dy0-dy1)>1)
return true;
30 if (dx1<-8 || 8<dx1 || dy1<-8 || 8<dy1)
return true;
37 assert(! offset.
zero());
38 if (dx0==offset.
dx() && dy0==offset.
dy())
49 if (dx<-8 || 8<dx || dy<-8 || 8<dy)
return false;
61 unsigned int mask=0xff;
67 for (
int i=0;i<8;i++){
99 if ((ptype==
PROOK || ptype==
ROOK) && abs(dx)==1 && abs(dy)==1){
105 int index=offset32.
index();
113 typedef std::pair<Offset,unsigned char> OffsetMask;
114 typedef std::pair<int,OffsetMask> LenOffsetMask;
115 typedef vector<LenOffsetMask> LenOffsetMasks;
117 LenOffsetMasks lenOffsetMasks;
118 for (
size_t i=0;i<8;i++){
126 int len=abs(dx2)+abs(dy2);
128 unsigned char mask=(1<<i);
129 lenOffsetMasks.push_back(LenOffsetMask(len,OffsetMask(offset,mask)));
132 if (lenOffsetMasks.size()>0){
133 std::sort(lenOffsetMasks.begin(),lenOffsetMasks.end());
134 ret.setOffset(lenOffsetMasks[0].second.first);
135 for (
size_t i=0;i<lenOffsetMasks.size();i++){
136 ret.setMask(i,lenOffsetMasks[i].second.second);
159 for (
int dx= -8;dx<=8;dx++){
160 for (
int dy= -8;dy<=8;dy++){
162 int index=offset32.
index();
173 os <<
"LongEffect(" << longEffect.
getOffset() <<
",[";
174 for (
int i=0;i<3;i++){
175 if (longEffect.
getMask(i)==0)
break;
176 os << std::setbase(16) <<
"0x" << longEffect.
getMask(i) << std::setbase(10) <<
",";