public override void AddObject(IObject obj, bool initializeMaterial = false) { if (obj == null) { ActiveLogger.LogMessage("Cant add null obj", LogLevel.RecoverableError); return; } EntityMapper.getInstance().AddEntity(obj); PhysicWorld.AddObject(obj.PhysicObject); obj.PhysicObject.ObjectOwner = obj; Objects.Add(obj); }
/// <summary> /// Adds an object to the world. /// </summary> /// <param name="obj">The obj.</param> /// <returns></returns> public virtual void AddObject(I2DObject obj) { if (obj == null) { ActiveLogger.LogMessage("Cant add null obj", LogLevel.RecoverableError); return; } EntityMapper.getInstance().AddEntity(obj); obj.Material.Initialization(GraphicsInfo, GraphicsFactory, obj); PhysicWorld.AddObject(obj.PhysicObject); obj.PhysicObject.Owner = obj; Objects.Add(obj); culler.onObjectAdded(obj); }
public override void RemoveObject(IObject obj) { if (obj == null) { ActiveLogger.LogMessage("Cant remove with null obj", LogLevel.RecoverableError); return; } obj.RemoveThisObject(); EntityMapper.getInstance().RemoveEntity(obj); PhysicWorld.RemoveObject(obj.PhysicObject); bool resp = Objects.Remove(obj); if (!resp) { ActiveLogger.LogMessage("Cant remove (not found) obj: " + obj.Name, LogLevel.RecoverableError); } }
/// <summary> /// Removes the trigger. /// </summary> /// <param name="trigger">The trigger.</param> public virtual void RemoveTrigger(ITrigger trigger) { if (trigger == null) { ActiveLogger.LogMessage("Cant Remove Null Trigger", LogLevel.RecoverableError); return; } bool resp = Triggers.Remove(trigger); if (!resp) { ActiveLogger.LogMessage("Trigger not found: " + trigger.Name, LogLevel.Warning); } if (trigger.GhostObject != null) { PhysicWorld.RemoveObject(trigger.GhostObject); } }
/// <summary> /// Adds the trigger. /// </summary> /// <param name="trigger">The trigger.</param> public virtual void AddTrigger(ITrigger trigger) { if (trigger == null) { ActiveLogger.LogMessage("Cant Add null Trigger", LogLevel.RecoverableError); return; } if (String.IsNullOrEmpty(trigger.Name)) { ActiveLogger.LogMessage("Trigger with no Name", LogLevel.Warning); } Triggers.Add(trigger); if (trigger.GhostObject != null) { PhysicWorld.AddObject(trigger.GhostObject); } }
/// <summary> /// Adds an object to the world. /// </summary> /// <param name="obj">The obj.</param> /// <param name="InitMaterial">if set to <c>true</c> [init material].</param> public virtual void AddObject(IObject obj, bool InitMaterial = true) { if (obj == null) { ActiveLogger.LogMessage("Cant add null obj", LogLevel.RecoverableError); return; } EntityMapper.getInstance().AddEntity(obj); PhysicWorld.AddObject(obj.PhysicObject); obj.PhysicObject.ObjectOwner = obj; Objects.Add(obj); if (InitMaterial) { obj.Material.Initialization(graphicsInfo, graphicFactory, obj); } Culler.onObjectAdded(obj); obj.FireOnBeingAdd(this); obj.afterAddedToTheWorld(); }
/// <summary> /// Updates the world. /// </summary> /// <param name="gt">The gt.</param> protected virtual void UpdateWorld(GameTime gt) { camera2D.Update(gt); PhysicWorld.iUpdate(gt); I2DObject[] toPass = Objects.ToArray(); for (int i = 0; i < toPass.Count(); i++) { toPass[i].iUpdateObject(gt); } if (ParticleManager != null) { ParticleManager.iUpdate2D(gt, camera2D.View, camera2D.SimProjection); } foreach (ISoundEmitter2D item in SoundEmiters2D) { item.iUpdate(gt, camera2D); } }
public GameWorld(int width, int height) { Objects = new GameObjectCollection(this); World = new PhysicWorld(); Size = new Point(width, height); }
public GameWorld() { Objects = new GameObjectCollection(this); World = new PhysicWorld(); Size = Point.Zero; }
/// <summary> /// Updates the world. /// </summary> /// <param name="gt">The gt.</param> protected virtual void UpdateWorld(GameTime gt) { #if WINDOWS if (!multThreading) { #endif PhysicWorld.iUpdate(gt); Debug.Assert(CameraManager.ActiveCamera != null); CameraManager.ActiveCamera.iUpdate(gt); IObject[] toPass = Objects.ToArray(); for (int i = 0; i < toPass.Count(); i++) { toPass[i].iUpdateObject(gt, CameraManager.ActiveCamera, this); } if (ParticleManager != null) { ParticleManager.iUpdate3D(gt, CameraManager.ActiveCamera.View, CameraManager.ActiveCamera.Projection, CameraManager.ActiveCamera.Position); } foreach (ISoundEmitter3D item in SoundEmiters3D) { item.iUpdate(gt, CameraManager.ActiveCamera); } #if WINDOWS } else { Debug.Assert(CameraManager.ActiveCamera != null); CameraManager.ActiveCamera.iUpdate(gt); tasks.Clear(); float simultaneous = Objects.Count <= Environment.ProcessorCount * 2 ? Objects.Count : Environment.ProcessorCount * 2; int perThread = (int)Math.Ceiling(((float)Objects.Count) / simultaneous); IObject[] toPass = Objects.ToArray(); int num = Objects.Count - 1; ILight[] lights = Lights.ToArray(); for (int j = 0; j < simultaneous; j++) { int initial = num; tasks.Add(factory.StartNew( () => { for (int i = initial; i > initial - perThread && i >= 0; i--) { toPass[i].iUpdateObject(gt, CameraManager.ActiveCamera, this); } } )); num -= perThread; } PhysicWorld.iUpdate(gt); if (ParticleManager != null) { ParticleManager.iUpdate3D(gt, CameraManager.ActiveCamera.View, CameraManager.ActiveCamera.Projection, CameraManager.ActiveCamera.Position); } if (multThreading) { Task.WaitAll(tasks.ToArray()); } foreach (ISoundEmitter3D item in SoundEmiters3D) { item.iUpdate(gt, CameraManager.ActiveCamera); } } #endif }
protected override void UpdateWorld(Microsoft.Xna.Framework.GameTime gt) { PhysicWorld.iUpdate(gt); }