Exemplo n.º 1
0
        private void Update_Physics_GL_Left(NetNavi_Type navi)
        {
            //Top
            int Top    = (int)((navi.Navi_Location().Top + 2) / 16);
            int Bottom = (int)((navi.Navi_Location().Bottom - 2) / 16);
            int Left   = (int)(navi.Navi_Location().Left / 16);

            //always does hightmap on tile colleciton
            for (int y = Top; y <= Bottom; y++)
            {
                RectangleF rct = navi.Navi_Location();
                if (stage.CollisionMap.ContainsKey(new Point(Left, y)))
                {
                    StageCollisionTile tile = stage.CollisionMap[new Point(Left, y)];
                    tile.Active = true;

                    if (rct.Bottom - (y * 16 + 16 - tile.HeightRight) >= 4)
                    {
                        //set to Left
                        if (rct.Left - (Left * 16 + 16) >= -1)
                        {
                            navi.Set_LocationX(Left * 16 + 16);
                            navi.Speed.X        = 0;
                            navi.StepMovement.X = 0;
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void Update_Physics_GL_Bounds(NetNavi_Type navi)
        {
            bool OnGround = false;

            if (navi.Navi_Location().Left < 0)
            {
                navi.Set_LocationX(0); navi.Speed.X = 0; navi.StepMovement.X = 0;
            }

            if (navi.Navi_Location().Right > stage.Bounds.Width)
            {
                navi.Set_LocationX(stage.Bounds.Width - navi.Navi_Location().Width); navi.Speed.X = 0; navi.StepMovement.X = 0;
            }


            if (navi.Navi_Location().Bottom > stage.Bounds.Height)
            {
                navi.Location.Y = stage.Bounds.Height - navi.GetHitBox().Bottom;
            }
            if (navi.Navi_Location().Bottom == stage.Bounds.Height)
            {
                OnGround = true; navi.Speed.Y = 0; navi.StepMovement.Y = 0;
            }

            //Top bounds
            if (navi.Navi_Location().Top < 0)
            {
                navi.Location.Y = 0 - navi.GetHitBox().Top; navi.Speed.Y = 0; navi.StepMovement.Y = 0;
            }

            //CollisionMap
            foreach (StageCollisionTile tile in stage.CollisionMap.Values)
            {
                tile.Active = false;
            }

            Update_Physics_GL_Left(navi);
            Update_Physics_GL_Right(navi);

            Update_Physics_GL_Top(navi);
            Update_Physics_GL_Bottom(navi, OnGround);
        }