diff --git a/Programs/Simian/Extensions/ConnectionManagement.cs b/Programs/Simian/Extensions/ConnectionManagement.cs index 498ae800..4e15a202 100644 --- a/Programs/Simian/Extensions/ConnectionManagement.cs +++ b/Programs/Simian/Extensions/ConnectionManagement.cs @@ -37,7 +37,7 @@ namespace Simian.Extensions handshake.RegionInfo.SimOwner = UUID.Random(); handshake.RegionInfo.SimAccess = (byte)SimAccess.Min; handshake.RegionInfo.SimName = Utils.StringToBytes("Simian"); - handshake.RegionInfo.WaterHeight = server.WaterHeight; + handshake.RegionInfo.WaterHeight = server.Scene.WaterHeight; handshake.RegionInfo.TerrainBase0 = UUID.Zero; handshake.RegionInfo.TerrainBase1 = UUID.Zero; handshake.RegionInfo.TerrainBase2 = UUID.Zero; diff --git a/Programs/Simian/Extensions/Movement.cs b/Programs/Simian/Extensions/Movement.cs index 7632fa47..0436478b 100644 --- a/Programs/Simian/Extensions/Movement.cs +++ b/Programs/Simian/Extensions/Movement.cs @@ -118,7 +118,7 @@ namespace Simian.Extensions // Z acceleration resulting from gravity float gravity = 0f; - float waterChestHeight = server.WaterHeight - (agent.Avatar.Scale.Z * .33f); + float waterChestHeight = server.Scene.WaterHeight - (agent.Avatar.Scale.Z * .33f); if (flying) { @@ -158,7 +158,7 @@ namespace Simian.Extensions else if (agent.Avatar.Position.Z > lowerLimit + FALL_FORGIVENESS || agent.Avatar.Position.Z <= waterChestHeight) { //falling, floating, or landing from a jump - if (agent.Avatar.Position.Z > server.WaterHeight) + if (agent.Avatar.Position.Z > server.Scene.WaterHeight) { //above water move = Vector3.Zero; //override controls while drifting @@ -213,7 +213,7 @@ namespace Simian.Extensions gravity = 0f; //buoyant agent.Avatar.Velocity *= 0.5f * seconds; - agent.Avatar.Velocity.Z += 1.0f * seconds; + agent.Avatar.Velocity.Z += 0.75f * seconds; if (server.Avatars.SetDefaultAnimation(agent, Animations.FALLDOWN)) animsChanged = true; @@ -384,8 +384,9 @@ namespace Simian.Extensions { AgentHeightWidthPacket heightWidth = (AgentHeightWidthPacket)packet; - Logger.Log(String.Format("Agent wants to set height={0}, width={1}", - heightWidth.HeightWidthBlock.Height, heightWidth.HeightWidthBlock.Width), Helpers.LogLevel.Info); + // TODO: These are the screen size dimensions. Useful when we start doing frustum culling + //Logger.Log(String.Format("Agent wants to set height={0}, width={1}", + // heightWidth.HeightWidthBlock.Height, heightWidth.HeightWidthBlock.Width), Helpers.LogLevel.Info); } } diff --git a/Programs/Simian/Extensions/ObjectManager.cs b/Programs/Simian/Extensions/ObjectManager.cs index 5550b7a5..52b9b10f 100644 --- a/Programs/Simian/Extensions/ObjectManager.cs +++ b/Programs/Simian/Extensions/ObjectManager.cs @@ -79,9 +79,6 @@ namespace Simian.Extensions Vector3 rayDir = Vector3.Normalize(add.ObjectData.RayEnd - add.ObjectData.RayStart); position -= rayDir * scale; - // HACK: Push the prim up a little to keep it from falling through the world - position.Z += 3.0f; - #endregion Position Calculation #region Foliage Handling diff --git a/Programs/Simian/Extensions/ParcelManager.cs b/Programs/Simian/Extensions/ParcelManager.cs index 9e2fffc1..79c39da9 100644 --- a/Programs/Simian/Extensions/ParcelManager.cs +++ b/Programs/Simian/Extensions/ParcelManager.cs @@ -47,6 +47,7 @@ namespace Simian.Extensions parcels[parcel.LocalID] = parcel; server.UDP.RegisterPacketCallback(PacketType.ParcelPropertiesRequest, ParcelPropertiesRequestHandler); + server.UDP.RegisterPacketCallback(PacketType.ParcelPropertiesUpdate, ParcelPropertiesUpdateHandler); } public void Stop() @@ -258,5 +259,43 @@ namespace Simian.Extensions for (int i = 0; i < parcels.Count; i++) SendParcelProperties(parcels[i], request.ParcelData.SequenceID, request.ParcelData.SnapSelection, result, agent); } + + void ParcelPropertiesUpdateHandler(Packet packet, Agent agent) + { + ParcelPropertiesUpdatePacket update = (ParcelPropertiesUpdatePacket)packet; + + Parcel parcel; + if (parcels.TryGetValue(update.ParcelData.LocalID, out parcel)) + { + parcel.AuthBuyerID = update.ParcelData.AuthBuyerID; + parcel.Category = (Parcel.ParcelCategory)update.ParcelData.Category; + parcel.Desc = Utils.BytesToString(update.ParcelData.Desc); + parcel.Flags = (Parcel.ParcelFlags)update.ParcelData.ParcelFlags; + parcel.GroupID = update.ParcelData.GroupID; + parcel.Landing = (Parcel.LandingType)update.ParcelData.LandingType; + parcel.Media.MediaAutoScale = update.ParcelData.MediaAutoScale; + parcel.Media.MediaID = update.ParcelData.MediaID; + parcel.Media.MediaURL = Utils.BytesToString(update.ParcelData.MediaURL); + parcel.MusicURL = Utils.BytesToString(update.ParcelData.MusicURL); + parcel.Name = Utils.BytesToString(update.ParcelData.Name); + parcel.PassHours = update.ParcelData.PassHours; + parcel.PassPrice = update.ParcelData.PassPrice; + parcel.SalePrice = update.ParcelData.SalePrice; + parcel.SnapshotID = update.ParcelData.SnapshotID; + parcel.UserLocation = update.ParcelData.UserLocation; + parcel.UserLookAt = update.ParcelData.UserLookAt; + + lock (parcels) + parcels[parcel.LocalID] = parcel; + + if (update.ParcelData.Flags != 0) + SendParcelProperties(parcel.LocalID, 0, false, ParcelResult.Single, agent); + } + else + { + Logger.Log("Got a ParcelPropertiesUpdate for an unknown parcel " + update.ParcelData.LocalID, + Helpers.LogLevel.Warning); + } + } } } diff --git a/Programs/Simian/Extensions/SceneManager.cs b/Programs/Simian/Extensions/SceneManager.cs index e61ada33..30f88afe 100644 --- a/Programs/Simian/Extensions/SceneManager.cs +++ b/Programs/Simian/Extensions/SceneManager.cs @@ -36,6 +36,8 @@ namespace Simian.Extensions } } + public float WaterHeight { get { return 35f; } } + public SceneManager(Simian server) { this.server = server; diff --git a/Programs/Simian/Interfaces/ISceneProvider.cs b/Programs/Simian/Interfaces/ISceneProvider.cs index 6a438c0d..74ea1d12 100644 --- a/Programs/Simian/Interfaces/ISceneProvider.cs +++ b/Programs/Simian/Interfaces/ISceneProvider.cs @@ -26,6 +26,7 @@ namespace Simian // TODO: Convert to a patch-based system, and expose terrain editing // through functions instead of a property float[] Heightmap { get; set; } + float WaterHeight { get; } bool ObjectAdd(object sender, Agent creator, SimulationObject obj, PrimFlags creatorFlags); bool ObjectRemove(object sender, SimulationObject obj); diff --git a/Programs/Simian/Simian.cs b/Programs/Simian/Simian.cs index 52fa48f2..10f4109e 100644 --- a/Programs/Simian/Simian.cs +++ b/Programs/Simian/Simian.cs @@ -19,7 +19,6 @@ namespace Simian public HttpServer HttpServer; public ulong RegionHandle; - public float WaterHeight = 35.0f; // Interfaces public IUDPProvider UDP;