int CGeometricObjects::AddSpline(float3 b1, float3 b2, float3 b3, float3 b4, float width, int arrow, int lifeTime, int group) { if(group==0) group=firstFreeGroup++; float3 old1,old2; old1=CalcSpline( 0.00,b1,b2,b3,b4); old2=CalcSpline( 0.05,b1,b2,b3,b4); for(int a=0;a<20;++a){ float3 np=CalcSpline(a*0.05+0.1,b1,b2,b3,b4); float3 dir1=(old2-old1).Normalize(); float3 dir2=(np-old2).Normalize(); if(arrow==1 && a==19){ CGeoSquareProjectile* gsp=new CGeoSquareProjectile(old1,old2,dir1,dir2,width*0.7,0); geoGroups[group].squares.push_back(gsp); // info->AddLine("%f %f %f %f %f %f %f %f %f",old1.x,old1.y,old1.z,old2.x,old2.y,old2.z,np.x,np.y,np.z); } else { CGeoSquareProjectile* gsp=new CGeoSquareProjectile(old1,old2,dir1,dir2,width*0.5,width*0.5); geoGroups[group].squares.push_back(gsp); } old1=old2; old2=np; } if(lifeTime>=0) toBeDeleted.insert(std::pair<int,int>(gs->frameNum+lifeTime,group)); return group; }
int CGeometricObjects::AddSpline(float3 b1, float3 b2, float3 b3, float3 b4, float width, int arrow, int lifeTime, int group) { if (group == 0) { group = firstFreeGroup++; } float3 old1, old2; old1 = CalcSpline(0.00f, b1, b2, b3, b4); old2 = CalcSpline(0.05f, b1, b2, b3, b4); for (int a = 0; a < 20; ++a) { const float3 np = CalcSpline(a*0.05f + 0.1f, b1, b2, b3, b4); const float3 dir1 = (old2 - old1).ANormalize(); const float3 dir2 = (np - old2).ANormalize(); float w1, w2; if ((arrow == 1) && (a == 19)) { w1 = width; w2 = 0; } else { w1 = width * 0.5f; w2 = w1; } CGeoSquareProjectile* gsp = new CGeoSquareProjectile(old1, old2, dir1, dir2, w1, w2); geoGroups[group].squares.push_back(gsp); old1 = old2; old2 = np; } if (lifeTime > 0) { toBeDeleted.insert(std::pair<int, int>(gs->frameNum + lifeTime, group)); } return group; }
int CGeometricObjects::AddSpline(float3 b1, float3 b2, float3 b3, float3 b4, float width, int arrow, int lifeTime, int group) { if (group == 0) group = firstFreeGroup++; float3 old1, old2; old1 = CalcSpline(0.00f, b1, b2, b3, b4); old2 = CalcSpline(0.05f, b1, b2, b3, b4); for (int a = 0; a < 20; ++a) { const float3 np = CalcSpline(a*0.05f + 0.1f, b1, b2, b3, b4); const float3 dir1 = (old2 - old1).ANormalize(); const float3 dir2 = (np - old2).ANormalize(); float w1, w2; if ((arrow == 1) && (a == 19)) { w1 = width; w2 = 0; } else { w1 = width * 0.5f; w2 = w1; } CGeoSquareProjectile* gsp = projMemPool.alloc<CGeoSquareProjectile>(old1, old2, dir1, dir2, w1, w2); geoGroups[group].squares.push_back(gsp); old1 = old2; old2 = np; } if (lifeTime > 0) timedGroups[gs->frameNum + lifeTime].push_back(group); return group; }