1 /* 2 * GarbageGenerator.h 3 * Daniel Nelson - 8/24/0 4 * 5 * Copyright (C) 2000 Daniel Nelson 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 2 10 * of the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 * 21 * Daniel Nelson - aluminumangel.org 22 * 174 W. 18th Ave. 23 * Columbus, OH 43210 24 */ 25 26 #ifndef GARBAGEGENERATOR_H 27 #define GARBAGEGENERATOR_H 28 29 using namespace std; 30 31 #include "Game.h" 32 #include "MetaState.h" 33 #include "Communicator.h" 34 #include "Random.h" 35 #include "GarbageQueueElement.h" 36 37 class ComboTabulator; 38 class CommunicationBuffer; 39 40 /* static */ class GarbageGenerator { 41 public: 42 static void gameStart ( ); 43 44 static void comboElimination ( ComboTabulator &combo ); 45 static void comboComplete ( ComboTabulator &combo ); 46 static void timeStep ( ); 47 static void addToQueue ( GarbageQueueElement &e ); 48 static void addToQueue ( CommunicationBuffer &buffer ); 49 static void addToQueue ( BufferElement garbage[], size_t size ); 50 static void addToQueue ( uint32 height, uint32 width, uint32 flavor, uint32 stamp ); 51 52 53 private: 54 static void sendGarbage ( int height, int width, int flavor ); 55 static void sendSpecialGarbage ( int flavor ); 56 determineDropTime(int time_stamp)57 static inline int determineDropTime ( int time_stamp ) 58 { 59 return time_stamp 60 + (GC_AVERAGE_GARBAGE_DROP_DELAY - GC_SPREAD_GARBAGE_DROP_DELAY / 2) 61 + Random::number(GC_SPREAD_GARBAGE_DROP_DELAY); 62 } 63 64 static void dealLocalGarbage ( int height, int width, int flavor, 65 int time_stamp ); 66 static void dealSpecialLocalGarbage ( int flavor, int time_stamp ); 67 68 static GarbageQueueElement garbage_queue[GC_GARBAGE_QUEUE_SIZE]; 69 static int waiting_count; 70 }; 71 72 #endif 73