/// <summary>
        /// Creates Power Upp component and adds it to an entity
        /// </summary>
        /// <param name="id"></param>
        public void OnPowerUpPicup(int id)
        {
            BallOfSpikesPowerUpComponent temp = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(id);

            if (temp == null)
            {
                ComponentManager             test    = ComponentManager.Instance;
                BallOfSpikesPowerUpComponent ball    = new BallOfSpikesPowerUpComponent(5);
                DrawableComponent            newDraw = test.GetEntityComponent <DrawableComponent>(id);
                AnimationComponent           anima   = test.GetEntityComponent <AnimationComponent>(id);
                ball.prevTexture = newDraw.texture;
                newDraw.texture  = ball.SpikeTexture;
                if (anima != null)
                {
                    ball.anime = anima;
                    ComponentManager.Instance.RemoveComponentFromEntity(id, anima);
                }
                test.AddComponentToEntity(id, ball);


                CollisionRectangleComponent rec = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(id);
                PositionComponent           pos = ComponentManager.Instance.GetEntityComponent <PositionComponent>(id);
                rec.CollisionRec   = new Rectangle((int)pos.position.X, (int)pos.position.Y, newDraw.texture.Width, newDraw.texture.Height);
                rec.CollisionRec.X = (int)pos.position.X;
                rec.CollisionRec.Y = (int)pos.position.Y;

                rec.CollisionRec.Width  = newDraw.texture.Width;
                rec.CollisionRec.Height = newDraw.texture.Height;
            }
            else
            {
                temp.lifeTime += 10;
            }
        }
        /// <summary>
        /// Updates the collision rectangles of all collision components
        /// </summary>
        private void updatecolRec()
        {
            List <int> CollisionComp = ComponentManager.Instance.GetAllEntitiesWithComponentType <CollisionComponent>();

            if (CollisionComp != null)
            {
                foreach (var item in CollisionComp)
                {
                    CollisionRectangleComponent rec  = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(item);
                    PositionComponent           pos  = ComponentManager.Instance.GetEntityComponent <PositionComponent>(item);
                    DrawableComponent           draw = ComponentManager.Instance.GetEntityComponent <DrawableComponent>(item);
                    AnimationComponent          ani  = ComponentManager.Instance.GetEntityComponent <AnimationComponent>(item);
                    if (ani != null && draw != null)
                    {
                        rec.CollisionRec = new Rectangle((int)pos.position.X, (int)pos.position.Y, ani.sourceRectangle.Width, ani.sourceRectangle.Height);
                    }
                    if (draw != null && ani == null)
                    {
                        rec.CollisionRec.X      = (int)pos.position.X;
                        rec.CollisionRec.Y      = (int)pos.position.Y;
                        rec.CollisionRec.Width  = draw.texture.Width;
                        rec.CollisionRec.Height = draw.texture.Height;
                    }
                    else
                    {
                        rec.CollisionRec.X = (int)pos.position.X;
                        rec.CollisionRec.Y = (int)pos.position.Y;
                    }
                }
            }
        }
        /// <summary>
        /// Creates an new Player with Controlls
        /// </summary>
        /// <param name="pixlePer"> True if pixelPerfect shall be used </param>
        /// <param name="GamePade"> True if GamePad the player uses a gamepad </param>
        /// <param name="PadJump"> Key binding to gamePad </param>
        /// <param name="Jump"> key binding to keybord </param>
        /// <param name="position"> Player start Position </param>
        /// <param name="name"> The name off the player</param>
        /// <param name="dir"> The players starting direction</param>
        /// <param name="index">  Playerindex For GamePad </param>
        /// <returns></returns>
        public int CreatePlayer(bool pixlePer, bool GamePade, Buttons PadJump, Keys Jump, Vector2 position, string name, Direction dir, PlayerIndex index, Color colour)
        {
            SpriteEffects     flip;
            GamePadComponent  gam;
            KeyBoardComponent kcb;
            int id = ComponentManager.Instance.CreateID();

            if (dir == Direction.Left)
            {
                flip = SpriteEffects.FlipHorizontally;
            }
            else
            {
                flip = SpriteEffects.None;
            }

            if (GamePade == true)
            {
                gam = new GamePadComponent(index);
                gam.gamepadActions.Add(ActionsEnum.Jump, PadJump);
                ComponentManager.Instance.AddComponentToEntity(id, gam);
            }
            else
            {
                kcb = new KeyBoardComponent();
                kcb.keyBoardActions.Add(ActionsEnum.Jump, Jump);
                ComponentManager.Instance.AddComponentToEntity(id, kcb);
            }
            DirectionComponent          dc   = new DirectionComponent(dir);
            DrawableComponent           comp = new DrawableComponent(Game.Instance.GetContent <Texture2D>("Pic/kanin1"), flip);
            PositionComponent           pos  = new PositionComponent(position);
            VelocityComponent           vel  = new VelocityComponent(new Vector2(200F, 0), 50F);
            JumpComponent               jump = new JumpComponent(300F, 200F);
            CollisionRectangleComponent CRC  = new CollisionRectangleComponent(new Rectangle((int)pos.position.X, (int)pos.position.Y, comp.texture.Width, comp.texture.Height));
            CollisionComponent          CC   = new CollisionComponent(pixlePer);
            PlayerComponent             pc   = new PlayerComponent(name);
            DrawableTextComponent       dtc  = new DrawableTextComponent(name, Color.Black, Game.Instance.GetContent <SpriteFont>("Fonts/TestFont"));
            HUDComponent    hudc             = new HUDComponent(Game.Instance.GetContent <Texture2D>("Pic/PowerUp"), new Vector2(pos.position.X, pos.position.Y));
            HUDComponent    hudc2            = new HUDComponent(Game.Instance.GetContent <Texture2D>("Pic/PowerUp"), Vector2.One);
            HealthComponent hc = new HealthComponent(3, false);

            //AnimationComponent ani = new AnimationComponent(100, 114, comp.texture.Width, comp.texture.Height, 0.2);

            comp.colour = colour;

            ComponentManager.Instance.AddComponentToEntity(id, vel);
            ComponentManager.Instance.AddComponentToEntity(id, comp);
            ComponentManager.Instance.AddComponentToEntity(id, pos);
            ComponentManager.Instance.AddComponentToEntity(id, CRC);
            ComponentManager.Instance.AddComponentToEntity(id, CC);
            ComponentManager.Instance.AddComponentToEntity(id, pc);
            ComponentManager.Instance.AddComponentToEntity(id, dtc);
            ComponentManager.Instance.AddComponentToEntity(id, hudc);
            ComponentManager.Instance.AddComponentToEntity(id, hc);
            //ComponentManager.Instance.AddComponentToEntity(id, ani);
            ComponentManager.Instance.AddComponentToEntity(id, dc);
            ComponentManager.Instance.AddComponentToEntity(id, jump);
            return(id);
        }
        /// <summary>
        /// Handles player versus platform collision
        /// </summary>
        /// <param name="Player"> Id of the player entity </param>
        /// <param name="Platform"> Id of the platform entity </param>
        private void PlayerVsPlatformColl(int Player, int Platform, GameTime gameTime)
        {
            PlayerComponent             playComp = ComponentManager.Instance.GetEntityComponent <PlayerComponent>(Player);
            DirectionComponent          dc       = ComponentManager.Instance.GetEntityComponent <DirectionComponent>(Player);
            VelocityComponent           pvc      = ComponentManager.Instance.GetEntityComponent <VelocityComponent>(Player);
            PositionComponent           ppc      = ComponentManager.Instance.GetEntityComponent <PositionComponent>(Player);
            CollisionRectangleComponent pcrc     = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(Player);
            PlatformComponent           pc       = ComponentManager.Instance.GetEntityComponent <PlatformComponent>(Platform);
            HealthComponent             hc       = ComponentManager.Instance.GetEntityComponent <HealthComponent>(Player);

            if (!playComp.isFalling)
            {
                if (pcrc.CollisionRec.Intersects(pc.TopRec)) // @TODO tänk om gällande pixlePerfect, kanske
                {
                    //@todo hur fan ska man ta bort n om spelarn hoppar ifrån eller blir nerputtad
                    if (!ComponentManager.Instance.CheckIfEntityHasComponent <TTLComponent>(Player))
                    {
                        TTLComponent ttl = new TTLComponent(5f);
                        ComponentManager.Instance.AddComponentToEntity(Player, ttl);
                    }
                    else
                    {
                        TTLComponent ttl = ComponentManager.Instance.GetEntityComponent <TTLComponent>(Player);
                        if (ttl.curTime >= ttl.maxTime)
                        {
                            playComp.isFalling = true;
                            //hc.health -= 1;
                            ComponentManager.Instance.RemoveComponentFromEntity(Player, ttl);
                        }
                    }

                    changeDir(dc);
                    if (dc.directio != Direction.Still)
                    {
                        dc.preDir   = dc.directio;
                        dc.directio = Direction.Still;
                    }
                    pvc.velocity.Y  = 0;
                    pvc.velocity.Y -= 500 * (float)gameTime.ElapsedGameTime.TotalSeconds;
                }
                else
                {
                    if (dc.directio != Direction.Still)
                    {
                        changeDir(dc);
                        dc.preDir   = dc.directio;
                        dc.directio = Direction.Still;
                    }
                    pvc.velocity.Y     = 0;
                    pvc.velocity.Y    += 500 * (float)gameTime.ElapsedGameTime.TotalSeconds;
                    playComp.isFalling = true;

                    ComponentManager.Instance.AddComponentToEntity(Player, new SoundEffectComponent("pfhit"));
                    //hc.health -= 1;
                }
            }
        }
        /// <summary>
        /// Creates a border rectangle
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="side"></param>
        /// <returns></returns>
        public int CreateBorderRecs(Vector2 pos, int width, int height, Wall side)
        {
            PositionComponent           PC  = new PositionComponent(pos);
            CollisionRectangleComponent CRC = new CollisionRectangleComponent(new Rectangle((int)pos.X, (int)pos.Y, width, height));
            CollisionComponent          CC  = new CollisionComponent(false);
            WallComponent wc = new WallComponent(side);
            int           id = ComponentManager.Instance.CreateID();

            ComponentManager.Instance.AddComponentToEntity(id, PC);
            ComponentManager.Instance.AddComponentToEntity(id, CRC);
            ComponentManager.Instance.AddComponentToEntity(id, CC);
            ComponentManager.Instance.AddComponentToEntity(id, wc);

            return(id);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dir"></param>
        /// <param name="position"></param>
        /// <param name="pixlePer"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public int CreateAIPlayer(Direction dir, Vector2 position, bool pixlePer, string name, Color colour)
        {
            SpriteEffects flip;

            if (dir == Direction.Left)
            {
                flip = SpriteEffects.FlipHorizontally;
            }
            else
            {
                flip = SpriteEffects.None;
            }

            DirectionComponent          dc   = new DirectionComponent(dir);
            DrawableComponent           comp = new DrawableComponent(Game.Instance.GetContent <Texture2D>("Pic/Helmutsh"), flip);
            PositionComponent           pos  = new PositionComponent(position);
            VelocityComponent           vel  = new VelocityComponent(new Vector2(200F, 0), 50F);
            JumpComponent               jump = new JumpComponent(300F, 50F);
            CollisionRectangleComponent CRC  = new CollisionRectangleComponent(new Rectangle((int)pos.position.X, (int)pos.position.Y, comp.texture.Width, comp.texture.Height));
            CollisionComponent          CC   = new CollisionComponent(pixlePer);
            DrawableTextComponent       dtc  = new DrawableTextComponent(name, Color.Yellow, Game.Instance.GetContent <SpriteFont>("Fonts/NewTestFont"));
            HUDComponent       hudc          = new HUDComponent(Game.Instance.GetContent <Texture2D>("Pic/PowerUp"), new Vector2(pos.position.X, pos.position.Y));
            HUDComponent       hudc2         = new HUDComponent(Game.Instance.GetContent <Texture2D>("Pic/PowerUp"), Vector2.One);
            HealthComponent    hc            = new HealthComponent(3, false);
            AnimationComponent ani           = new AnimationComponent(75, 75, comp.texture.Width, comp.texture.Height, 0.2);
            AIComponent        ai            = new AIComponent();
            PlayerComponent    play          = new PlayerComponent(name);

            comp.colour = colour;

            int id = ComponentManager.Instance.CreateID();

            ComponentManager.Instance.AddComponentToEntity(id, vel);
            ComponentManager.Instance.AddComponentToEntity(id, comp);
            ComponentManager.Instance.AddComponentToEntity(id, pos);
            ComponentManager.Instance.AddComponentToEntity(id, CRC);
            ComponentManager.Instance.AddComponentToEntity(id, CC);
            ComponentManager.Instance.AddComponentToEntity(id, dtc);
            ComponentManager.Instance.AddComponentToEntity(id, hudc);
            ComponentManager.Instance.AddComponentToEntity(id, hc);
            ComponentManager.Instance.AddComponentToEntity(id, ani);
            ComponentManager.Instance.AddComponentToEntity(id, dc);
            ComponentManager.Instance.AddComponentToEntity(id, jump);
            ComponentManager.Instance.AddComponentToEntity(id, play);
            ComponentManager.Instance.AddComponentToEntity(id, ai);
            return(id);
        }
        /// <summary>
        /// Creates an new PowerUpp
        /// </summary>
        /// <param name="position"></param>
        /// <returns></returns>
        public int CreateTestPowerUp(Vector2 position)
        {
            Random                      rand     = new Random();
            PositionComponent           Pc       = new PositionComponent(position);
            PowerUppComponent           power    = new PowerUppComponent(rand.Next(1, 3));
            DrawableComponent           powerupp = new DrawableComponent(Game.Instance.GetContent <Texture2D>("Pic/Powerupbox"), SpriteEffects.None);
            CollisionRectangleComponent CRC      = new CollisionRectangleComponent(new Rectangle((int)position.X, (int)position.Y, powerupp.texture.Width, powerupp.texture.Height));
            CollisionComponent          CC       = new CollisionComponent(true);
            int id = ComponentManager.Instance.CreateID();

            ComponentManager.Instance.AddComponentToEntity(id, CRC);
            ComponentManager.Instance.AddComponentToEntity(id, CC);
            ComponentManager.Instance.AddComponentToEntity(id, Pc);
            ComponentManager.Instance.AddComponentToEntity(id, power);
            ComponentManager.Instance.AddComponentToEntity(id, powerupp);
            return(id);
        }
        /// <summary>
        /// Creates a platform at the specified position with the specified lenght, width and Texture;
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="texture"></param>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <returns> the id of the created platform identity </returns>
        public int CreatePlatform(Vector2 pos, string texture, int width, int height)
        {
            PositionComponent           Pc  = new PositionComponent(pos);
            DrawableComponent           DC  = new DrawableComponent(Game.Instance.GetContent <Texture2D>("Pic/" + texture), SpriteEffects.None);
            CollisionRectangleComponent CRC = new CollisionRectangleComponent(new Rectangle((int)pos.X, (int)pos.Y, width, height));
            CollisionComponent          CC  = new CollisionComponent(false);
            PlatformComponent           Plc = new PlatformComponent(pos, width, height);

            Plc.RedoRecs(pos, DC.texture.Width, DC.texture.Height);

            int id = ComponentManager.Instance.CreateID();


            ComponentManager.Instance.AddComponentToEntity(id, CRC);
            ComponentManager.Instance.AddComponentToEntity(id, CC);
            ComponentManager.Instance.AddComponentToEntity(id, Pc);
            ComponentManager.Instance.AddComponentToEntity(id, DC);
            ComponentManager.Instance.AddComponentToEntity(id, Plc);
            return(id);
        }
        public int CreateChangeCube(Vector2 position, string texture, int width, int height)
        {
            int id = ComponentManager.Instance.CreateID();
            ChangeCubeComponent         cdc    = new ChangeCubeComponent();
            PositionComponent           pos    = new PositionComponent(position);
            CollisionComponent          col    = new CollisionComponent(false);
            CollisionRectangleComponent colRec = new CollisionRectangleComponent(new Rectangle((int)position.X, (int)position.Y, width, height));
            DrawableComponent           draw   = new DrawableComponent(Game.Instance.GetContent <Texture2D>(texture), SpriteEffects.None);
            AnimationComponent          ani    = new AnimationComponent(50, 50, draw.texture.Width, draw.texture.Height, 0.08f);

            ani.oneTime = true;

            ComponentManager.Instance.AddComponentToEntity(id, cdc);
            ComponentManager.Instance.AddComponentToEntity(id, pos);
            ComponentManager.Instance.AddComponentToEntity(id, col);
            ComponentManager.Instance.AddComponentToEntity(id, colRec);
            ComponentManager.Instance.AddComponentToEntity(id, draw);
            ComponentManager.Instance.AddComponentToEntity(id, ani);

            return(id);
        }
        /// <summary>
        /// check if two entities has collided with each other
        /// using bounding rectangle
        /// </summary>
        /// <param name="entity1"> Id of entity 1 </param>
        /// <param name="entity2"> Id of entity 2 </param>
        /// <returns>
        /// true if bounding rectangle collision occured
        /// and false if no collision or physics is not enabled
        /// </returns>
        private bool RectangleCollision(int entity1, int entity2)
        {
            CollisionRectangleComponent recA = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(entity1);
            CollisionRectangleComponent recB = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(entity2);

            if (recA == null || recB == null)
            {
                return(false);
            }

            Rectangle rectangleA = recA.CollisionRec;
            Rectangle rectangleB = recB.CollisionRec;

            if (rectangleA.Intersects(rectangleB))
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        /// <summary>
        /// Handles Player versus Wall collision
        /// </summary>
        /// <param name="Player"> Id of the player entity </param>
        /// <param name="WallEnt"> Id of the wall entity </param>
        private void PlayerVsWallColl(int Player, int WallEnt, GameTime gameTime)
        {
            PlayerComponent             playerComp = ComponentManager.Instance.GetEntityComponent <PlayerComponent>(Player);
            VelocityComponent           pvc        = ComponentManager.Instance.GetEntityComponent <VelocityComponent>(Player);
            DirectionComponent          pdc        = ComponentManager.Instance.GetEntityComponent <DirectionComponent>(Player);
            CollisionRectangleComponent crc1       = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(WallEnt);
            CollisionRectangleComponent crc2       = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(Player);
            PositionComponent           pc         = ComponentManager.Instance.GetEntityComponent <PositionComponent>(Player);
            PositionComponent           pcwall     = ComponentManager.Instance.GetEntityComponent <PositionComponent>(WallEnt);
            WallComponent wall = ComponentManager.Instance.GetEntityComponent <WallComponent>(WallEnt);

            if (wall.wall == Wall.LeftWall)
            {
                if (crc2.CollisionRec.X + crc2.CollisionRec.Width * 0.5 < crc1.CollisionRec.X)
                {
                    pc.position.X = Game.Instance.GraphicsDevice.Viewport.Width - 1 - crc2.CollisionRec.Width * 0.5f;
                }
            }
            else if (wall.wall == Wall.RightWall)
            {
                if (crc2.CollisionRec.X + crc2.CollisionRec.Width * 0.5 > crc1.CollisionRec.X)
                {
                    pc.position.X = 1 - crc2.CollisionRec.Width * 0.5f;
                }
            }
            else if (wall.wall == Wall.TopWall && !playerComp.isFalling)
            {
                if (pdc.directio != Direction.Still)
                {
                    changeDir(pdc);
                    pdc.preDir   = pdc.directio;
                    pdc.directio = Direction.Still;
                }
                pvc.velocity.Y  = 0;
                pvc.velocity.Y += 500 * (float)gameTime.ElapsedGameTime.TotalSeconds;

                playerComp.isFalling = true;

                HealthComponent hc = ComponentManager.Instance.GetEntityComponent <HealthComponent>(Player);
                //hc.health -= 1;
            }
            else if (wall.wall == Wall.BottomWall)
            {
                //@TODO
                // only loose life when the player jump on the floor, not when the player falls to the ground
                // and have some kind of timer unti you can jump away

                OnFloorComponent fc = ComponentManager.Instance.GetEntityComponent <OnFloorComponent>(Player);

                playerComp.isFalling = false;


                if (pdc.directio != Direction.Still)
                {
                    pvc.velocity.Y = 0;
                    changeDir(pdc);
                    pdc.preDir   = pdc.directio;
                    pdc.directio = Direction.Still;
                }
                //else if(pdc.directio == Direction.Still)
                //{
                //    pvc.velocity.Y = 0;
                //}
                pvc.velocity.Y  = 0;
                pvc.velocity.Y -= 500F * (float)gameTime.ElapsedGameTime.TotalSeconds;

                HealthComponent hc = ComponentManager.Instance.GetEntityComponent <HealthComponent>(Player);

                if (fc == null)
                {
                    fc = new OnFloorComponent();
                    ComponentManager.Instance.AddComponentToEntity(Player, fc);
                    hc.health -= 1;
                    ComponentManager.Instance.AddComponentToEntity(Player, new SoundEffectComponent("splat"));
                }
            }
        }
        /// <summary>
        /// A method for handling player versus player collision
        /// </summary>
        /// <param name="ent1"> ID of entity 1 </param>
        /// <param name="ent2"> ID of entity 2 </param>
        /// <param name="gt"></param>
        private void PlayerVsPlayerCollision(int ent1, int ent2, GameTime gt)
        {
            PlayerComponent              pcp1  = ComponentManager.Instance.GetEntityComponent <PlayerComponent>(ent1);
            PlayerComponent              pcp2  = ComponentManager.Instance.GetEntityComponent <PlayerComponent>(ent2);
            PositionComponent            pos1  = ComponentManager.Instance.GetEntityComponent <PositionComponent>(ent1);
            PositionComponent            pos2  = ComponentManager.Instance.GetEntityComponent <PositionComponent>(ent2);
            CollisionRectangleComponent  crc1  = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(ent1);
            CollisionRectangleComponent  crc2  = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(ent2);
            DirectionComponent           dcp1  = ComponentManager.Instance.GetEntityComponent <DirectionComponent>(ent1);
            DirectionComponent           dcp2  = ComponentManager.Instance.GetEntityComponent <DirectionComponent>(ent2);
            VelocityComponent            vcp1  = ComponentManager.Instance.GetEntityComponent <VelocityComponent>(ent1);
            VelocityComponent            vcp2  = ComponentManager.Instance.GetEntityComponent <VelocityComponent>(ent2);
            BallOfSpikesPowerUpComponent bspc1 = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(ent1);
            BallOfSpikesPowerUpComponent bspc2 = ComponentManager.Instance.GetEntityComponent <BallOfSpikesPowerUpComponent>(ent2);

            if (pos1.position.Y + crc1.CollisionRec.Height * 0.5f < pos2.position.Y)
            { // entity 1 is above entity 2
                if (!pcp1.isFalling && !pcp2.isFalling)
                {
                    if (dcp2.directio != Direction.Still)
                    {
                        changeDir(dcp2);
                        dcp2.preDir   = dcp2.directio;
                        dcp2.directio = Direction.Still;
                    }
                    vcp2.velocity.Y = 0;
                    vcp1.velocity.Y = -200f;
                    ComponentManager.Instance.AddComponentToEntity(ent2, new SoundEffectComponent("hit"));
                    ComponentManager.Instance.AddComponentToEntity(ent1, new SoundEffectComponent("grunt"));

                    //if enitity 2 dosent have ballofspikePUPcomponent loose life
                    if (bspc2 == null)
                    {
                        HealthComponent hc2 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent2);
                        //hc2.health -= 1;
                        pcp2.isFalling = true;
                    }
                    //else if enitity 1 dosent have ballofspikePUPcomponent loose life
                    else if (bspc1 == null)
                    {
                        HealthComponent hc1 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent1);
                        //hc1.health -= 1;
                        pcp1.isFalling = true;
                    }
                }
            }
            else if (pos2.position.Y + crc2.CollisionRec.Height * 0.5f < pos1.position.Y)
            {   // entity 2 is above entity 1
                if (!pcp1.isFalling && !pcp2.isFalling)
                {
                    if (dcp1.directio != Direction.Still)
                    {
                        changeDir(dcp1);
                        dcp1.preDir   = dcp1.directio;
                        dcp1.directio = Direction.Still;
                    }
                    vcp1.velocity.Y = 0;
                    vcp2.velocity.Y = -200f;

                    ComponentManager.Instance.AddComponentToEntity(ent1, new SoundEffectComponent("hit"));
                    ComponentManager.Instance.AddComponentToEntity(ent2, new SoundEffectComponent("grunt"));

                    //if enitity 1 dosent have ballofspikePUPcomponent loose life
                    if (bspc1 == null)
                    {
                        HealthComponent hc1 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent1);
                        //hc1.health -= 1;
                        pcp1.isFalling = true;
                    }
                    //else if enitity 2 dosent have ballofspikePUPcomponent loose life
                    else if (bspc2 == null)
                    {
                        HealthComponent hc2 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent2);
                        //hc2.health -= 1;
                        pcp2.isFalling = true;
                    }
                }
            }
            else // both are on the same "level"
            {
                if (!pcp2.isFalling && !pcp1.isFalling)
                {
                    if (dcp1.directio != Direction.Still)
                    {
                        changeDir(dcp1);
                        dcp1.preDir   = dcp1.directio;
                        dcp1.directio = Direction.Still;
                    }
                    vcp1.velocity.Y = 0;
                    if (dcp2.directio != Direction.Still)
                    {
                        changeDir(dcp2);
                        dcp2.preDir   = dcp2.directio;
                        dcp2.directio = Direction.Still;
                    }
                    vcp2.velocity.Y = 0;

                    ComponentManager.Instance.AddComponentToEntity(ent2, new SoundEffectComponent("sidehit"));
                    ComponentManager.Instance.AddComponentToEntity(ent1, new SoundEffectComponent("sidehit"));

                    //If enitity 1 dosent have ballofspikePUPcomponent loose life
                    if (bspc1 == null)
                    {
                        HealthComponent hc1 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent1);
                        //hc1.health -= 1;
                        pcp1.isFalling = true;
                    }
                    //If enitity 2 dosent have ballofspikePUPcomponent loose life
                    if (bspc2 == null)
                    {
                        HealthComponent hc2 = ComponentManager.Instance.GetEntityComponent <HealthComponent>(ent2);
                        //hc2.health -= 1;
                        pcp2.isFalling = true;
                    }
                    pushAway(ent1, ent2, gt);
                }
            }
        }
        /// <summary>
        /// Checks if two entities has collided with each other
        /// using pixel perfect
        /// </summary>
        /// <param name="entity1"> Id of entity 1 </param>
        /// <param name="entity2"> Id of entity 2 </param>
        /// <returns>
        /// True if pixel perfect collision occurred
        /// and false if no collision or physics is not enabled
        /// </returns>

        private bool PixelPerfectCollision(int entity2, int entity1)
        {
            Rectangle Source1;
            Rectangle Source2;



            CollisionRectangleComponent recA = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(entity1);
            CollisionRectangleComponent recB = ComponentManager.Instance.GetEntityComponent <CollisionRectangleComponent>(entity2);

            Rectangle rectangleA = recA.CollisionRec;
            Rectangle rectangleB = recB.CollisionRec;

            if (!rectangleA.Intersects(rectangleB))
            {
                return(false);
            }

            DrawableComponent ent1 = ComponentManager.Instance.GetEntityComponent <DrawableComponent>(entity1);
            DrawableComponent ent2 = ComponentManager.Instance.GetEntityComponent <DrawableComponent>(entity2);


            if (ComponentManager.Instance.CheckIfEntityHasComponent <AnimationComponent>(entity1))
            {
                AnimationComponent ani = ComponentManager.Instance.GetEntityComponent <AnimationComponent>(entity1);
                Source1 = ani.sourceRectangle;
            }
            else
            {
                Source1 = ent1.texture.Bounds;
            }

            if (ComponentManager.Instance.CheckIfEntityHasComponent <AnimationComponent>(entity2))
            {
                AnimationComponent ani = ComponentManager.Instance.GetEntityComponent <AnimationComponent>(entity2);
                Source2 = ani.sourceRectangle;
            }
            else
            {
                Source2 = ent2.texture.Bounds;
            }

            Color[] dataA = new Color[ent1.texture.Width * ent1.texture.Height];
            ent1.texture.GetData(dataA);
            Color[] dataB = new Color[ent2.texture.Width * ent2.texture.Height];
            ent2.texture.GetData(dataB);


            Color[] realDataA = GetImageData(dataA, ent1.texture.Width, Source1);
            Color[] realDataB = GetImageData(dataB, ent2.texture.Width, Source2);


            Rectangle its = Rectangle.Intersect(rectangleA, rectangleB);

            for (int y = its.Top; y < its.Bottom; y++)
            {
                for (int x = its.Left; x < its.Right; x++)
                {
                    // Get the color of both pixels at this point
                    Color colorA = realDataA[(x - rectangleA.Left) + (y - rectangleA.Top) * rectangleA.Width];
                    Color colorB = realDataB[(x - rectangleB.Left) + (y - rectangleB.Top) * rectangleB.Width];

                    // If both pixels are not completely transparent,
                    if (colorA.A != 0 && colorB.A != 0)
                    {
                        // then an intersection has been found
                        return(true);
                    }
                }
            }
            return(false);
        }