void ARX_MAGICAL_FLARES_KillAll() { for (long i=0;i<MAX_FLARES;i++) { FLARES & flare = magicFlares[i]; if (flare.exist) { if (flare.io) { flare.io->flarecount--; } flare.exist=0; flare.tolive=0; flarenum--; if (ValidDynLight(flare.dynlight!=-1)) DynLight[flare.dynlight].exist=0; flare.dynlight=-1; } } flarenum=0; }
void CIgnit::Kill(void) { int nb = this->nblight; while(nb--) { int id = this->tablight[nb].idl; if(ValidDynLight(id)) DynLight[id].exist = 0; this->tablight[nb].idl = -1; } this->nblight = 0; }
void ARX_MAGICAL_FLARES_Draw() { if(!flarenum) return; shinum++; if(shinum >= 10) { shinum = 1; } long TICKS = long(arxtime) - FRAMETICKS; FRAMETICKS = (unsigned long)(arxtime); if(TICKS < 0) { return; } GRenderer->SetRenderState(Renderer::DepthWrite, false); GRenderer->SetBlendFunc(Renderer::BlendOne, Renderer::BlendOne); GRenderer->SetRenderState(Renderer::AlphaBlending, true); bool key = !GInput->actionPressed(CONTROLS_CUST_MAGICMODE); for(long j = 1; j < 5; j++) { TextureContainer * surf; switch(j) { case 2: surf = flaretc.lumignon; break; case 3: surf = flaretc.lumignon2; break; case 4: surf = flaretc.plasm; break; default: surf = flaretc.shine[shinum]; break; } for(long i = 0; i < MAX_FLARES; i++) { FLARES & flare = magicFlares[i]; if(!flare.exist || flare.type != j) { continue; } flare.tolive -= float(TICKS * 2); if(flare.flags & 1) { flare.tolive -= float(TICKS * 4); } else if (key) { flare.tolive -= float(TICKS * 6); } float z = (flare.tolive * 0.00025f); float s; if(flare.type == 1) { s = flare.size * 2 * z; } else if(flare.type == 4) { s = flare.size * 2.f * z + 10.f; } else { s = flare.size; } if(flare.tolive <= 0.f || flare.y < -64.f || s < 3.f) { if(flare.io && ValidIOAddress(flare.io)) { flare.io->flarecount--; } if(ValidDynLight(flare.dynlight)) { DynLight[flare.dynlight].exist = 0; } flare.dynlight = -1; flare.exist = 0; flarenum--; continue; } if(flare.type == 1 && z < 0.6f) { z = 0.6f; } Color3f c = flare.rgb * z; flare.tv.color = c.toBGR(); flare.v.p = flare.tv.p; DynLight[0].rgb = componentwise_max(DynLight[0].rgb, c); if(ValidDynLight(flare.dynlight)) { EERIE_LIGHT * el = &DynLight[flare.dynlight]; el->pos = flare.v.p; el->rgb = c; } if(!flare.io) { GRenderer->SetRenderState(Renderer::DepthTest, false); } else { GRenderer->SetRenderState(Renderer::DepthTest, true); } if(flare.bDrawBitmap) { s *= 2.f; EERIEDrawBitmap(flare.v.p.x, flare.v.p.y, s, s, flare.v.p.z, surf, Color::fromBGRA(flare.tv.color)); } else { EERIEDrawSprite(&flare.v, s * 0.025f + 1.f, surf, Color::fromBGRA(flare.tv.color), 2.f); } } } DynLight[0].rgb = componentwise_min(DynLight[0].rgb, Color3f::white); GRenderer->SetRenderState(Renderer::DepthWrite, true); GRenderer->SetRenderState(Renderer::DepthTest, true); }
Entity::~Entity() { cleanReferences(); if(!FAST_RELEASE) { TREATZONE_RemoveIO(this); } if(ignit_light > -1) { DynLight[ignit_light].exist = 0, ignit_light = -1; } if(ignit_sound != audio::INVALID_ID) { ARX_SOUND_Stop(ignit_sound), ignit_sound = audio::INVALID_ID; } if(FlyingOverIO == this) { FlyingOverIO = NULL; } if((MasterCamera.exist & 1) && MasterCamera.io == this) { MasterCamera.exist = 0; } if((MasterCamera.exist & 2) && MasterCamera.want_io == this) { MasterCamera.exist = 0; } ARX_INTERACTIVE_DestroyDynamicInfo(this); IO_UnlinkAllLinkedObjects(this); // Releases ToBeDrawn Transparent Polys linked to this object ! tweaks.clear(); ARX_SCRIPT_Timer_Clear_For_IO(this); if(obj && !(ioflags & IO_CAMERA) && !(ioflags & IO_MARKER) && !(ioflags & IO_GOLD)) { delete obj, obj = NULL; } ARX_SPELLS_RemoveAllSpellsOn(this); delete tweakerinfo; delete tweaky, tweaky = NULL; RemoveFromAllInventories(this); ReleaseScript(&script); ReleaseScript(&over_script); for(long n = 0; n < MAX_ANIMS; n++) { if(anims[n]) { EERIE_ANIMMANAGER_ReleaseHandle(anims[n]); anims[n] = NULL; } } if(damagedata >= 0) { damages[damagedata].exist = 0; } if(ValidDynLight(dynlight)) { DynLight[dynlight].exist = 0, dynlight = -1; } if(ValidDynLight(halo.dynlight)) { DynLight[halo.dynlight].exist = 0, halo.dynlight = -1; } free(usepath); free(symboldraw), symboldraw = NULL; if(ioflags & IO_NPC) { delete _npcdata; } else if(ioflags & IO_ITEM) { free(_itemdata->equipitem); free(_itemdata); } else if(ioflags & IO_FIX) { free(_fixdata); } else if(ioflags & IO_CAMERA && _camdata) { if(ACTIVECAM == &_camdata->cam) { ACTIVECAM = &subj; } free(_camdata); } if(TSecondaryInventory && TSecondaryInventory->io == this) { TSecondaryInventory = NULL; } free(inventory); if(m_index != size_t(-1)) { entities.remove(m_index); } if(pIOChangeWeapon == this) { pIOChangeWeapon = NULL; // TODO we really need a proper weak_ptr } }