00001 /* $Id: command_queue.cpp 4998 2006-05-30 16:15:17Z Frostregen $ */ 00002 00003 #include "stdafx.h" 00004 #include "tile_type.h" 00005 #include "command_type.h" 00006 #include "command_func.h" 00007 #include "debug.h" 00008 #include "copy_paste.h" 00009 #include "command_queue.h" 00010 #include "settings_type.h" 00011 #include "gfx_func.h" 00012 #include "date_func.h" 00013 00014 CopyPasteCommandQueue::~CopyPasteCommandQueue() 00015 { 00016 this->ClearCopyPasteCommandQueue(); 00017 } 00018 00022 void CopyPasteCommandQueue::CopyPasteQueueCommand(TileIndex tile, uint32 p1, uint32 p2, CommandCallback *callback, uint32 cmd) 00023 { 00024 CommandContainer *cc = new CommandContainer; 00025 00026 cc->tile = tile; 00027 cc->p1 = p1; 00028 cc->p2 = p2; 00029 cc->callback = callback; 00030 cc->cmd = cmd; 00031 00032 /* add it to the queue */ 00033 this->queue.push(cc); 00034 } 00035 00040 void CopyPasteCommandQueue::ExecuteNextCommand() 00041 { 00042 /* Check if queue is not empty */ 00043 if (!this->queue.empty()) { 00044 /* backup and unset _shift_pressed */ 00045 bool temp_shift_pressed = _shift_pressed; 00046 _shift_pressed = false; 00047 /* Get the command and execute it */ 00048 DoCommandP(this->queue.front()); 00049 /* restore _shift_pressed */ 00050 _shift_pressed = temp_shift_pressed; 00051 /* delete this commandcontainer */ 00052 { 00053 CommandContainer *cc = this->queue.front(); 00054 this->queue.pop(); 00055 delete cc; 00056 } 00057 } 00058 } 00059 00062 void CopyPasteCommandQueue::ClearCopyPasteCommandQueue() 00063 { 00064 while (!this->queue.empty()) { 00065 this->queue.pop(); 00066 } 00067 } 00068 00069 void CallCopyPasteCommandQueueTick() 00070 { 00071 /* Process the command_queue */ 00072 if (_settings_client.gui.cp_paste_speed < 255) { 00073 if ((_tick_counter % _settings_client.gui.cp_paste_speed) == 0) { 00074 _copy_paste_command_queue.ExecuteNextCommand(); 00075 } 00076 } 00077 }