C4DefGraphicsPtrBackup::~C4DefGraphicsPtrBackup() { if(!fApplied) AssignRemoval(); for(std::list<C4DefGraphicsPtrBackupEntry*>::iterator iter = Entries.begin(); iter != Entries.end(); ++iter) delete *iter; }
C4DefGraphicsPtrBackup::~C4DefGraphicsPtrBackup() { // graphics ptr still assigned? then remove dead graphics pointers from objects if (pGraphicsPtr) AssignRemoval(); delete pMeshUpdate; // delete following graphics recursively if (pNext) delete pNext; }
C4DefGraphicsPtrBackupEntry::~C4DefGraphicsPtrBackupEntry() { // graphics ptr still assigned? then remove dead graphics pointers from objects if (pGraphicsPtr) AssignRemoval(); delete pMeshUpdate; }
bool C4Object::ExecMovement() // Every Tick1 by Execute { // update in which material this object is UpdateInMat(); // Containment check if (Contained) { CopyMotion(Contained); return true; } // General mobility check if (Category & C4D_StaticBack) return false; // Movement execution if (Mobile) // Object is moving { // Move object DoMovement(); // Demobilization check if ((xdir==0) && (ydir==0) && (rdir==0)) Mobile=0; // Check for stabilization if (rdir==0) Stabilize(); } else // Object is static { // Check for stabilization Stabilize(); // Check for mobilization if (!::Game.iTick10) { // Gravity mobilization xdir=ydir=rdir=0; Mobile=1; } } // Enforce zero rotation if (!Def->Rotateable) fix_r=Fix0; // Out of bounds check if ((!Inside<int32_t>(GetX() + Shape.GetX(), -Shape.Wdt, GBackWdt) && !(GetPropertyInt(P_BorderBound) & C4D_Border_Sides)) || ((GetY() + Shape.GetY() > GBackHgt) && !(GetPropertyInt(P_BorderBound) & C4D_Border_Bottom))) { C4PropList* pActionDef = GetAction(); // Never remove attached objects: If they are truly outside landscape, their target will be removed, // and the attached objects follow one frame later if (!pActionDef || !Action.Target || pActionDef->GetPropertyP(P_Procedure) != DFA_ATTACH) { bool fRemove = true; // never remove HUD objects if (Category & C4D_Parallax) { int parX, parY; GetParallaxity(&parX, &parY); fRemove = false; if (GetX()>GBackWdt || GetY()>GBackHgt) fRemove = true; // except if they are really out of the viewport to the right... else if (GetX()<0 && !!parX) fRemove = true; // ...or it's not HUD horizontally and it's out to the left else if (!parX && GetX()<-GBackWdt) fRemove = true; // ...or it's HUD horizontally and it's out to the left } if (fRemove) { AssignDeath(true); AssignRemoval(); } } } return true; }