void saiki(std::list<AnimParameter*>& list, std::list<AnimParameter*>::iterator& f){ if (f == list.begin()) return; auto cp = *f; auto d = --f; auto dp = *d; saiki(list, f); if (cp->beforeAnimBlend >= 1.0f){ list.remove(dp); delete (dp); } }
int saiki(int now, int nowi, int nowj){ int i; int ni,nj; if(now==(1<<(count-1))-1) return 1; if(now&1) return 0; if(dp[now][board[nowi][nowj]-1]!=0) return dp[now][board[nowi][nowj]-1]-1; int res = 0; for(i=0;i<4;i++){ ni = nowi; nj = nowj; for(;;){ ni += vx[i]; nj += vy[i];; if(ok(ni,nj)==0) break; if(board[ni][nj]!=0){ if((now>>(board[ni][nj]-1))&1) break; else res += saiki(now+(1<<(board[ni][nj]-1)),ni,nj); } } }
void Graphic::BindAnimation(ActorPtr actor, SHADER_ID id, float frameTime){ Matrix4 animMat[BONEMAXCOUNT]; auto ite = animParameter[actor].begin(); auto i = (*ite); animation.AnimBlend(animMat, i->animMat, i->animTime, i->animMat2, i->animTime2, i->animBlend, i->roopFlag); i->animTime += (*i->updateAnimTime) * frameTime; if (i->updateAnimTime2 != NULL) i->animTime2 += (*i->updateAnimTime2) * frameTime; if (i->beforeAnimBlend < 1.0f) i->beforeAnimBlend += (*i->beforeAnimBlendTime) * frameTime; else i->beforeAnimBlend = 1.0f; for (ite++; ite != animParameter[actor].end(); ++ite){ i = (*ite); Matrix4 animMat2[BONEMAXCOUNT]; animation.AnimBlend(animMat2, i->animMat, i->animTime, i->animMat2, i->animTime2, i->animBlend, i->roopFlag); animation.AnimBlend(animMat, animMat2, i->beforeAnimBlend, i->animMat); i->animTime += (*i->updateAnimTime) * frameTime; if (i->updateAnimTime2 != NULL) i->animTime2 += (*i->updateAnimTime2) * frameTime; if (i->beforeAnimBlend < 1.0f) i->beforeAnimBlend += (*i->beforeAnimBlendTime) * frameTime; else i->beforeAnimBlend = 1.0f; } saiki(animParameter[actor], --animParameter[actor].end()); animation.BindAnim(&shader[id], animMat); animBind = true; }