public void Update(Camera camera, Character character)
        {
            AquaticPhysics.Instance.DynamicsWorld.StepSimulation(GameModel.GlobalElapsedTime);

            var toUpdate = ToUpdate(camera.Position);

            renderedOrigins = toUpdate.ConvertAll(chunk => chunk.Origin).FindAll(v3 => v3.Y / (Chunk.DefaultSize.Y) == Chunk.seaFloor);

            var elements   = new List <Element>();
            var updateCube = new Cube(camera.Position, (int)Math.Floor((UpdateRadius + 1) * Chunk.DefaultSize.X));

            var allElements = new List <Element>();

            elements.AddRange(elementsInCube(this.entities, updateCube));
            //elements.AddRange(elementsInCube(toUpdate.SelectMany(chunk => chunk.Elements).ToList(), updateCube));

            elements.ForEach(element => element.Update(camera));
            toUpdate.ForEach(chunk => chunk.Update(camera));

            elementsToUpdate = elements;

            shark.Update(camera, character);

            this.elementsUpdated = elements.Count;

            allElements.AddRange(elements);
            allElements.AddRange(elementsInCube(toUpdate.SelectMany(chunk => chunk.Elements).ToList(), updateCube));

            SelectableElement = GetSelectableElement(camera, allElements);
        }
        public void Remove(Element selectableElement)
        {
            entities.Remove(selectableElement);

            foreach (var chunk in chunks.Values)
            {
                chunk.Remove(selectableElement);
            }
        }
        private IItem manageSelectableElement(Element element)
        {
            if (element == null)
            {
                dialogName = dialogDescription = "";
                cursor     = aim;
                return(null);
            }

            cursor = hand;
            IItem item = null;

            if (element.item != null)
            {
                if (element.item.Name != dialogName)
                {
                    dialogBox.Open();
                }
                dialogName        = element.item.Name;
                dialogDescription = element.item.Description;
            }

            if (element.GetType() == typeof(Ship))
            {
                if ("Ship" != dialogName)
                {
                    dialogBox.Open();
                }
                dialogName        = "Ship";
                dialogDescription = "Enter to the ship";
            }

            element.Selectable = true;

            if (aimFired)
            {
                if (element.GetType() == typeof(Ship))
                {
                    onGetIntoShipCallback(GameState);
                }
                else
                {
                    var toPlay = element.GetType() == typeof(Coral) ? SoundManager.Coral : SoundManager.Bubble;
                    SoundManager.Play(toPlay);
                    World.Remove(element);
                    item     = element.item;
                    aimFired = false;
                }
            }

            return(item);
        }