Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Brings the Entity to be first updated in update sequence.
- * @param e Entity which will be moved in update sequence.
- */
- public function bringUpdateFirst(e:Entity):Boolean
- {
- // _updateFirst exists and not equals to me.
- if (_updateFirst !== e) return false;
- // Remove me from update sequence
- if (e._updatePrev) e._updatePrev._updateNext = e._updateNext; // If I'm last in update sequence, updateNext will be null anyway, so I don't care about checking
- if (e._updateNext) e._updateNext._updatePrev = e._updatePrev;
- // Bring me to front.
- _updateFirst._updatePrev = e;
- e._updateNext = _updateFirst;
- e._updatePrev = null;
- _updateFirst = e;
- return true;
- }
- /**
- * Send the Entity to be updated last in update sequence
- * @param e Entity which will be moved in update sequence.
- */
- public function sendUpdateLast(e:Entity):Boolean
- {
- // _updateFirst exists and I'm is not last updated entity
- if (_updateFirst && e._updateNext)
- {
- var lastEnt:Entity = e._updateNext;
- // Remove me from update sequence
- if (e._updatePrev) e._updatePrev._updateNext = lastEnt;
- if (e === _updateFirst) _updateFirst = e._updateNext; // If first, set next as first
- lastEnt._updatePrev = e._updatePrev;
- // Find last updated entity
- while (lastEnt._updateNext) lastEnt = lastEnt._updateNext;
- // Set as last updated entity
- lastEnt._updateNext = e;
- e._updatePrev = lastEnt;
- e._updateNext = null;
- return true;
- }
- return false;
- }
- /**
- * Brings the Entity to be updated right before second given entity.
- * @param e Entity which will be moved in update sequence.
- * @param before Entity, in front of which will be inserted first Entity.
- */
- public function bringUpdateBefore(e:Entity, before:Entity):Boolean
- {
- if (_updateFirst && before._updatePrev !== e)
- {
- // Remove from current sequence
- if (e._updatePrev) e._updatePrev._updateNext = e._updateNext;
- if (e._updateNext) e._updateNext._updatePrev = e._updatePrev;
- // Add to new sequence
- e._updatePrev = before._updatePrev;
- if (e._updatePrev) e._updatePrev._updateNext = e;
- e._updateNext = before;
- before._updatePrev = e;
- if (_updateFirst === before) _updateFirst = e;
- return true;
- }
- return false;
- }
- /**
- * Sends the entity to be updated right after the second given entity.
- * @param e Entity which will be moved in update sequence.
- * @param after Entity, after which will be inserted first Entity.
- */
- public function sendUpdateAfter(e:Entity, after:Entity):Boolean
- {
- if (_updateFirst && after._updateNext !== e)
- {
- // Remove from current sequence
- if (e === _updateFirst) _updateFirst = e._updateNext;
- if (e._updatePrev) e._updatePrev._updateNext = e._updateNext;
- if (e._updateNext) e._updateNext._updatePrev = e._updatePrev;
- // Add to new sequence
- e._updateNext = after._updateNext;
- if (e._updateNext) e._updateNext._updatePrev = e;
- e._updatePrev = after;
- after._updateNext = e;
- return true;
- }
- return false;
- }
- /**
- * Beings the entity forward in update sequence. (Will be updated earlier)
- * @param e Entity which will be moved in update sequence.
- */
- public function bringUpdateForward(e:Entity):Boolean
- {
- if (_updateFirst && e._updatePrev)
- {
- var prev:Entity = e._updatePrev;
- prev._updateNext = e._updateNext;
- if (e._updateNext) prev._updateNext._updatePrev = prev;
- e._updatePrev = prev._updatePrev;
- if (prev._updatePrev) e._updatePrev._updateNext = e;
- e._updateNext = prev;
- prev._updatePrev = e;
- if (prev === _updateFirst) _updateFirst = e;
- return true;
- }
- return false;
- }
- /**
- * Sends the entity backward in update sequence. (Will be updated later)
- * @param e Entity which will be moved in update sequence.
- */
- public function sendUpdateBackward(e:Entity):Boolean
- {
- if (_updateFirst && e._updateNext)
- {
- var next:Entity = e._updateNext;
- next._updatePrev = e._updatePrev;
- if (e._updatePrev) next._updatePrev._updateNext = next;
- e._updateNext = next._updateNext;
- if (next._updateNext) e._updateNext._updatePrev = e;
- next._updateNext = e;
- e._updatePrev = next;
- if (e === _updateFirst) _updateFirst = next;
- return true;
- }
- return false;
- }
- /**
- * Swaps two entities in update sequence.
- * @param first First entity to swap.
- * @param second Second entity to swap.
- */
- public function swapUpdateEntities(first:Entity, second:Entity):Boolean
- {
- if (_updateFirst)
- {
- var temp:Entity = first._updatePrev;
- first._updatePrev = second._updatePrev;
- second._updatePrev = temp;
- temp = first._updateNext;
- first._updateNext = second._updateNext;
- second._updateNext = temp;
- return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment