add os[Link]ParticleSystem with expire option. If expire true and system MaxAge > 0, the system will be be (lazy) removed from the prim after that MaxAge

This commit is contained in:
UbitUmarov
2021-01-12 15:38:10 +00:00
parent 9f8473caae
commit 72f7009b10
3 changed files with 31 additions and 5 deletions

View File

@@ -325,6 +325,7 @@ namespace OpenSim.Region.Framework.Scenes
protected SceneObjectGroup m_parentGroup;
protected byte[] m_particleSystem = Utils.EmptyBytes;
protected double m_particleSystemExpire = -1;
protected ulong m_regionHandle;
protected Quaternion m_rotationOffset = Quaternion.Identity;
protected PrimitiveBaseShape m_shape;
@@ -735,7 +736,15 @@ namespace OpenSim.Region.Framework.Scenes
public Byte[] ParticleSystem
{
get { return m_particleSystem; }
get
{
if(m_particleSystemExpire > 0 && Util.GetTimeStamp() > m_particleSystemExpire)
{
m_particleSystemExpire = -1;
m_particleSystem = new byte[0];
}
return m_particleSystem;
}
set { m_particleSystem = value; }
}
@@ -1940,8 +1949,12 @@ namespace OpenSim.Region.Framework.Scenes
// m_log.Debug("Aprev: " + prevflag.ToString() + " curr: " + Flags.ToString());
}
public void AddNewParticleSystem(Primitive.ParticleSystem pSystem)
public void AddNewParticleSystem(Primitive.ParticleSystem pSystem, bool expire)
{
if(expire && pSystem.MaxAge > 0.0001)
m_particleSystemExpire = Util.GetTimeStamp() + pSystem.MaxAge + 0.1;
else
m_particleSystemExpire = -1;
m_particleSystem = pSystem.GetBytes();
}

View File

@@ -576,15 +576,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
vector osGetLinkStandTarget(LSL_Integer linkNumber);
LSL_Integer osClearObjectAnimations();
LSL_Float osGetApparentTime();
LSL_Float osGetApparentTime();
LSL_String osGetApparentTimeString(LSL_Integer format24);
LSL_Float osGetApparentRegionTime();
LSL_Float osGetApparentRegionTime();
LSL_String osGetApparentRegionTimeString(LSL_Integer format24);
LSL_Integer osReplaceAgentEnvironment(LSL_Key agentkey, LSL_Integer transition, LSL_String daycycle);
LSL_Integer osReplaceParcelEnvironment(LSL_Integer transition, LSL_String daycycle);
LSL_Integer osReplaceRegionEnvironment(LSL_Integer transition, LSL_String daycycle,
LSL_Float daylen, LSL_Float dayoffset, LSL_Float altitude1, LSL_Float altitude2, LSL_Float altitude3);
LSL_Float daylen, LSL_Float dayoffset, LSL_Float altitude1, LSL_Float altitude2, LSL_Float altitude3);
LSL_Integer osResetEnvironment(LSL_Integer parcelOrRegion, LSL_Integer transition);
void osParticleSystem(LSL_List rules, LSL_Integer expire);
void osLinkParticleSystem(LSL_Integer linknumber, LSL_List rules, LSL_Integer expire);
}
}

View File

@@ -1533,5 +1533,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{
return m_OSSL_Functions.osResetEnvironment(parcelOrRegion, transition);
}
public void osParticleSystem(LSL_List rules, LSL_Integer expire)
{
m_OSSL_Functions.osParticleSystem(rules, expire);
}
public void osLinkParticleSystem(LSL_Integer linknumber, LSL_List rules, LSL_Integer expire)
{
m_OSSL_Functions.osLinkParticleSystem(linknumber, rules, expire);
}
}
}