79 lines
2.3 KiB
ActionScript 3
79 lines
2.3 KiB
ActionScript 3
enum OddityType {
|
|
Odd_Slipstream,
|
|
Odd_Wormhole,
|
|
Odd_Nebula,
|
|
};
|
|
|
|
#section server-side
|
|
StrategicIconNode@ makeOddityVisuals(Oddity& obj, uint type, bool fromCreation = true, bool isServer = true, uint color = 0xffffffff) {
|
|
StrategicIconNode@ icon;
|
|
if(type == Odd_Slipstream) {
|
|
auto@ gfx = PersistentGfx();
|
|
gfx.establish(obj, "Tear", 1.0/3.0);
|
|
gfx.rotate(quaterniond_fromAxisAngle(vec3d_up(), pi * 0.5) * obj.rotation);
|
|
|
|
@icon = StrategicIconNode();
|
|
icon.establish(obj, 0.0325, spritesheet::OrbitalIcons, 4);
|
|
icon.memorable = true;
|
|
icon.setColor(0xffafffff);
|
|
|
|
if(obj.region !is null)
|
|
obj.region.addStrategicIcon(-1, obj, icon);
|
|
#section server
|
|
if(fromCreation && (obj.region is null || obj.region.VisionMask & playerEmpire.mask != 0))
|
|
sound::open_slipstream.play(obj.position, priority=true);
|
|
|
|
addAmbientSource(CURRENT_PLAYER, "tear", obj.id, obj.position, obj.radius);
|
|
#section shadow
|
|
if(!inGalaxyCreation && (obj.region is null || obj.region.VisionMask & playerEmpire.mask != 0))
|
|
sound::open_slipstream.play(obj.position, priority=true);
|
|
|
|
addAmbientSource("tear", obj.id, obj.position, obj.radius);
|
|
#section server-side
|
|
}
|
|
else if(type == Odd_Wormhole) {
|
|
auto@ gfx = PersistentGfx();
|
|
gfx.establish(obj, "Wormhole", 1.0/3.0);
|
|
|
|
@icon = StrategicIconNode();
|
|
icon.establish(obj, 0.0325, spritesheet::OrbitalIcons, 4);
|
|
icon.memorable = true;
|
|
icon.setColor(0x66f4ffff);
|
|
|
|
if(obj.region !is null)
|
|
obj.region.addStrategicIcon(-1, obj, icon);
|
|
|
|
#section server
|
|
addAmbientSource(CURRENT_PLAYER, "tear", obj.id, obj.position, obj.radius);
|
|
#section shadow
|
|
addAmbientSource("tear", obj.id, obj.position, obj.radius);
|
|
#section server-side
|
|
}
|
|
else if(type == Odd_Nebula) {
|
|
auto@ node = GalaxyGas();
|
|
node.position = obj.position;
|
|
node.scale = obj.radius;
|
|
node.rebuildTransform();
|
|
|
|
Colorf fCol(Color(color));
|
|
float h = fCol.hue, s = fCol.saturation, v = fCol.value;
|
|
|
|
for(uint i = 0; i < 40; ++i) {
|
|
vec2d off = (random2d(0, 0.75) * obj.radius);
|
|
vec3d pos = obj.position;
|
|
pos.x += off.x;
|
|
pos.z += off.y;
|
|
|
|
double rad = obj.radius * 0.65;
|
|
Colorf hsv;
|
|
hsv.fromHSV(h + normald(-70.0,70.0), clamp(s * normald(0.6,1.4), 0.0, 1.0), v);
|
|
Color col(hsv);
|
|
col.a = randomi(0x18,0x22);
|
|
|
|
node.addSprite(pos, rad, col.rgba, true, baseAlpha=col.a);
|
|
}
|
|
}
|
|
|
|
return icon;
|
|
}
|