1 /* 2 * This file is part of Dune Legacy. 3 * 4 * Dune Legacy is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * Dune Legacy is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with Dune Legacy. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #ifndef CHANGEEVENTLIST_H 19 #define CHANGEEVENTLIST_H 20 21 #include <misc/InputStream.h> 22 #include <misc/OutputStream.h> 23 24 #include <SDL.h> 25 #include <list> 26 27 class ChangeEventList { 28 public: 29 class ChangeEvent { 30 public: 31 enum class EventType { 32 ChangeHouse, 33 ChangeTeam, 34 ChangePlayer, 35 SetHumanPlayer 36 }; 37 38 ChangeEvent(EventType eventType,Uint32 slot,Uint32 newValue)39 ChangeEvent(EventType eventType, Uint32 slot, Uint32 newValue) 40 : eventType(eventType), slot(slot), newValue(newValue) { 41 42 } 43 ChangeEvent(Uint32 slot,const std::string & newStringValue)44 ChangeEvent(Uint32 slot, const std::string& newStringValue) 45 : eventType(EventType::SetHumanPlayer), slot(slot), newStringValue(newStringValue) { 46 } 47 ChangeEvent(InputStream & stream)48 explicit ChangeEvent(InputStream& stream) { 49 eventType = static_cast<EventType>(stream.readUint32()); 50 slot = stream.readUint32(); 51 52 if(eventType == EventType::SetHumanPlayer) { 53 newStringValue = stream.readString(); 54 } else { 55 newValue = stream.readUint32(); 56 } 57 } 58 save(OutputStream & stream)59 void save(OutputStream& stream) const { 60 stream.writeUint32(static_cast<Uint32>(eventType)); 61 stream.writeUint32(slot); 62 if(eventType == EventType::SetHumanPlayer) { 63 stream.writeString(newStringValue); 64 } else { 65 stream.writeUint32(newValue); 66 } 67 } 68 69 EventType eventType; 70 Uint32 slot; 71 Uint32 newValue; 72 std::string newStringValue; 73 }; 74 ChangeEventList()75 ChangeEventList() { 76 } 77 ChangeEventList(InputStream & stream)78 explicit ChangeEventList(InputStream& stream) { 79 Uint32 numChangeEvents = stream.readUint32(); 80 for(Uint32 i = 0; i < numChangeEvents; i++) { 81 changeEventList.push_back(ChangeEvent(stream)); 82 } 83 } 84 ~ChangeEventList()85 ~ChangeEventList() { 86 87 } 88 save(OutputStream & stream)89 void save(OutputStream& stream) const { 90 stream.writeUint32(changeEventList.size()); 91 for(const ChangeEvent& changeEvent : changeEventList) { 92 changeEvent.save(stream); 93 } 94 } 95 96 std::list<ChangeEvent> changeEventList; 97 }; 98 99 #endif //CHANGEEVENTLIST_H 100