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; } } } } }
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); }