void Update(AuraEffect* effect) { // Xinef: Charm is removed when target is at or below 50%hp if (Unit* owner = GetUnitOwner()) if (owner->GetHealthPct() <= 50) SetDuration(0); }
//----------------------------------------------------------------------------- CHeal::CHeal(LPDIRECT3DDEVICE7 m_pd3dDevice) { SetDuration(1000); ulCurrentTime = ulDuration + 1; pPS = new CParticleSystem(); }
EXPORT_C void CLogEvent::CopyL(const CLogEvent& aEvent) /** Makes a copy of the specified log event. @param aEvent The log event to be copied. */ { // Set data first as this is the only function that can leave // If this function fails nothing will be changed SetDataL(aEvent.Data()); SetId(aEvent.Id()); SetEventType(aEvent.EventType()); SetTime(aEvent.Time()); SetDurationType(aEvent.DurationType()); SetDuration(aEvent.Duration()); SetContact(aEvent.Contact()); SetLink(aEvent.Link()); SetDescription(aEvent.Description()); SetRemoteParty(aEvent.RemoteParty()); SetDirection(aEvent.Direction()); SetStatus(aEvent.Status()); SetSubject(aEvent.Subject()); SetNumber(aEvent.Number()); ClearFlags(KLogFlagsMask); SetFlags(aEvent.Flags()); #ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM SetSimId(aEvent.SimId()); #endif }
//----------------------------------------------------------------------------- CMagicMissile::CMagicMissile(LPDIRECT3DDEVICE7 m_pd3dDevice) : CSpellFx() { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; SetDuration(2000); ulCurrentTime = ulDuration + 1; tex_mm = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_bandelette_blue.bmp"); if (!smissile) { smissile = _LoadTheObj("Graph\\Obj3D\\Interactive\\Fix_inter\\fx_magic_missile\\fx_magic_missile.teo", NULL); EERIE_3DOBJ_RestoreTextures(smissile); } smissile_count++; fColor[0] = 1; fColor[1] = 1; fColor[2] = 1; fColor1[0] = 1; fColor1[1] = 1; fColor1[2] = 1; bExplo = false; bMove = true; }
CMagicMissile::CMagicMissile(bool mrCheat) : CSpellFx() , bExplo(false) , bMove(true) , eSrc(Vec3f_ZERO) , eCurPos() , lightIntensityFactor() , iLength() , iBezierPrecision() , fColor(Color3f::white) , fTrail() , fOneOnBezierPrecision() , tex_mm() , snd_loop() , m_mrCheat(mrCheat) { SetDuration(2000); ulCurrentTime = ulDuration + 1; tex_mm = TextureContainer::Load("graph/obj3d/textures/(fx)_bandelette_blue"); if(!smissile) smissile = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_magic_missile/fx_magic_missile.teo"); smissile_count++; }
bool AreaTrigger::CreateAreaTrigger(uint32 guidlow, uint32 triggerEntry, Unit* caster, SpellInfo const* spell, Position const& pos, float radius, uint32 duration) { SetMap(caster->GetMap()); Relocate(pos); if (!IsPositionValid()) { sLog->outError("misc", "AreaTrigger (spell %u) not created. Invalid coordinates (X: %f Y: %f)", spell->Id, GetPositionX(), GetPositionY()); return false; } WorldObject::_Create(guidlow, HIGHGUID_AREATRIGGER, caster->GetPhaseMask()); SetEntry(triggerEntry); SetDuration(duration ? duration : spell->GetDuration()); SetObjectScale(1); SetGuidValue(AREATRIGGER_FIELD_CASTER, caster->GetGUID128()); SetUInt32Value(AREATRIGGER_FIELD_SPELL_ID, spell->Id); SetUInt32Value(AREATRIGGER_FIELD_SPELL_VISUAL_ID, spell->SpellVisual[0]); SetUInt32Value(AREATRIGGER_FIELD_DURATION, spell->GetDuration()); SetFloatValue(AREATRIGGER_FIELD_EXPLICIT_SCALE, 1.f); _radius = radius; if (!GetMap()->AddToMap(this)) return false; return true; }
void CSubtractiveInstrument::SetNote(CNote *note) { // Get a list of all attribute nodes and the // length of that list CComPtr<IXMLDOMNamedNodeMap> attributes; note->Node()->get_attributes(&attributes); long len; attributes->get_length(&len); StringToWaveform(note->Waveform()); // Loop over the list of attributes for (int i = 0; i < len; i++) { // Get attribute i CComPtr<IXMLDOMNode> attrib; attributes->get_item(i, &attrib); // Get the name of the attribute CComBSTR name; attrib->get_nodeName(&name); // Get the value of the attribute. A CComVariant is a variable // that can have any type. It loads the attribute value as a // string (UNICODE), but we can then change it to an integer // (VT_I4) or double (VT_R8) using the ChangeType function // and then read its integer or double value from a member variable. CComVariant value; attrib->get_nodeValue(&value); if (name == "duration") { value.ChangeType(VT_R8); // number of beats * seconds per beat = seconds for note SetDuration(value.dblVal); } else if (name == "note") { SetFreq(NoteToFrequency(value.bstrVal)); } if (name == "resonfrequency") { mResonFilter = true; value.ChangeType(VT_R8); mResonFrequency = value.dblVal; } // if (name == "resonbandwidth") // { // value.ChangeType(VT_R8); // mResonBandwidth = value.dblVal; // } // // if (name == "filter-envelope") // { // mFilterEnvelope = true; // } } }
//----------------------------------------------------------------------------- void CMagicMissile::Create(EERIE_3D aeSrc, EERIE_3D angles) { int i; EERIE_3D s, e; SetDuration(ulDuration); SetAngle(angles.b); Vector_Copy(&this->angles, &angles); eCurPos.x = eSrc.x = aeSrc.x; eCurPos.y = eSrc.y = aeSrc.y; eCurPos.z = eSrc.z = aeSrc.z; fSize = 1; bDone = true; s.x = eSrc.x; s.y = eSrc.y; s.z = eSrc.z; e.x = eSrc.x; e.y = eSrc.y; e.z = eSrc.z; i = 0; i = 40; e.x -= fBetaRadSin * 50 * i; e.y += sin(DEG2RAD(MAKEANGLE(this->angles.a))) * 50 * i; e.z += fBetaRadCos * 50 * i; pathways[0].sx = eSrc.x; pathways[0].sy = eSrc.y; pathways[0].sz = eSrc.z; pathways[5].sx = e.x; pathways[5].sy = e.y; pathways[5].sz = e.z; Split(pathways, 0, 5, 50, 0.5f); for (i = 0; i < 6; i++) { if (pathways[i].sy >= eSrc.y + 150) { pathways[i].sy = eSrc.y + 150; } } fTrail = 0; iLength = 50; fOneOnLength = 1.0f / (float) iLength; iBezierPrecision = BEZIERPrecision; fOneOnBezierPrecision = 1.0f / (float) iBezierPrecision; bExplo = false; bMove = true; ARX_SOUND_PlaySFX(SND_SPELL_MM_CREATE, &eCurPos); ARX_SOUND_PlaySFX(SND_SPELL_MM_LAUNCH, &eCurPos); snd_loop = ARX_SOUND_PlaySFX(SND_SPELL_MM_LOOP, &eCurPos, 1.0F, ARX_SOUND_PLAY_LOOPED); }
void CLevitate::Create(int def, float rbase, float rhaut, float hauteur, Vec3f * pos, unsigned long _ulDuration) { SetDuration(_ulDuration); if (def < 3) return; this->CreateConeStrip(rbase, rhaut, hauteur, def, 0); this->CreateConeStrip(rbase, rhaut * 1.5f, hauteur * 0.5f, def, 1); this->key = 0; this->pos = *pos; this->rbase = rbase; this->rhaut = rhaut; this->hauteur = hauteur; this->currdurationang = 0; this->scale = 0.f; this->ang = 0.f; this->def = (short)def; this->tsouffle = TextureContainer::Load("graph/obj3d/textures/(fx)_sebsouffle"); this->timestone = 0; this->nbstone = 0; this->stone[0] = stone0; this->stone[1] = stone1; int nb = 256; while (nb--) { this->tstone[nb].actif = 0; } }
//----------------------------------------------------------------------------- CSummonCreature::CSummonCreature(LPDIRECT3DDEVICE7 m_pd3dDevice) { eSrc.x = 0; eSrc.y = 0; eSrc.z = 0; SetDuration(1000); ulCurrentTime = ulDurationIntro + ulDurationRender + ulDurationOuttro + 1; iSize = 100; fOneOniSize = 1.0f / ((float) iSize); fColorBorder[0] = 1; fColorBorder[1] = 1; fColorBorder[2] = 1; fColorRays1[0] = 1; fColorRays1[1] = 1; fColorRays1[2] = 1; fColorRays2[0] = 0; fColorRays2[1] = 0; fColorRays2[2] = 0; tex_light = MakeTCFromFile("Graph\\Obj3D\\textures\\(Fx)_tsu4.bmp"); }
void ConstructPSPoll(_adapter *padapter, u8 *pframe, u32 *pLength) { struct rtw_ieee80211_hdr *pwlanhdr; u16 *fctrl; struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv); struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); //DBG_871X("%s\n", __FUNCTION__); pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; // Frame control. fctrl = &(pwlanhdr->frame_ctl); *(fctrl) = 0; SetPwrMgt(fctrl); SetFrameSubType(pframe, WIFI_PSPOLL); // AID. SetDuration(pframe, (pmlmeinfo->aid| 0xc000)); // BSSID. _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN); // TA. _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); *pLength = 16; }
CLightning::CLightning() : m_pos(Vec3f_ZERO) , m_beta(0.f) , m_alpha(0.f) , m_caster(EntityHandle::Invalid) , m_level(1.f) , m_fDamage(1) , m_isMassLightning(false), m_nbtotal(0), m_lNbSegments(40), m_invNbSegments(1.0f / 40.0f), m_fSize(100.0f), m_fLengthMin(5.0f), m_fLengthMax(40.0f), m_fAngleMin(5.0f, 5.0f, 5.0f), m_fAngleMax(32.0f, 32.0f, 32.0f) , m_iTTL(0) { SetDuration(2000); ulCurrentTime = ulDuration + 1; m_tex_light = NULL; fTotoro = 0; fMySize = 2; }
CHeal::CHeal() { SetDuration(1000); ulCurrentTime = ulDuration + 1; pPS = new ParticleSystem(); }
void CShake::KeyValue( KeyValueData *pkvd ) { if (FStrEq(pkvd->szKeyName, "amplitude")) { SetAmplitude( atof(pkvd->szValue) ); pkvd->fHandled = TRUE; } else if (FStrEq(pkvd->szKeyName, "frequency")) { SetFrequency( atof(pkvd->szValue) ); pkvd->fHandled = TRUE; } else if (FStrEq(pkvd->szKeyName, "duration")) { SetDuration( atof(pkvd->szValue) ); pkvd->fHandled = TRUE; } else if (FStrEq(pkvd->szKeyName, "radius")) { SetRadius( atof(pkvd->szValue) ); pkvd->fHandled = TRUE; } else CPointEntity::KeyValue( pkvd ); }
void CPoisonProjectile::Create(Vec3f _eSrc, float _fBeta) { SetDuration(m_duration); float fBetaRad = glm::radians(_fBeta); fBetaRadCos = glm::cos(fBetaRad); fBetaRadSin = glm::sin(fBetaRad); eSrc = _eSrc; bOk = false; eMove = Vec3f(-fBetaRadSin * 2, 0.f, fBetaRadCos * 2); Vec3f rayEnd = eSrc; rayEnd.x -= fBetaRadSin * (50 * 20); rayEnd.z += fBetaRadCos * (50 * 20); RaycastResult ray = RaycastLine(eSrc, rayEnd); Vec3f dest = ray.hit ? ray.pos : rayEnd; pathways[0] = eSrc; pathways[9] = dest; Split(pathways, 0, 9, Vec3f(10 * fBetaRadCos, 10, 10 * fBetaRadSin)); fTrail = -1; ParticleParams pp = g_particleParameters[ParticleParam_Poison2]; pp.m_direction *= -eMove; pPS.SetParams(pp); pPS.SetPos(eSrc); pPS.Update(0); }
void SlideAnimation::Hide() { // 如果正在隐藏(或已完全隐藏), 什么都不做. if(!showing_) { return; } showing_ = false; value_start_ = value_current_; value_end_ = 0.0; // 确保能做一些事情. if(slide_duration_ == 0) { AnimateToState(0.0); // 跳到动画结尾(这种情况下等于开头). return; } else if(value_current_ == value_end_) { return; } // 当前正在发生的动画会被重置. SetDuration(static_cast<int>(slide_duration_ * value_current_)); Start(); }
bool AreaTrigger::CreateAreaTrigger(uint32 guidlow, uint32 triggerEntry, Unit* caster, SpellInfo const* spell, Position const& pos) { SetMap(caster->GetMap()); Relocate(pos); if (!IsPositionValid()) { TC_LOG_ERROR("misc", "AreaTrigger (spell %u) not created. Invalid coordinates (X: %f Y: %f)", spell->Id, GetPositionX(), GetPositionY()); return false; } WorldObject::_Create(guidlow, HIGHGUID_AREATRIGGER, caster->GetPhaseMask()); SetEntry(triggerEntry); SetDuration(spell->GetDuration()); SetObjectScale(1); SetUInt32Value(AREATRIGGER_SPELLID, spell->Id); SetUInt32Value(AREATRIGGER_SPELLVISUALID, spell->SpellVisual[0]); SetUInt32Value(AREATRIGGER_DURATION, spell->GetDuration()); SetFloatValue(AREATRIGGER_FINAL_POS + 0, pos.GetPositionX()); SetFloatValue(AREATRIGGER_FINAL_POS + 1, pos.GetPositionY()); SetFloatValue(AREATRIGGER_FINAL_POS + 2, pos.GetPositionZ()); for (auto phase : caster->GetPhases()) SetInPhase(phase, false, true); if (!GetMap()->AddToMap(this)) return false; return true; }
CRuneOfGuarding::CRuneOfGuarding() { eSrc = Vec3f::ZERO; eTarget = Vec3f::ZERO; SetDuration(1000); ulCurrentTime = ulDuration + 1; tex_p2 = TextureContainer::Load("graph/obj3d/textures/(fx)_tsu_blueting"); if(!ssol) { ssol = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_rune_guard/fx_rune_guard.teo"); } ssol_count++; if(!slight) { slight = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_rune_guard/fx_rune_guard02.teo"); } slight_count++; if(!srune) { srune = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_rune_guard/fx_rune_guard03.teo"); } srune_count++; }
//----------------------------------------------------------------------------- CCurePoison::CCurePoison() { SetDuration(1000); ulCurrentTime = ulDuration + 1; pPS = new ParticleSystem(); }
CSlowDown::CSlowDown() { eSrc = Vec3f_ZERO; eTarget = Vec3f_ZERO; SetDuration(1000); ulCurrentTime = ulDuration + 1; tex_p2 = TextureContainer::Load("graph/obj3d/textures/(fx)_tsu_blueting"); if(!ssol) { // Pentacle ssol = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_rune_guard/fx_rune_guard.teo"); } ssol_count++; if(!slight) { // Twirl slight = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_rune_guard/fx_rune_guard02.teo"); } slight_count++; //runes if(!srune) { srune = LoadTheObj("graph/obj3d/interactive/fix_inter/fx_rune_guard/fx_rune_guard03.teo"); } srune_count++; }
void CMultiPoisonProjectile::Create(Vec3f srcPos, float afBeta) { long lMax = 0; for(size_t i = 0; i < m_projectiles.size(); i++) { CPoisonProjectile * projectile = m_projectiles[i]; projectile->Create(srcPos, afBeta + frand2() * 10.0f); long lTime = ulDuration + Random::get(0, 5000); projectile->SetDuration(lTime); lMax = std::max(lMax, lTime); projectile->lLightId = GetFreeDynLight(); if(lightHandleIsValid(projectile->lLightId)) { EERIE_LIGHT * light = lightHandleGet(projectile->lLightId); light->intensity = 2.3f; light->fallend = 250.f; light->fallstart = 150.f; light->rgb = Color3f::green; light->pos = projectile->eSrc; light->time_creation = (unsigned long)(arxtime); light->duration = 200; } } SetDuration(lMax + 1000); }
void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) { PreventDefaultAction(); GetTarget()->RemoveAuraFromStack(SPELL_RUBY_EVASIVE_CHARGES); if (!GetTarget()->HasAura(SPELL_RUBY_EVASIVE_CHARGES)) SetDuration(0); }
//----------------------------------------------------------------------------- void CFireBall::Create(Vec3f aeSrc, float afBeta, float afAlpha, float _fLevel) { SetDuration(ulDuration); SetAngle(afBeta); eSrc.x = aeSrc.x - fBetaRadSin * 60; eSrc.y = aeSrc.y; eSrc.z = aeSrc.z + fBetaRadCos * 60; eMove.x = - fBetaRadSin * 80 * cos(radians(MAKEANGLE(afAlpha))); eMove.y = sin(radians(MAKEANGLE(afAlpha))) * 80; eMove.z = + fBetaRadCos * 80 * cos(radians(MAKEANGLE(afAlpha))); fLevel = _fLevel; //FIRE fire_1.p3Direction = -eMove; fire_1.fStartSize = 1 * _fLevel; fire_1.fStartSizeRandom = 2 * _fLevel; pPSFire.SetParams(fire_1); pPSFire.fParticleFreq = 100.0f; pPSFire.ulParticleSpawn = 0; pPSFire.SetTexture("graph/particles/fire", 0, 200); pPSFire.Update(0); //FIRE fire_2.p3Direction = -eMove; fire_2.fStartSize = 1 * _fLevel; fire_2.fStartSizeRandom = 2 * _fLevel; fire_2.fEndSize = 3 * _fLevel; fire_2.fEndSizeRandom = 2 * _fLevel; pPSFire2.SetParams(fire_2); pPSFire2.fParticleFreq = 20.0f; pPSFire2.ulParticleSpawn = 0; pPSFire2.SetTexture("graph/particles/fire", 0, 200); pPSFire2.Update(0); // Smoke smoke.p3Direction = -eMove; smoke.fEndSize = 7 * _fLevel; smoke.fEndSizeRandom = 2 * _fLevel; pPSSmoke.SetParams(smoke); pPSSmoke.ulParticleSpawn = 0; pPSSmoke.fParticleFreq = 20.0f; pPSSmoke.SetTexture("graph/particles/big_greypouf", 0, 0); pPSSmoke.Update(0); pPSFire.SetPos(eSrc); pPSFire2.SetPos(eSrc); pPSSmoke.SetPos(eSrc); // Light lLightId = -1; eCurPos = eSrc; }
//----------------------------------------------------------------------------- void CFireBall::SetTTL(unsigned long aulTTL) { unsigned long t = ulCurrentTime; ulDuration = min(ulCurrentTime + aulTTL, ulDuration); SetDuration(ulDuration); ulCurrentTime = t; std::list<Particle *>::iterator i; unsigned long ulCalc = ulDuration - ulCurrentTime ; arx_assert(ulCalc <= LONG_MAX); long ff = static_cast<long>(ulCalc); for (i = pPSSmoke.listParticle.begin(); i != pPSSmoke.listParticle.end(); ++i) { Particle * pP = *i; if (pP->isAlive()) { if (pP->ulTime + ff < pP->ulTTL) { pP->ulTime = pP->ulTTL - ff; } } } // Light if (lLightId != -1) { lLightId = -1; } }
void CMagicMissile::Create(const Vec3f & aeSrc, const Anglef & angles) { SetDuration(ulDuration); eCurPos = eSrc = aeSrc; short i = 40.f; Vec3f e = eSrc; e += angleToVectorXZ(angles.getPitch()) * (50.f * i); e.y += std::sin(glm::radians(MAKEANGLE(angles.getYaw()))) * (50.f * i); pathways[0] = eSrc; pathways[5] = e; Split(pathways, 0, 5, 50, 0.5f); for(i = 0; i < 6; i++) { if(pathways[i].y >= eSrc.y + 150) { pathways[i].y = eSrc.y + 150; } } fTrail = 0; iLength = 50; iBezierPrecision = BEZIERPrecision; fOneOnBezierPrecision = 1.0f / (float) iBezierPrecision; bExplo = false; bMove = true; ARX_SOUND_PlaySFX(SND_SPELL_MM_CREATE, &eCurPos); ARX_SOUND_PlaySFX(SND_SPELL_MM_LAUNCH, &eCurPos); snd_loop = ARX_SOUND_PlaySFX(SND_SPELL_MM_LOOP, &eCurPos, 1.0F, ARX_SOUND_PLAY_LOOPED); }
/*--------------------------------------------------------------------------*/ void CLevitate::Create(int def, float rbase, float rhaut, float hauteur, EERIE_3D * pos, unsigned long _ulDuration) { SetDuration(_ulDuration); if (def < 3) return; this->CreateConeStrip(rbase, rhaut, hauteur, def, 0); this->CreateConeStrip(rbase, rhaut * 1.5f, hauteur * 0.5f, def, 1); this->key = 0; this->pos = *pos; this->rbase = rbase; this->rhaut = rhaut; this->hauteur = hauteur; this->currdurationang = 0; this->scale = 0.f; this->ang = 0.f; this->def = (short)def; this->tsouffle = MakeTCFromFile("Graph\\Obj3D\\Textures\\(FX)_sebsouffle.bmp"); this->timestone = 0; this->nbstone = 0; this->stone[0] = stone0; this->stone[1] = stone1; int nb = 256; while (nb--) { this->tstone[nb].actif = 0; } }
void SlideAnimation::Show() { // 如果正在显示(或已完全显示), 什么都不做. if(showing_) { return; } showing_ = true; value_start_ = value_current_; value_end_ = 1.0; // 确保能做一些事情. if(slide_duration_ == 0) { AnimateToState(1.0); // 跳到动画结尾. return; } else if(value_current_ == value_end_) { return; } // 当前正在发生的动画会被重置. SetDuration(static_cast<int>(slide_duration_ * (1 - value_current_))); Start(); }
void CRiseDead::Create(Vec3f aeSrc, float afBeta) { int i; SetDuration(ulDurationIntro, ulDurationRender, ulDurationOuttro); eSrc.x = aeSrc.x; eSrc.y = aeSrc.y - 10.f; eSrc.z = aeSrc.z; SetAngle(afBeta); sizeF = 0; fSizeIntro = 0.0f; fTexWrap = 0; fRand = (float) rand(); end = 40 - 1; bIntro = true; for(i = 0; i < 40; i++) { tfRaysa[i] = 0.4f * rnd(); tfRaysb[i] = 0.4f * rnd(); } v1a[0].x = eSrc.x - fBetaRadSin * 100; v1a[0].y = eSrc.y; v1a[0].z = eSrc.z + fBetaRadCos * 100; v1a[end].x = eSrc.x + fBetaRadSin * 100; v1a[end].y = eSrc.y; v1a[end].z = eSrc.z - fBetaRadCos * 100; v1b[0] = v1a[0]; v1b[end] = v1a[end]; sizeF = 200; Split(v1a, 0, end, 20); Split(v1b, 0, end, -20); sizeF = 200; Split(v1a, 0, end, 80); Split(v1b, 0, end, -80); for(i = 0; i <= end; i++) { vb[i] = va[i] = eSrc; } sizeF = 0; // cailloux this->timestone = 0; this->nbstone = 0; this->stone[0] = stone0; this->stone[1] = stone1; int nb = 256; while (nb--) { this->tstone[nb].actif = 0; } }
void Update(AuraEffect const* effect) { if (effect->GetTickNumber() > uint32(effect->GetAmount()+1)) { PreventDefaultAction(); SetDuration(0); } }
void csSprite2DUVAnimationFrame::SetFrameData (const char *name, int duration, int num, float *uv) { SetName (name); SetDuration (duration); vCoo.SetSize (num); memcpy (vCoo.GetArray (), uv, 2*num*sizeof(float)); }