ZCharacterView::ZCharacterView(const char* szName, MWidget* pParent, MListener* pListener) : ZMeshView(szName, pParent, pListener) { SetDrawInfo(false); m_fDist = 235.0f; m_fMaxDist = 400.0f; m_fMinDist = 120.0f; m_Eye = rvector(0.0f, 92, -m_fDist); m_At = rvector(0, 92, 0); m_Up = rvector(0, 1, 0); memset(&m_Info, 0, sizeof(ZCharacterViewInfo)); m_bVisibleEquipment = false; m_nVisualWeaponParts = MMCIP_PRIMARY; m_bAutoRotate = false; m_dwTime = GetGlobalTimeMS(); for(int i=0; i<MMCIP_END; i++) { m_ItemSlots[i].m_nItemID = 0; } RepositionItemSlots(); }
ZEffectIcon::ZEffectIcon(RMesh* pMesh, ZObject* pObj) : ZEffectAniMesh(pMesh,rvector(0,0,0),rvector(1,0,0)) { if(pObj) m_uid = pObj->GetUID(); m_type = eq_parts_pos_info_etc; }
void ZBrain::AdjustWayPointWithBound(list<rvector>& wayPointList, RNavigationMesh* pNavMesh) { // 몹이 코너의 벽모서리 앞에서, 벽에 밀착한 플레이어를 추적하면 waypoint 1개로 길찾기된다, 그러나 코너 앞이므로 // 바운드볼륨때문에 벽모서리에 걸려서 제자리 걸음을 하게 된다. 이를 방지하기 위해, 자기 바운드 좌우측 지점으로부터 // 목표물에 길찾기를 해보고 waypoint 1개 이상으로 나오면(즉 벽이 가로막았으면) 사이드 스텝을 먼저 해서 벽코너로부터 몸을 떨어뜨린다 // * waypoint가 여러개 나왔을 때는 첫번째 waypoint를 가지고 테스트한다 if (wayPointList.empty()) return; const rvector& targetpos = *(wayPointList.begin()); // 내 중점~첫목표점을 이용해 내가 가고자하는 방향으로부터 바운딩실린더의 좌우측의 점을 얻어내보자 rvector center = m_pBody->GetPosition(); rvector dir = targetpos - center; dir.z = 0; Normalize(dir); dir *= m_pBody->GetCollRadius() * 0.8f; // 자기 충돌 반지름보다 약간 작게 *0.8 rvector side1 = center + rvector(-dir.y, dir.x, 0); rvector side2 = center + rvector( dir.y, -dir.x, 0); // 좌우측 점에서부터 첫지점을 향해 길찾기 해본다. 2개이상이 나오면 몸통 일부가 기둥에 막혀 못움직이므로 // 그냥 반대쪽으로 한발짝 먼저 움직여주자 if ( pNavMesh->BuildNavigationPath( side1, targetpos) && pNavMesh->GetWaypointList().size() > 1) m_WayPointList.push_front(side2); else if ( pNavMesh->BuildNavigationPath( side2, targetpos) && pNavMesh->GetWaypointList().size() > 1) m_WayPointList.push_front(side1); }
void ZEffectBillboardTexAniList::Add(rvector &pos, rvector& vel,int frame,float fAddTime,float fStartSize,float fEndSize,float fLifeTime, ZCharacter* pChar,RMeshPartsPosInfoType partstype) { ZEFFECTBILLBOARDTEXANIITEM *pNewItem = new ZEFFECTBILLBOARDTEXANIITEM; push_back(pNewItem); pNewItem->fElapsedTime=0; pNewItem->velocity = vel; pNewItem->normal=-RCameraDirection; pNewItem->up=rvector(0,0,1); pNewItem->accel = rvector(0,0,0); pNewItem->position=pos; pNewItem->fStartSize=fStartSize; pNewItem->fEndSize=fEndSize; pNewItem->fOpacity=1.f; pNewItem->dwColor = 0xffffff; pNewItem->fAddTime = fAddTime; if(fLifeTime==-1) pNewItem->fLifeTime = m_fLifeTime; else pNewItem->fLifeTime = fLifeTime; pNewItem->frame = frame; if(pChar) pNewItem->CharUID = pChar->GetUID(); else pNewItem->CharUID = MUID(0,0); pNewItem->partstype = partstype; }
bool ZActor::ProcessMotion(float fDelta) { if (!m_pVMesh) return false; m_pVMesh->Frame(); rvector pos = m_Position; rvector dir = m_Direction; dir.z = 0; rmatrix world; MakeWorldMatrix(&world,rvector(0,0,0), dir,rvector(0,0,1)); rvector MeshPosition ; MeshPosition = pos; MakeWorldMatrix(&world,pos,dir,rvector(0,0,1)); m_pVMesh->SetWorldMatrix(world); UpdatePosition(fDelta); if(IsActiveModule(ZMID_LIGHTNINGDAMAGE)==false) { if (m_pVMesh->isOncePlayDone()) { m_Animation.Input(ZA_ANIM_DONE); } } return true; }
_USING_NAMESPACE_REALSPACE2 _NAMESPACE_REALSPACE2_BEGIN ////////////////////////////////////////////////////////////////////////////////// // RMeshNodeData Class RMeshNodeData::RMeshNodeData() { m_id = -1; m_u_id = -1; m_mtrl_id = -1; m_spine_local_pos.x = 0.f; m_spine_local_pos.y = 0.f; m_spine_local_pos.z = 0.f; m_ap_scale = rvector(1.f,1.f,1.f); m_axis_scale = rvector(0.f,0.f,0.f); m_axis_scale_angle = 0.f; m_axis_rot = rvector(0.f,0.f,0.f); m_axis_rot_angle = 0.f; D3DXMatrixIdentity(&m_mat_base); D3DXMatrixIdentity(&m_mat_parent_inv); D3DXMatrixIdentity(&m_mat_local); D3DXMatrixIdentity(&m_mat_inv); D3DXMatrixIdentity(&m_mat_etc); D3DXMatrixIdentity(&m_mat_flip); D3DXMatrixIdentity(&m_mat_scale); D3DXMatrixIdentity(&m_mat_result); D3DXMatrixIdentity(&m_mat_add); D3DXMatrixIdentity(&m_mat_ref); D3DXMatrixIdentity(&m_mat_ref_inv); m_point_list = NULL; m_face_normal_list = NULL; // m_point_normal_list = NULL; m_point_color_list = NULL; m_face_list = NULL; // m_face_normal = NULL; m_physique = NULL; m_point_num = 0; m_face_num = 0; m_physique_num = 0; m_point_normal_num = 0; m_point_color_num = 0; m_min = rvector( 999.f, 999.f, 999.f); m_max = rvector(-999.f,-999.f,-999.f); }
bool ZSurvival::OnPeerNPCAttackRange(MCommand* pCommand) { MUID uidOwner; pCommand->GetParameter(&uidOwner, 0, MPT_UID); MCommandParameter* pParam = pCommand->GetParameter(1); if(pParam->GetType()!=MPT_BLOB) return false; // 문제가 있다 ZPACKEDSHOTINFO *pinfo =(ZPACKEDSHOTINFO*)pParam->GetPointer(); rvector pos = rvector(pinfo->posx,pinfo->posy,pinfo->posz); rvector to = rvector(pinfo->tox,pinfo->toy,pinfo->toz); // rocket 테스트로 넣어봤다. ZObject* pOwner = ZGetGame()->m_ObjectManager.GetObject(uidOwner); MMatchItemDesc* pDesc = NULL; if(pOwner==NULL) return false; // 보통 치트키를 쓸경우... if( pOwner->GetItems() ) if( pOwner->GetItems()->GetSelectedWeapon() ) pDesc = pOwner->GetItems()->GetSelectedWeapon()->GetDesc(); if (pDesc) { if (pDesc->m_nWeaponType.Ref() == MWT_ROCKET) { rvector dir = to - pos; Normalize(dir); ZGetGame()->m_WeaponManager.AddRocket(pos,dir,pOwner); ZApplication::GetSoundEngine()->PlaySEFire(pDesc, pos.x, pos.y, pos.z, false); return true; } else if (pDesc->m_nWeaponType.Ref() == MWT_SKILL) { rvector dir = to - pos; Normalize(dir); ZSkill skill; skill.Init(pDesc->m_nGadgetID.Ref(), pOwner); ZApplication::GetSoundEngine()->PlaySEFire(pDesc, pos.x, pos.y, pos.z, false); ZGetGame()->m_WeaponManager.AddMagic(&skill, pos, dir, pOwner); return true; } } else return false; ZGetGame()->OnPeerShot_Range((MMatchCharItemParts)pinfo->sel_type,uidOwner,ZGetGame()->GetTime(),pos,to); return true; }
ZRangeWeaponHitDice::ZRangeWeaponHitDice() :m_fHitProbability(0.0f), m_fGlobalFactor(1.0f), m_fTargetHeight(180.0f), m_fTargetSpeed(0.0f), m_TargetPosition(rvector(0,0,0)), m_SourcePosition(rvector(0,0,0)), m_fDistance(0.0f) { }
void ZCamera::Init() { m_fAngleX = CAMERA_DEFAULT_ANGLEX; m_fAngleZ = CAMERA_DEFAULT_ANGLEZ; m_fDist = CAMERA_DEFAULT_DISTANCE; m_fCurrentDist = CAMERA_DEFAULT_DISTANCE; m_bShocked = false; m_Position = rvector(0, 0, 0); m_CurrentTarget = rvector(0, 0, 0); }
RSBase3D::RSBase3D() { position=rvector(0,0,0); m_dir=rvector(0,-1,0);m_up=rvector(0,0,1); parent=NULL; matm=IdentityMatrix(); mat=IdentityMatrix(); MaxScaleFactor=ScaleFactorX=ScaleFactorY=ScaleFactorZ=1.0f; RoleFactor=0.0f;LastFrame=0; nShadowStyle=RS_SHADOWSTYLE_NONE; m_bVisible=true; }
int MIsIntersectLineAndRectangle(float *pT, // 매개 변수 리턴 ( 0.0 ~ 1.0 ) rvector& Pos, rvector& Dir, // Line float fLeft, float fTop, float fRight, float fBottom) // Rect { bool bIntersection; float fNearestT = 2.0f; float t[4]; /* +-- x | y 3 +---+ 0 | | 2 +---+ 1 */ float fXa1 = Pos.x; float fYa1 = Pos.y; float fXa2 = Pos.x + Dir.x; float fYa2 = Pos.y + Dir.y; float t2[4]; if(fXa2>fXa1){ bIntersection = MIsIntersectLineAndLine(&t[0], &t2[0], Pos, Dir, rvector(fLeft, fTop, 0), rvector(fLeft, fBottom, 0)); if(bIntersection==true) fNearestT = min(fNearestT, t[0]); } if(fYa2<fYa1){ bIntersection = MIsIntersectLineAndLine(&t[1], &t2[0], Pos, Dir, rvector(fLeft, fBottom, 0), rvector(fRight, fBottom, 0)); if(bIntersection==true) fNearestT = min(fNearestT, t[1]); } if(fXa2<fXa1){ bIntersection = MIsIntersectLineAndLine(&t[2], &t2[0], Pos, Dir, rvector(fRight, fBottom, 0), rvector(fRight, fTop, 0)); if(bIntersection==true) fNearestT = min(fNearestT, t[2]); } if(fYa2>fYa1){ bIntersection = MIsIntersectLineAndLine(&t[3], &t2[0], Pos, Dir, rvector(fRight, fTop, 0), rvector(fLeft, fTop, 0)); if(bIntersection==true) fNearestT = min(fNearestT, t[3]); } if(fNearestT<=1.0f){ *pT = fNearestT; if(fNearestT==t[0]) return 0; else if(fNearestT==t[1]) return 1; else if(fNearestT==t[2]) return 2; else if(fNearestT==t[3]) return 3; } return -1; }
ZMapDesc::ZMapDesc() { m_WaitCamPos = rvector(0.0f, 0.0f, 1000.0f); m_WaitCamDir = rvector(0.0f, 0.5f, -0.5f); m_SmokeSSDrawBackupTime = 0.f; m_SmokeSTDrawBackupTime = 0.f; m_SmokeTSDrawBackupTime = 0.f; m_bRenderedSS = false; m_bRenderedST = false; m_bRenderedTS = false; }
void RSObject::CreateShadowTexture() { #define EFFECTIVE_SIZE 0.99f #define SHADOW_COLOR 0xa0a0a0 rtexture rt; rt.New(256,256,RTEXTUREFORMAT_24); rt.Fill(0xffffff); rmatrix44 tm; int i,j,k; float f_max=m_BoundingSphereRadiusXY; tm=ScaleMatrix44(128.0f*EFFECTIVE_SIZE/f_max) *ViewMatrix44(rvector(0,0,0),rvector(1,2,-1),rvector(0,1,0)) *TranslateMatrix44(128,128,0); for(i=0;i<nMesh;i++) { CMesh *mesh=meshes+i; for(j=0;j<mesh->nFaces;j++) { CFaces *faces=mesh->faceshead+j; for(k=0;k<faces->ni;k+=3) { rvector a=TransformVector(*(rvector*)(&faces->tnlvertices[faces->indicies[k]].x),tm); rvector b=TransformVector(*(rvector*)(&faces->tnlvertices[faces->indicies[k+1]].x),tm); rvector c=TransformVector(*(rvector*)(&faces->tnlvertices[faces->indicies[k+2]].x),tm); #define CHECK(x) _ASSERT((x>=0)&&(x<256)) rt.FillTriangle(a.x,a.y,b.x,b.y,c.x,c.y,SHADOW_COLOR); CHECK(a.x);CHECK(a.y); CHECK(b.x);CHECK(b.y); CHECK(c.x);CHECK(c.y); } } } rtexture newrt1;newrt1.CreateAsHalf(&rt); // 128 rtexture newrt2;newrt2.CreateAsHalf(&newrt1); // 64 newrt2.FillBoundary(0xffffff); newrt2.SaveAsBMP("testtest.bmp"); m_hShadowTexture=RSCreateTexture( newrt2.GetWidth(),newrt2.GetHeight(), (char*)newrt2.GetData(),NULL,true,"Object:ShadowTexture"); }
////////////////////////////////////////////////////////////////////////// // setForce ////////////////////////////////////////////////////////////////////////// void RCharCloth::setForce( rvector& force_ ) { if( mInitParticle ) { mForceField = rvector( 0.0f, 0.0f, 0.0f ); } else { D3DXVECTOR4 vec; rmatrix mat = mWorldInv * mLocalInv ; mat._41 = mat._42 = mat._43 = 0; D3DXVec3Transform(&vec, &force_, &mat ); mForceField = rvector( vec.x, vec.y, vec.z ); } }
void ZActor::OnBlastDagger(rvector &dir,rvector& pos) { if (!CheckFlag(AF_MY_CONTROL)) return; if (m_pNPCInfo->bNeverBlasted) return; rvector act_dir = GetDirection(); act_dir.x = -dir.x; act_dir.y = -dir.y; SetDirection(act_dir); SetVelocity(dir * 300.f + rvector(0,0,100.f)); m_vAddBlastVel = GetPosition() - pos; m_vAddBlastVel.z = 0.f; Normalize(m_vAddBlastVel); m_fAddBlastVelTime = g_pGame->GetTime(); m_fDelayTime = 3.0f; SetFlag(AF_BLAST_DAGGER, true); SetFlag(AF_LAND, false); m_Animation.Input(ZA_EVENT_BLAST_DAGGER); }
ZEFFECTBILLBOARDITEM * ZEffectBillboardList::Add(rvector &pos,rvector &velocity,rvector &accel,float fStartSize,float fEndSize,float fLifeTime,DWORD color,bool bTrainSmoke) { ZEFFECTBILLBOARDITEM *pNewItem = new ZEFFECTBILLBOARDITEM; push_back(pNewItem); pNewItem->fElapsedTime=0; pNewItem->velocity=velocity; pNewItem->normal=-RCameraDirection; pNewItem->up=rvector(0,0,1); pNewItem->accel=accel; pNewItem->position=pos; pNewItem->fStartSize=fStartSize; pNewItem->fEndSize=fEndSize; pNewItem->fCurScale = fStartSize; pNewItem->fOpacity=1.f; pNewItem->dwColor = color; pNewItem->bUseTrainSmoke = bTrainSmoke; pNewItem->bUseSteamSmoke = false; pNewItem->nDir = -1; if(fLifeTime==-1) pNewItem->fLifeTime = m_fLifeTime; else pNewItem->fLifeTime=fLifeTime; return pNewItem; }
void ZCharacterObject::EnChantWeaponEffect(ZC_ENCHANT etype,int nLevel) { float fSwordSize = m_pVMesh->GetWeaponSize(); fSwordSize -= 35.f;//¼ÕÀâÀÌ Å©±â Á¤µµ¸¦ »©ÁØ´Ù... ZEffectWeaponEnchant* pEWE = NULL; if( etype != ZC_ENCHANT_NONE ) pEWE = ZGetEffectManager()->GetWeaponEnchant( etype ); if(pEWE) { //Ç¥ÁØ »çÀÌÁî´Â īŸ³ª... 105 Á¤µµ.. float fSIze = fSwordSize / 100.f; float fVolSize = 1.f; if(nLevel==0) fVolSize = 0.6f; else if(nLevel==1) fVolSize = 0.75f; else if(nLevel==2) fVolSize = 1.0f; else fVolSize = 1.25f; rvector vScale = rvector(0.7f*fSIze*fVolSize,0.7f*fSIze*fVolSize,1.1f*fSIze);// ¹«±âÀÇ Å©±â¿¡ µû¶ó¼.. pEWE->SetUid( m_UID ); pEWE->SetAlignType(1); pEWE->SetScale(vScale); pEWE->Draw(timeGetTime()); } }
void ZActor::InitMesh(char* szMeshName, MQUEST_NPC nNPCType) { // for test RMesh* pMesh; pMesh = ZGetNpcMeshMgr()->Get(szMeshName); if(!pMesh) { _ASSERT(0); mlog("ZActor::InitMesh() - 원하는 모델을 찾을수 없음\n"); return; } int nVMID = g_pGame->m_VisualMeshMgr.Add(pMesh); if(nVMID==-1) mlog("ZActor::InitMesh() - 캐릭터 생성 실패\n"); RVisualMesh* pVMesh = g_pGame->m_VisualMeshMgr.GetFast(nVMID); SetVisualMesh(pVMesh); pVMesh->SetScale(rvector(15,15,15)); m_Animation.Set(ZA_ANIM_RUN); pVMesh->m_FrameInfo[0].m_pAniIdEventSet = ZGetAniEventMgr()->GetAniIDEventSet((int)nNPCType); }
static void mrqcof(real x[], real y[], real sig[], int ndata, real a[], int ma, int lista[], int mfit, real **alpha, real beta[], real *chisq, void (*funcs)(real,real *,real *,real *)) { int k,j,i; real ymod,wt,sig2i,dy,*dyda; dyda=rvector(1,ma); for (j=1;j<=mfit;j++) { for (k=1;k<=j;k++) alpha[j][k]=0.0; beta[j]=0.0; } *chisq=0.0; for (i=1;i<=ndata;i++) { (*funcs)(x[i],a,&ymod,dyda); sig2i=1.0/(sig[i]*sig[i]); dy=y[i]-ymod; for (j=1;j<=mfit;j++) { wt=dyda[lista[j]]*sig2i; for (k=1;k<=j;k++) alpha[j][k] += wt*dyda[lista[k]]; beta[j] += dy*wt; } (*chisq) += dy*dy*sig2i; } for (j=2;j<=mfit;j++) for (k=1;k<=j-1;k++) alpha[k][j]=alpha[j][k]; free_vector(dyda,1); }
ZEffectBase::ZEffectBase(void) { m_fLifeTime=2.f; m_fVanishTime=1.f; m_pBaseTexture=NULL; m_Scale=rvector(1.f,1.f,1.f); }
void mrqcof_new(real x[], real y[], real sig[], int ndata, real a[], int ia[], int ma, real **alpha, real beta[], real *chisq, void (*funcs)(real, real [], real *, real[])) /* Used by mrqmin to evaluate the linearized fitting matrix alpha, and * vector beta as in (15.5.8), and calculate Chi^2. */ { int i, j, k, l, m, mfit = 0; real ymod, wt, sig2i, dy, *dyda; dyda = rvector(1, ma); for (j = 1; j <= ma; j++) { if (ia[j]) { mfit++; } } for (j = 1; j <= mfit; j++) /* Initialize (symmetric) alpha), beta. */ { for (k = 1; k <= j; k++) { alpha[j][k] = 0.0; } beta[j] = 0.0; } *chisq = 0.0; for (i = 1; i <= ndata; i++) /* Summation loop over all data. */ { (*funcs)(x[i], a, &ymod, dyda); sig2i = 1.0/(sig[i]*sig[i]); dy = y[i]-ymod; for (j = 0, l = 1; l <= ma; l++) { if (ia[l]) { wt = dyda[l]*sig2i; for (j++, k = 0, m = 1; m <= l; m++) { if (ia[m]) { alpha[j][++k] += wt*dyda[m]; } } beta[j] += dy*wt; } } *chisq += dy*dy*sig2i; /* And find Chi^2. */ } for (j = 2; j <= mfit; j++) /* Fill in the symmetric side. */ { for (k = 1; k < j; k++) { alpha[k][j] = alpha[j][k]; } } free_vector(dyda, 1); }
ZObserver::ZObserver() { m_pTargetCharacter = NULL; m_bVisible = false; m_pIDLResource = NULL; // m_nLookType = ZOLM_BACKVIEW; m_FreeLookTarget = rvector(0.0f, 0.0f, 0.0f); m_nType = ZOM_ANYONE; }
void ZActor::Attack_Range(rvector& dir) { m_Animation.Input(ZA_INPUT_ATTACK_RANGE); SetDirection(dir); rvector pos; pos = m_Position + rvector(0, 0, 100); ZPostNPCRangeShot(GetUID(), g_pGame->GetTime(), pos, pos + 10000.f*dir, MMCIP_PRIMARY); }
rvector ZMapDesc::GetQuestSectorLink(int nIndex) { if ((nIndex < 0) || (nIndex >= MAX_QUEST_MAP_SECTOR_COUNT)) { _ASSERT(0); return rvector(0,0,0); } return m_QuestMapDesc.m_vLinks[nIndex]; }
bool ZEffectIcon::Draw(unsigned long int nTime) { ZObject* pObj = ZGetObjectManager()->GetObject(m_uid); if(pObj) { m_Pos = pObj->GetVisualMesh()->GetHeadPosition()+rvector(0,0,60); return ZEffectAniMesh::Draw(nTime); } return false; }
ZEffectAniMesh::ZEffectAniMesh(RMesh* pMesh, const rvector& Pos, rvector& dir) { _ASSERT(pMesh); m_VMesh.Create(pMesh); bool bRet=m_VMesh.SetAnimation("play"); // _ASSERT(bRet); m_VMesh.m_bCalcBoxWithScale = true; m_Pos = Pos; m_Dir = dir; m_DirOrg = dir; m_fRotateAngleZ = 0; m_fRotateAngleY = 0; m_nStartTime = timeGetTime(); m_Scale = rvector(1.f,1.f,1.f); m_nDrawMode = ZEDM_NONE; m_nAlignType = 0; m_nLifeTime = -1; m_nStartAddTime = 0; m_bDelay = false; m_isCheck = false; m_bLoopType = false; AniFrameInfo* pInfo = m_VMesh.GetFrameInfo(ani_mode_lower); if(pInfo && pInfo->m_pAniSet) { if(pInfo->m_pAniSet->GetAnimationLoopType() == RAniLoopType_Loop) { m_bLoopType = true; } } m_Up = rvector(0.f,0.f,1.f); m_vBackupPos = rvector(-999.f,-999.f,-999.f); m_nAutoAddEffect = ZEffectAutoAddType_None; }
////////////////////////////////////////////////////////////////////////// // 생성자 ////////////////////////////////////////////////////////////////////////// RCharCloth::RCharCloth(void) { mForceField = rvector( 0,0,0 ); mInitParticle = true; mUpdateStatus = ALL; m_pVertexBuffer = 0; mTime = 0; m_nCntC = 0; mpInitNormal = 0; ++gRef; }
_NAMESPACE_REALSPACE2_BEGIN RWeaponTracks::RWeaponTracks() { m_pVert = NULL; m_pNode = NULL; m_max_size = 0; m_current_vertex_size = 0; m_vertex_size = 0; m_spline_vertex_size = 0; m_current_node_size = 0; m_current_spline_vertex_size = 0; m_bSpline = true; // m_bSpline = false; m_vSwordPos[0] = rvector(0,0,0); m_vSwordPos[1] = rvector(0,0,0); }
////////////////////////////////////////////////////////////////////////// // Constructor / Desturctor ////////////////////////////////////////////////////////////////////////// ZShadow::ZShadow() { // normal은 +z mNormal = rvector( 0.f, 0.f, 1.f); D3DXMatrixIdentity( &mWorldMatLF ); D3DXMatrixIdentity( &mWorldMatRF ); bLFShadow = false; bRFShadow = false; }
void ZMapDesc::DrawSmokeSS(ZMapSmokeSS* pDummy) { if(!pDummy) return; float f = pDummy->m_nDelay / 1000.f; float _time = GetThisTime(); if( _time > pDummy->m_fDrawBackupTime + f) // if( _time > pDummy->m_fDrawBackupTime + 0.6f) { rvector addpos = rvector(0,0,0); if( rand()%2 ) addpos.x = rand()%100; else addpos.x = -rand()%100; if( rand()%2 ) addpos.y = rand()%100; else addpos.y = -rand()%100; // float fLife = 6.f + (rand()%5); float fLife = pDummy->m_fLife + (rand()%5); float fStartScale = pDummy->m_fSize + (rand()%50); float fEndScale = pDummy->m_fSize * 10 + (rand()%300); ZGetEffectManager()->AddMapSmokeSSEffect( pDummy->m_vPos + addpos , // target rvector(0,0,500), // dir pDummy->m_vDir*pDummy->m_fPower, // acc pDummy->m_dwColor, // pDummy->m_nDelay, // 갱신 주기에 써야한다. fLife , fStartScale , fEndScale ); pDummy->m_fDrawBackupTime = _time; } }