123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- using System;
- using libsecondlife;
- using libsecondlife.Packets;
- using System.Collections.Generic;
- using System.Text;
- using PhysicsSystem;
- namespace OpenSim.world
- {
- public class World
- {
- public Dictionary<libsecondlife.LLUUID, Entity> Entities;
- public float[] LandMap;
- public ScriptEngine Scripts;
- public TerrainDecode terrainengine = new TerrainDecode();
- public uint _localNumber=0;
- private PhysicsScene phyScene;
- private float timeStep= 0.1f;
-
- private Random Rand = new Random();
- public World()
- {
- Console.WriteLine("World.cs - creating new entitities instance");
- Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
- Console.WriteLine("World.cs - creating LandMap");
- terrainengine = new TerrainDecode();
- LandMap = new float[65536];
- for(int i =0; i < 65536; i++) {
- LandMap[i] = 21.4989f;
- }
-
- Console.WriteLine("World.cs - Creating script engine instance");
- // Initialise this only after the world has loaded
- Scripts = new ScriptEngine(this);
- }
-
- public PhysicsScene PhysScene
- {
- set
- {
- this.phyScene = value;
- }
- }
-
- public void Update()
- {
- if(this.phyScene.IsThreaded)
- {
- this.phyScene.GetResults();
-
- }
-
- foreach (libsecondlife.LLUUID UUID in Entities.Keys)
- {
- Entities[UUID].addFroces();
- }
-
- this.phyScene.Simulate(timeStep);
-
- foreach (libsecondlife.LLUUID UUID in Entities.Keys)
- {
- Entities[UUID].update();
- }
- }
- public void SendLayerData(OpenSimClient RemoteClient) {
- for(int x=0; x<16; x=x+4) for(int y=0; y<16; y++){
- Packet layerpack=this.terrainengine.CreateLayerPacket(LandMap, x,y,x+4,y+1);
- RemoteClient.OutPacket(layerpack);
- }
- }
- public void AddViewerAgent(OpenSimClient AgentClient) {
- Console.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
- Avatar NewAvatar = new Avatar(AgentClient);
- Console.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world");
- this.Entities.Add(AgentClient.AgentID, NewAvatar);
- Console.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake ");
- NewAvatar.SendRegionHandshake(this);
-
- NewAvatar.PhysActor = this.phyScene.AddAvatar(new PhysicsVector(NewAvatar.position.X, NewAvatar.position.Y, NewAvatar.position.Z));
- //this.Update(); // will work for now, but needs to be optimised so we don't update everything in the sim for each new user
- }
- public bool Backup() {
- /* TODO: Save the current world entities state. */
- return false;
- }
- }
- }
|