mirror of
https://github.com/opensim/opensim.git
synced 2026-08-08 02:05:34 +08:00
clamp/limit a few things; a few cosmetics on animation control
This commit is contained in:
@@ -53,6 +53,8 @@ namespace OpenSim.Framework
|
||||
public const float MaxSimulationHeight = 50000f;
|
||||
public const float MinTerrainHeightmap = -100f;
|
||||
public const float MaxTerrainHeightmap = 4000f;
|
||||
public const float MinWaterHeight = 0;
|
||||
public const float MaxWaterHeight = 8000f;
|
||||
|
||||
public const string DefaultTexture = "89556747-24cb-43ed-920b-47caed15465f";
|
||||
|
||||
|
||||
@@ -280,77 +280,77 @@ namespace OpenSim.Framework
|
||||
public double Elevation1NW
|
||||
{
|
||||
get { return m_Elevation1NW; }
|
||||
set { m_Elevation1NW = value; }
|
||||
set { m_Elevation1NW = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation2NW = 60;
|
||||
public double Elevation2NW
|
||||
{
|
||||
get { return m_Elevation2NW; }
|
||||
set { m_Elevation2NW = value; }
|
||||
set { m_Elevation2NW = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation1NE = 10;
|
||||
public double Elevation1NE
|
||||
{
|
||||
get { return m_Elevation1NE; }
|
||||
set { m_Elevation1NE = value; }
|
||||
set { m_Elevation1NE = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation2NE = 60;
|
||||
public double Elevation2NE
|
||||
{
|
||||
get { return m_Elevation2NE; }
|
||||
set { m_Elevation2NE = value; }
|
||||
set { m_Elevation2NE = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation1SE = 10;
|
||||
public double Elevation1SE
|
||||
{
|
||||
get { return m_Elevation1SE; }
|
||||
set { m_Elevation1SE = value; }
|
||||
set { m_Elevation1SE = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation2SE = 60;
|
||||
public double Elevation2SE
|
||||
{
|
||||
get { return m_Elevation2SE; }
|
||||
set { m_Elevation2SE = value; }
|
||||
set { m_Elevation2SE = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation1SW = 10;
|
||||
public double Elevation1SW
|
||||
{
|
||||
get { return m_Elevation1SW; }
|
||||
set { m_Elevation1SW = value; }
|
||||
set { m_Elevation1SW = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_Elevation2SW = 60;
|
||||
public double Elevation2SW
|
||||
{
|
||||
get { return m_Elevation2SW; }
|
||||
set { m_Elevation2SW = value; }
|
||||
set { m_Elevation2SW = Utils.Clamp(value, Constants.MinTerrainHeightmap, Constants.MaxTerrainHeightmap); ; }
|
||||
}
|
||||
|
||||
private double m_WaterHeight = 20;
|
||||
public double WaterHeight
|
||||
{
|
||||
get { return m_WaterHeight; }
|
||||
set { m_WaterHeight = value; }
|
||||
set { m_WaterHeight = Utils.Clamp(value, Constants.MinWaterHeight, Constants.MaxWaterHeight); }
|
||||
}
|
||||
|
||||
private double m_TerrainRaiseLimit = 100;
|
||||
public double TerrainRaiseLimit
|
||||
{
|
||||
get { return m_TerrainRaiseLimit; }
|
||||
set { m_TerrainRaiseLimit = value; }
|
||||
set { m_TerrainRaiseLimit = Utils.Clamp(value, 0, 200f); }
|
||||
}
|
||||
|
||||
private double m_TerrainLowerLimit = -100;
|
||||
public double TerrainLowerLimit
|
||||
{
|
||||
get { return m_TerrainLowerLimit; }
|
||||
set { m_TerrainLowerLimit = value; }
|
||||
set { m_TerrainLowerLimit = Utils.Clamp(value, -200f, 0); ; }
|
||||
}
|
||||
|
||||
private bool m_UseEstateSun = true;
|
||||
|
||||
@@ -167,6 +167,8 @@ namespace OSHttpServer.Parser
|
||||
{
|
||||
if (!m_curHeaderValue.TryParseInt(out m_bodyBytesLeft))
|
||||
throw new BadRequestException("Content length is not a number.");
|
||||
if(m_bodyBytesLeft > 64 * 1024 * 1204)
|
||||
throw new BadRequestException("Content length too large.");
|
||||
}
|
||||
|
||||
if (HeaderReceived != null)
|
||||
|
||||
@@ -81,6 +81,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
return UUID.Zero;
|
||||
}
|
||||
|
||||
public bool TryGetOverriddenAnimation(string state, out UUID animID)
|
||||
{
|
||||
lock (MAOLock)
|
||||
return m_overrides.TryGetValue(state, out animID);
|
||||
}
|
||||
|
||||
public Dictionary<string, UUID> CloneAOPairs()
|
||||
{
|
||||
lock (MAOLock)
|
||||
|
||||
@@ -194,64 +194,59 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
|
||||
public bool TrySetMovementAnimation(string anim)
|
||||
{
|
||||
bool ret = false;
|
||||
if (!m_scenePresence.IsChildAgent)
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PRESENCE ANIMATOR]: Setting movement animation {0} for {1}",
|
||||
// anim, m_scenePresence.Name);
|
||||
|
||||
if (!aoSitGndAnim.IsZero())
|
||||
{
|
||||
avnChangeAnim(aoSitGndAnim, false, true);
|
||||
aoSitGndAnim = UUID.Zero;
|
||||
}
|
||||
|
||||
UUID overridenAnim = m_scenePresence.Overrides.GetOverriddenAnimation(anim);
|
||||
if (!overridenAnim.IsZero())
|
||||
{
|
||||
if (anim == "SITGROUND")
|
||||
{
|
||||
UUID defsit = DefaultAvatarAnimations.AnimsUUIDbyName["SIT_GROUND_CONSTRAINED"];
|
||||
if (defsit.IsZero())
|
||||
return false;
|
||||
m_animations.SetDefaultAnimation(defsit, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
|
||||
aoSitGndAnim = overridenAnim;
|
||||
avnChangeAnim(overridenAnim, true, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
|
||||
}
|
||||
m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION);
|
||||
SendAnimPack();
|
||||
ret = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// translate sit and sitground state animations
|
||||
if (anim == "SIT" || anim == "SITGROUND")
|
||||
anim = m_scenePresence.sitAnimation;
|
||||
|
||||
if (m_animations.TrySetDefaultAnimation(anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID))
|
||||
{
|
||||
// m_log.DebugFormat(
|
||||
// "[SCENE PRESENCE ANIMATOR]: Updating movement animation to {0} for {1}",
|
||||
// anim, m_scenePresence.Name);
|
||||
|
||||
m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION);
|
||||
SendAnimPack();
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
if (m_scenePresence.IsChildAgent)
|
||||
{
|
||||
m_log.WarnFormat(
|
||||
"[SCENE PRESENCE ANIMATOR]: Tried to set movement animation {0} on child presence {1}",
|
||||
anim, m_scenePresence.Name);
|
||||
return false;
|
||||
}
|
||||
return ret;
|
||||
|
||||
//m_log.DebugFormat(
|
||||
// "[SCENE PRESENCE ANIMATOR]: Setting movement animation {0} for {1}",
|
||||
// anim, m_scenePresence.Name);
|
||||
|
||||
if (!aoSitGndAnim.IsZero())
|
||||
{
|
||||
avnChangeAnim(aoSitGndAnim, false, true);
|
||||
aoSitGndAnim = UUID.Zero;
|
||||
}
|
||||
|
||||
if (m_scenePresence.Overrides.TryGetOverriddenAnimation(anim, out UUID overridenAnim))
|
||||
{
|
||||
if (anim.Equals("SITGROUND"))
|
||||
{
|
||||
UUID defsit = DefaultAvatarAnimations.AnimsUUIDbyName["SIT_GROUND_CONSTRAINED"];
|
||||
if (defsit.IsZero())
|
||||
return false;
|
||||
m_animations.SetDefaultAnimation(defsit, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
|
||||
aoSitGndAnim = overridenAnim;
|
||||
avnChangeAnim(overridenAnim, true, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_animations.SetDefaultAnimation(overridenAnim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID);
|
||||
}
|
||||
m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION);
|
||||
SendAnimPack();
|
||||
return true;
|
||||
}
|
||||
|
||||
// translate sit and sitground state animations
|
||||
if (anim.Equals("SIT") || anim.Equals("SITGROUND"))
|
||||
anim = m_scenePresence.sitAnimation;
|
||||
|
||||
if (m_animations.TrySetDefaultAnimation(anim, m_scenePresence.ControllingClient.NextAnimationSequenceNumber, m_scenePresence.UUID))
|
||||
{
|
||||
//m_log.DebugFormat(
|
||||
// "[SCENE PRESENCE ANIMATOR]: Updating movement animation to {0} for {1}",
|
||||
// anim, m_scenePresence.Name);
|
||||
|
||||
m_scenePresence.SendScriptChangedEventToAttachments(Changed.ANIMATION);
|
||||
SendAnimPack();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public enum motionControlStates : byte
|
||||
@@ -490,7 +485,6 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
return "LAND";
|
||||
}
|
||||
|
||||
|
||||
if (currentControlState == motionControlStates.landing)
|
||||
{
|
||||
Falling = false;
|
||||
@@ -558,9 +552,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
/// <returns>'true' if the animation was changed</returns>
|
||||
public bool UpdateMovementAnimations()
|
||||
{
|
||||
// m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Updating movement animations for {0}", m_scenePresence.Name);
|
||||
|
||||
bool ret = false;
|
||||
// m_log.DebugFormat("[SCENE PRESENCE ANIMATOR]: Updating movement animations for {0}", m_scenePresence.Name);
|
||||
lock (m_animations)
|
||||
{
|
||||
string newMovementAnimation = DetermineMovementAnimation();
|
||||
@@ -574,10 +566,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
|
||||
// Only set it if it's actually changed, give a script
|
||||
// a chance to stop a default animation
|
||||
ret = TrySetMovementAnimation(CurrentMovementAnimation);
|
||||
return TrySetMovementAnimation(CurrentMovementAnimation);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool ForceUpdateMovementAnimations()
|
||||
@@ -837,7 +829,7 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
/// <summary>
|
||||
/// Send animation information about this avatar to all clients.
|
||||
/// </summary>
|
||||
public void SendAnimPack()
|
||||
public void SendAnimPack(bool selfIncluded = true)
|
||||
{
|
||||
//m_log.Debug("Sending animation pack to all");
|
||||
|
||||
@@ -851,7 +843,10 @@ namespace OpenSim.Region.Framework.Scenes.Animation
|
||||
m_animations.GetArrays(out animIDs, out sequenceNums, out objectIDs);
|
||||
|
||||
// SendAnimPack(animIDs, sequenceNums, objectIDs);
|
||||
m_scenePresence.SendAnimPack(animIDs, sequenceNums, objectIDs);
|
||||
if(selfIncluded)
|
||||
m_scenePresence.SendAnimPack(animIDs, sequenceNums, objectIDs);
|
||||
else
|
||||
m_scenePresence.SendAnimPackToOthers(animIDs, sequenceNums, objectIDs);
|
||||
}
|
||||
|
||||
public string GetAnimName(UUID animId)
|
||||
|
||||
@@ -4425,6 +4425,24 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
});
|
||||
}
|
||||
|
||||
public void SendAnimPackToOthers(UUID[] animations, int[] seqs, UUID[] objectIDs)
|
||||
{
|
||||
if (IsChildAgent)
|
||||
return;
|
||||
|
||||
m_scene.ForEachScenePresence(delegate (ScenePresence p)
|
||||
{
|
||||
if (p.IsNPC)
|
||||
return;
|
||||
if (p.LocalId == LocalId)
|
||||
return;
|
||||
|
||||
if (ParcelHideThisAvatar && currentParcelUUID != p.currentParcelUUID && !p.IsViewerUIGod)
|
||||
return;
|
||||
p.ControllingClient.SendAnimations(animations, seqs, ControllingClient.AgentId, objectIDs);
|
||||
});
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Significant Movement Method
|
||||
@@ -7016,5 +7034,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
return Overrides.GetOverriddenAnimation(animState);
|
||||
}
|
||||
|
||||
public bool TryGetAnimationOverride(string animState, out UUID animID)
|
||||
{
|
||||
return Overrides.TryGetOverriddenAnimation(animState, out animID);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17505,8 +17505,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return String.Empty;
|
||||
}
|
||||
|
||||
UUID animID = presence.GetAnimationOverride(state);
|
||||
if (animID.IsZero())
|
||||
if (!presence.TryGetAnimationOverride(state, out UUID animID) || animID.IsZero())
|
||||
return animState;
|
||||
|
||||
foreach (KeyValuePair<string, UUID> kvp in DefaultAvatarAnimations.AnimsUUIDbyName)
|
||||
|
||||
Reference in New Issue
Block a user