Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
import regions.regions;
|
||||
import resources;
|
||||
import civilians;
|
||||
|
||||
const double CIV_HEALTH = 25.0;
|
||||
|
||||
tidy class CivilianScript {
|
||||
uint type = 0;
|
||||
uint cargoType = 0;
|
||||
const ResourceType@ cargoResource;
|
||||
int cargoWorth = 0;
|
||||
bool pickedUp = false;
|
||||
double Health = 0;
|
||||
|
||||
uint getCivilianType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
double get_health() {
|
||||
return Health;
|
||||
}
|
||||
|
||||
double get_maxHealth(const Civilian& obj) {
|
||||
return CIV_HEALTH * obj.radius;
|
||||
}
|
||||
|
||||
uint getCargoType() {
|
||||
if(cargoType == CT_Resource && !pickedUp)
|
||||
return CT_Goods;
|
||||
return cargoType;
|
||||
}
|
||||
|
||||
uint getCargoResource() {
|
||||
if(cargoResource is null)
|
||||
return uint(-1);
|
||||
return cargoResource.id;
|
||||
}
|
||||
|
||||
int getCargoWorth() {
|
||||
return cargoWorth;
|
||||
}
|
||||
|
||||
void init(Civilian& obj) {
|
||||
}
|
||||
|
||||
void destroy(Civilian& obj) {
|
||||
leaveRegion(obj);
|
||||
}
|
||||
|
||||
bool onOwnerChange(Civilian& obj, Empire@ prevOwner) {
|
||||
regionOwnerChange(obj, prevOwner);
|
||||
return false;
|
||||
}
|
||||
|
||||
double tick(Civilian& obj, double time) {
|
||||
updateRegion(obj);
|
||||
if(obj.hasMover)
|
||||
obj.moverTick(time);
|
||||
return 0.2;
|
||||
}
|
||||
|
||||
void makeMesh(Civilian& obj) {
|
||||
MeshDesc mesh;
|
||||
@mesh.model = getCivilianModel(obj.owner, type, obj.radius);
|
||||
@mesh.material = getCivilianMaterial(obj.owner, type, obj.radius);
|
||||
@mesh.iconSheet = getCivilianIcon(obj.owner, type, obj.radius).sheet;
|
||||
mesh.iconIndex = getCivilianIcon(obj.owner, type, obj.radius).index;
|
||||
|
||||
bindMesh(obj, mesh);
|
||||
}
|
||||
|
||||
void _readDelta(Civilian& obj, Message& msg) {
|
||||
cargoType = msg.readSmall();
|
||||
cargoWorth = msg.readSmall();
|
||||
pickedUp = msg.readBit();
|
||||
Health = obj.maxHealth * msg.readFixed();
|
||||
if(msg.readBit()) {
|
||||
uint id = msg.readLimited(getResourceCount()-1);
|
||||
@cargoResource = getResource(id);
|
||||
}
|
||||
else {
|
||||
@cargoResource = null;
|
||||
}
|
||||
}
|
||||
|
||||
void syncInitial(Civilian& obj, Message& msg) {
|
||||
if(msg.readBit()) {
|
||||
if(!obj.hasMover)
|
||||
obj.activateMover();
|
||||
obj.readMover(msg);
|
||||
}
|
||||
msg >> type;
|
||||
_readDelta(obj, msg);
|
||||
makeMesh(obj);
|
||||
}
|
||||
|
||||
void syncDetailed(Civilian& obj, Message& msg, double tDiff) {
|
||||
if(msg.readBit()) {
|
||||
if(!obj.hasMover)
|
||||
obj.activateMover();
|
||||
obj.readMover(msg);
|
||||
}
|
||||
_readDelta(obj, msg);
|
||||
}
|
||||
|
||||
void syncDelta(Civilian& obj, Message& msg, double tDiff) {
|
||||
if(msg.readBit()) {
|
||||
if(!obj.hasMover)
|
||||
obj.activateMover();
|
||||
obj.readMoverDelta(msg);
|
||||
}
|
||||
if(msg.readBit())
|
||||
_readDelta(obj, msg);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user