Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import random_events;
|
||||
|
||||
tidy class RandomEvents : Component_RandomEvents {
|
||||
Mutex mtx;
|
||||
array<CurrentEvent> events;
|
||||
|
||||
CurrentEvent@ getEventByID(int id) {
|
||||
for(uint i = 0, cnt = events.length; i < cnt; ++i) {
|
||||
if(events[i].id == id)
|
||||
return events[i];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
int get_currentEventID() {
|
||||
if(events.length == 0)
|
||||
return -1;
|
||||
Lock lck(mtx);
|
||||
if(events.length == 0)
|
||||
return -1;
|
||||
return events[0].id;
|
||||
}
|
||||
|
||||
bool hasCurrentEvents() {
|
||||
return events.length != 0;
|
||||
}
|
||||
|
||||
void getCurrentEvents() {
|
||||
Lock lck(mtx);
|
||||
for(uint i = 0, cnt = events.length; i < cnt; ++i)
|
||||
yield(events[i]);
|
||||
}
|
||||
|
||||
void getEvent(int id) {
|
||||
Lock lck(mtx);
|
||||
auto@ evt = getEventByID(id);
|
||||
if(evt !is null)
|
||||
yield(evt);
|
||||
}
|
||||
|
||||
void chooseEventOption(Empire& emp, int evtId, uint optId) {
|
||||
Lock lck(mtx);
|
||||
for(uint i = 0, cnt = events.length; i < cnt; ++i) {
|
||||
if(events[i].id == evtId) {
|
||||
events.removeAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void readEvents(Message& msg) {
|
||||
if(!msg.readBit()) {
|
||||
if(events.length != 0) {
|
||||
Lock lck(mtx);
|
||||
events.length = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
Lock lck(mtx);
|
||||
events.length = msg.readSmall();
|
||||
for(uint i = 0, cnt = events.length; i < cnt; ++i)
|
||||
msg >> events[i];
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user