public void Initialize (RegionInfo regionInfo, AgentCircuitManager authen, IClientNetworkServer clientServer) { Initialize (regionInfo); //Set up the clientServer m_clientServer = clientServer; clientServer.AddScene (this); m_sceneManager = RequestModuleInterface<SceneManager> (); m_simDataStore = m_sceneManager.GetSimulationDataStore (); m_config = m_sceneManager.ConfigSource; m_authenticateHandler = authen; m_AuroraEventManager = new AuroraEventManager(); m_eventManager = new EventManager(); m_permissions = new ScenePermissions(this); // Load region settings m_regInfo.RegionSettings = Aurora.DataManager.DataManager.RequestPlugin<IRegionInfoConnector> ().LoadRegionSettings (m_regInfo.RegionID); m_sceneGraph = new SceneGraph(this, m_regInfo); #region Region Config IConfig aurorastartupConfig = m_config.Configs["AuroraStartup"]; if (aurorastartupConfig != null) { //Region specific is still honored here, the RegionInfo checks for it RegionInfo.ObjectCapacity = aurorastartupConfig.GetInt("ObjectCapacity", 80000); } IConfig packetConfig = m_config.Configs["PacketPool"]; if (packetConfig != null) { PacketPool.Instance.RecyclePackets = packetConfig.GetBoolean("RecyclePackets", true); PacketPool.Instance.RecycleDataBlocks = packetConfig.GetBoolean("RecycleDataBlocks", true); } #endregion Region Config m_basesimfps = 45f; m_basesimphysfps = 45f; m_basesimphysfps = Config.Configs["Physics"].GetFloat("BasePhysicsFPS", 45f); if (m_basesimphysfps > 45f) m_basesimphysfps = 45f; m_basesimfps = Config.Configs["Protection"].GetFloat("BaseRateFramesPerSecond", 45f); if (m_basesimfps > 45f) m_basesimfps = 45f; if (m_basesimphysfps > m_basesimfps) m_basesimphysfps = m_basesimfps; m_updatetimespan = 1000 / m_basesimfps; m_physicstimespan = 1000 / m_basesimphysfps; #region Startup Complete config EventManager.OnAddToStartupQueue += AddToStartupQueue; EventManager.OnModuleFinishedStartup += FinishedStartup; //EventManager.OnStartupComplete += StartupComplete; AddToStartupQueue("Startup"); #endregion }
public Scene(RegionInfo regInfo, AgentCircuitManager authen, SceneCommunicationService sceneGridService, IConfigSource config, string simulatorVersion, ISimulationDataService simDataService, IStatsCollector stats) { //THIS NEEDS RESET TO FIX RESTARTS shuttingdown = false; m_stats = stats; m_config = config; Random random = new Random(); m_lastAllocatedLocalId = (uint)(random.NextDouble() * (double)(uint.MaxValue / 2)) + (uint)(uint.MaxValue / 4); m_authenticateHandler = authen; m_sceneGridService = sceneGridService; m_regInfo = regInfo; m_lastUpdate = Util.EnvironmentTickCount(); BordersLocked = true; Border northBorder = new Border(); northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize); //<--- northBorder.CrossDirection = Cardinals.N; NorthBorders.Add(northBorder); Border southBorder = new Border(); southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, 0); //---> southBorder.CrossDirection = Cardinals.S; SouthBorders.Add(southBorder); Border eastBorder = new Border(); eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize); //<--- eastBorder.CrossDirection = Cardinals.E; EastBorders.Add(eastBorder); Border westBorder = new Border(); westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, 0); //---> westBorder.CrossDirection = Cardinals.W; WestBorders.Add(westBorder); BordersLocked = false; AuroraEventManager = new AuroraEventManager(); m_eventManager = new EventManager(); m_permissions = new ScenePermissions(this); m_asyncSceneObjectDeleter = new AsyncSceneObjectGroupDeleter(this); m_asyncSceneObjectDeleter.Enabled = true; m_SimulationDataService = simDataService; // Load region settings m_regInfo.RegionSettings = m_SimulationDataService.LoadRegionSettings(m_regInfo.RegionID); FindEstateInfo(); //Bind Storage Manager functions to some land manager functions for this scene IParcelServiceConnector conn = DataManager.RequestPlugin<IParcelServiceConnector>(); if(conn != null) { EventManager.OnLandObjectAdded += new EventManager.LandObjectAdded(conn.StoreLandObject); EventManager.OnLandObjectRemoved += new EventManager.LandObjectRemoved(conn.RemoveLandObject); } else { EventManager.OnLandObjectAdded += new EventManager.LandObjectAdded(SimulationDataService.StoreLandObject); EventManager.OnLandObjectRemoved += new EventManager.LandObjectRemoved(SimulationDataService.RemoveLandObject); } m_sceneGraph = new SceneGraph(this, m_regInfo); StatsReporter = new SimStatsReporter(this); StatsReporter.OnSendStatsResult += SendSimStatsPackets; StatsReporter.OnStatsIncorrect += m_sceneGraph.RecalculateStats; m_simulatorVersion = simulatorVersion + " (" + Util.GetRuntimeInformation() + ")"; #region Region Config try { DirectionsToBlockChildAgents = new bool[3,3]; DirectionsToBlockChildAgents.Initialize(); IConfig aurorastartupConfig = m_config.Configs["AuroraStartup"]; if (aurorastartupConfig != null) { RunScriptsInAttachments = aurorastartupConfig.GetBoolean("AllowRunningOfScriptsInAttachments", false); m_UseSelectionParticles = aurorastartupConfig.GetBoolean("UseSelectionParticles", true); EnableFakeRaycasting = aurorastartupConfig.GetBoolean("EnableFakeRaycasting", false); MaxLowValue = aurorastartupConfig.GetFloat("MaxLowValue", -1000); Util.RegionViewSize = aurorastartupConfig.GetInt("RegionSightSize", 1); Util.CloseLocalRegions = aurorastartupConfig.GetBoolean("CloseLocalAgents", true); m_DefaultObjectName = aurorastartupConfig.GetString("DefaultObjectName", m_DefaultObjectName); CheckForObjectCulling = aurorastartupConfig.GetBoolean("CheckForObjectCulling", CheckForObjectCulling); SetObjectCapacity(aurorastartupConfig.GetInt("ObjectCapacity", ObjectCapacity)); } IConfig regionConfig = m_config.Configs[this.RegionInfo.RegionName]; if (regionConfig != null) { #region Block Child Agents config // [{0,2}, {1, 2}, {2,2}] // [{0,1}, {1, 1}, {2,1}] 1,1 is the current region // [{0,0}, {1, 0}, {2,0}] //SouthWest DirectionsToBlockChildAgents[0, 0] = regionConfig.GetBoolean("BlockChildAgentsSouthWest", false); //South DirectionsToBlockChildAgents[1, 0] = regionConfig.GetBoolean("BlockChildAgentsSouth", false); //SouthEast DirectionsToBlockChildAgents[2, 0] = regionConfig.GetBoolean("BlockChildAgentsSouthEast", false); //West DirectionsToBlockChildAgents[0, 1] = regionConfig.GetBoolean("BlockChildAgentsWest", false); //East DirectionsToBlockChildAgents[2, 1] = regionConfig.GetBoolean("BlockChildAgentsEast", false); //NorthWest DirectionsToBlockChildAgents[0, 2] = regionConfig.GetBoolean("BlockChildAgentsNorthWest", false); //North DirectionsToBlockChildAgents[1, 2] = regionConfig.GetBoolean("BlockChildAgentsNorth", false); //NorthEast DirectionsToBlockChildAgents[2, 2] = regionConfig.GetBoolean("BlockChildAgentsNorthEast", false); #endregion } // Region config overrides global config // IConfig startupConfig = m_config.Configs["Startup"]; //Animation states IConfig animationConfig = m_config.Configs["Animations"]; if (animationConfig != null) { m_UseNewStyleMovement = animationConfig.GetBoolean("enableNewMovement", m_UseNewStyleMovement); m_usePreJump = animationConfig.GetBoolean("enableprejump", m_usePreJump); m_useSplatAnimation = animationConfig.GetBoolean("enableSplatAnimation", m_useSplatAnimation); } m_seeIntoRegionFromNeighbor = RegionInfo.SeeIntoThisSimFromNeighbor; m_trustBinaries = RegionInfo.TrustBinariesFromForeignSims; m_allowScriptCrossings = RegionInfo.AllowScriptCrossing; IConfig persistanceConfig = m_config.Configs["Persistance"]; if (persistanceConfig != null) { m_dontPersistBefore = persistanceConfig.GetLong("MinimumTimeBeforePersistenceConsidered", DEFAULT_MIN_TIME_FOR_PERSISTENCE); m_dontPersistBefore *= 10000000; m_persistAfter = persistanceConfig.GetLong("MaximumTimeBeforePersistenceConsidered", DEFAULT_MAX_TIME_FOR_PERSISTENCE); m_persistAfter *= 10000000; } else { m_dontPersistBefore = DEFAULT_MIN_TIME_FOR_PERSISTENCE; m_dontPersistBefore *= 10000000; m_persistAfter = DEFAULT_MAX_TIME_FOR_PERSISTENCE; m_persistAfter *= 10000000; } IConfig scriptEngineConfig = m_config.Configs["ScriptEngines"]; if (scriptEngineConfig != null) m_defaultScriptEngine = scriptEngineConfig.GetString("DefaultScriptEngine", "AuroraDotNetEngine"); IConfig packetConfig = m_config.Configs["PacketPool"]; if (packetConfig != null) { PacketPool.Instance.RecyclePackets = packetConfig.GetBoolean("RecyclePackets", true); PacketPool.Instance.RecycleDataBlocks = packetConfig.GetBoolean("RecycleDataBlocks", true); } m_strictAccessControl = startupConfig.GetBoolean("StrictAccessControl", m_strictAccessControl); } catch { m_log.Warn("[SCENE]: Failed to load StartupConfig"); } #endregion Region Config #region Interest Management if (m_config != null) { IConfig interestConfig = m_config.Configs["InterestManagement"]; if (interestConfig != null) { string update_prioritization_scheme = interestConfig.GetString("UpdatePrioritizationScheme", "Time").Trim().ToLower(); try { m_priorityScheme = (UpdatePrioritizationSchemes)Enum.Parse(typeof(UpdatePrioritizationSchemes), update_prioritization_scheme, true); } catch (Exception) { m_log.Warn("[PRIORITIZER]: UpdatePrioritizationScheme was not recognized, setting to default prioritizer Time"); m_priorityScheme = UpdatePrioritizationSchemes.Time; } m_reprioritizationEnabled = interestConfig.GetBoolean("ReprioritizationEnabled", true); m_reprioritizationInterval = interestConfig.GetDouble("ReprioritizationInterval", 5000.0); m_rootReprioritizationDistance = interestConfig.GetDouble("RootReprioritizationDistance", 10.0); m_childReprioritizationDistance = interestConfig.GetDouble("ChildReprioritizationDistance", 20.0); } } //m_log.Info("[SCENE]: Using the " + m_priorityScheme + " prioritization scheme"); #endregion Interest Management #region Startup Complete config EventManager.OnAddToStartupQueue += AddToStartupQueue; EventManager.OnFinishedStartup += FinishedStartup; EventManager.OnStartupComplete += StartupComplete; AddToStartupQueue("Startup"); #endregion LoadWorldMap(); //Add stats handlers MainServer.Instance.AddStreamHandler(new RegionStatsHandler(RegionInfo)); }
/// <summary> /// Mock constructor for scene group persistency unit tests. /// SceneObjectGroup RegionId property is delegated to Scene. /// </summary> /// <param name="regInfo"></param> public Scene(RegionInfo regInfo) { BordersLocked = true; Border northBorder = new Border(); northBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize - 1); //<--- northBorder.CrossDirection = Cardinals.N; NorthBorders.Add(northBorder); Border southBorder = new Border(); southBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue,1); //---> southBorder.CrossDirection = Cardinals.S; SouthBorders.Add(southBorder); Border eastBorder = new Border(); eastBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue, (int)Constants.RegionSize - 1); //<--- eastBorder.CrossDirection = Cardinals.E; EastBorders.Add(eastBorder); Border westBorder = new Border(); westBorder.BorderLine = new Vector3(float.MinValue, float.MaxValue,1); //---> westBorder.CrossDirection = Cardinals.W; WestBorders.Add(westBorder); BordersLocked = false; m_regInfo = regInfo; m_eventManager = new EventManager(); AuroraEventManager = new AuroraEventManager(); m_lastUpdate = Util.EnvironmentTickCount(); }
public Scene(RegionInfo regInfo, AgentCircuitManager authen, SceneManager manager) : this(regInfo) { m_sceneManager = manager; m_config = manager.ConfigSource; m_authenticateHandler = authen; m_AuroraEventManager = new AuroraEventManager(); m_eventManager = new EventManager(); m_permissions = new ScenePermissions(this); // Load region settings m_regInfo.RegionSettings = m_sceneManager.SimulationDataService.LoadRegionSettings(m_regInfo.RegionID); m_sceneGraph = new SceneGraph(this, m_regInfo); #region Region Config IConfig aurorastartupConfig = m_config.Configs["AuroraStartup"]; if (aurorastartupConfig != null) { MaxLowValue = aurorastartupConfig.GetFloat("MaxLowValue", -1000); m_DefaultObjectName = aurorastartupConfig.GetString("DefaultObjectName", m_DefaultObjectName); CheckForObjectCulling = aurorastartupConfig.GetBoolean("CheckForObjectCulling", CheckForObjectCulling); //Region specific is still honored here, the RegionInfo checks for it RegionInfo.ObjectCapacity = aurorastartupConfig.GetInt("ObjectCapacity", 80000); } //Animation states IConfig animationConfig = m_config.Configs["Animations"]; if (animationConfig != null) { m_usePreJump = animationConfig.GetBoolean("enableprejump", m_usePreJump); m_useSplatAnimation = animationConfig.GetBoolean("enableSplatAnimation", m_useSplatAnimation); } IConfig packetConfig = m_config.Configs["PacketPool"]; if (packetConfig != null) { PacketPool.Instance.RecyclePackets = packetConfig.GetBoolean("RecyclePackets", true); PacketPool.Instance.RecycleDataBlocks = packetConfig.GetBoolean("RecycleDataBlocks", true); } #endregion Region Config m_basesimfps = 45f; m_basesimphysfps = 45f; m_basesimphysfps = Config.Configs["Physics"].GetFloat("BasePhysicsFPS", 45f); if (m_basesimphysfps > 45f) m_basesimphysfps = 45f; m_basesimfps = Config.Configs["Protection"].GetFloat("BaseRateFramesPerSecond", 45f); if (m_basesimfps > 45f) m_basesimfps = 45f; if (m_basesimphysfps > m_basesimfps) m_basesimphysfps = m_basesimfps; m_updatetimespan = 1 / m_basesimfps; m_physicstimespan = 1 / m_basesimphysfps; #region Startup Complete config EventManager.OnAddToStartupQueue += AddToStartupQueue; EventManager.OnModuleFinishedStartup += FinishedStartup; EventManager.OnStartupComplete += StartupComplete; AddToStartupQueue("Startup"); #endregion }