Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
import artifacts;
|
||||
import regions.regions;
|
||||
|
||||
tidy class ArtifactScript {
|
||||
const ArtifactType@ type;
|
||||
StrategicIconNode@ icon;
|
||||
|
||||
void makeMesh(Artifact& obj) {
|
||||
MeshDesc mesh;
|
||||
@mesh.model = type.model;
|
||||
@mesh.material = type.material;
|
||||
mesh.memorable = true;
|
||||
|
||||
bindMesh(obj, mesh);
|
||||
|
||||
if(type.strategicIcon.valid) {
|
||||
@icon = StrategicIconNode();
|
||||
if(type.strategicIcon.sheet !is null)
|
||||
icon.establish(obj, type.iconSize, type.strategicIcon.sheet, type.strategicIcon.index);
|
||||
else if(type.strategicIcon.mat !is null)
|
||||
icon.establish(obj, type.iconSize, type.strategicIcon.mat);
|
||||
icon.memorable = true;
|
||||
|
||||
if(obj.region !is null)
|
||||
obj.region.addStrategicIcon(-1, obj, icon);
|
||||
}
|
||||
}
|
||||
|
||||
void destroy(Artifact& obj) {
|
||||
if(icon !is null) {
|
||||
if(obj.region !is null)
|
||||
obj.region.removeStrategicIcon(-1, icon);
|
||||
icon.markForDeletion();
|
||||
@icon = null;
|
||||
}
|
||||
leaveRegion(obj);
|
||||
}
|
||||
|
||||
bool onOwnerChange(Artifact& obj, Empire@ prevOwner) {
|
||||
regionOwnerChange(obj, prevOwner);
|
||||
return false;
|
||||
}
|
||||
|
||||
double tick(Artifact& obj, double time) {
|
||||
Region@ prevRegion = obj.region;
|
||||
if(updateRegion(obj)) {
|
||||
Region@ newRegion = obj.region;
|
||||
if(prevRegion !is null)
|
||||
prevRegion.removeStrategicIcon(-1, icon);
|
||||
if(newRegion !is null)
|
||||
newRegion.addStrategicIcon(-1, obj, icon);
|
||||
@prevRegion = newRegion;
|
||||
}
|
||||
icon.visible = obj.isVisibleTo(playerEmpire);
|
||||
|
||||
obj.orbitTick(time);
|
||||
obj.abilityTick(time);
|
||||
return 0.2;
|
||||
}
|
||||
|
||||
vec3d get_strategicIconPosition(Artifact& obj) {
|
||||
if(icon is null)
|
||||
return obj.position;
|
||||
return icon.position;
|
||||
}
|
||||
|
||||
void syncInitial(Artifact& obj, Message& msg) {
|
||||
@type = getArtifactType(msg.readSmall());
|
||||
obj.ArtifactType = type.id;
|
||||
obj.readOrbit(msg);
|
||||
obj.readAbilities(msg);
|
||||
makeMesh(obj);
|
||||
}
|
||||
|
||||
void syncDelta(Artifact& obj, Message& msg, double tDiff) {
|
||||
if(msg.readBit())
|
||||
obj.readAbilityDelta(msg);
|
||||
if(msg.readBit())
|
||||
obj.readOrbitDelta(msg);
|
||||
}
|
||||
|
||||
void syncDetailed(Artifact& obj, Message& msg, double tDiff) {
|
||||
obj.readOrbit(msg);
|
||||
obj.readAbilities(msg);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user