Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        /// <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);
            }
        }
Exemple #5
0
        /// <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);
            }
        }
Exemple #6
0
        /// <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();
        }
Exemple #7
0
        /// <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);
            }
        }
Exemple #8
0
 public GameWorld(int width, int height)
 {
     Objects = new GameObjectCollection(this);
     World   = new PhysicWorld();
     Size    = new Point(width, height);
 }
Exemple #9
0
 public GameWorld()
 {
     Objects = new GameObjectCollection(this);
     World   = new PhysicWorld();
     Size    = Point.Zero;
 }
Exemple #10
0
        /// <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
        }
Exemple #11
0
 protected override void UpdateWorld(Microsoft.Xna.Framework.GameTime gt)
 {
     PhysicWorld.iUpdate(gt);
 }