QUEUE.CPP
上传用户:abcdshs
上传日期:2007-01-07
资源大小:1858k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. // (C) Copyright 1996 by Anthony J. Carin.  All Rights Reserved.
  2. #include "stdafx.h"
  3. #include "queue.h"
  4. #include "3dwrap.h"
  5. void drawqueue::add(qentry *q)
  6. {
  7.    if (First)
  8.    {
  9.       First->Prev = q;
  10.       q->Next = First;
  11.    }
  12.    First = q;
  13. }
  14. void drawqueue::run()
  15. {
  16.    qentry *Curr = First;
  17.    while (Curr)
  18.    {
  19.       Curr->draw();
  20.       Curr = Curr->Next;
  21.    }
  22.    if (mdead)
  23.    {
  24.        delete mdead;
  25.        mdead = 0;
  26.    }
  27. }
  28. void * drawqueue::first(short qtype)
  29. {
  30.    searchpos = First;
  31.    return next(qtype);
  32. }
  33. void * drawqueue::next(short qtype)
  34. {
  35.    while (searchpos)
  36.    {
  37.       if (searchpos->type() & qtype)
  38.       {
  39.           qentry *tmp = searchpos;
  40.           searchpos = searchpos->Next;
  41.           return (void *) tmp;
  42.       }
  43.       searchpos = searchpos->Next;
  44.    }
  45.    return NULL;
  46. }
  47. void drawqueue::purge(queuetype p)
  48. {
  49.    qentry *Curr = First;
  50.    if (p == NONE)
  51.    {
  52.       while (Curr)
  53.       {
  54.          First = Curr;
  55.          Curr = Curr->Next;
  56.          delete First;
  57.       }
  58.       First = searchpos = 0;
  59.    }
  60.    else
  61.    {
  62.       qentry *Qtmp;
  63.       while (Curr)
  64.       {
  65.          if (Curr->type() == p)
  66.          {
  67.             Qtmp = Curr->Next;
  68.             Curr->detach();
  69.             delete Curr;
  70.             Curr = Qtmp;
  71.          }
  72.          else
  73.             Curr = Curr->Next;
  74.       }
  75.       searchpos = First;
  76.    }
  77. }
  78. void qentry::detach()
  79. {
  80.    if (Game->DrawQueue()->First == this)
  81.       Game->DrawQueue()->First = Next;
  82.    if (Next)
  83.       Next->Prev = Prev;
  84.    if (Prev)
  85.       Prev->Next = Next;
  86.    Next = Prev = 0;
  87. }