/// <summary> /// Set the player icon on the map /// </summary> /// <param name="player"></param> private void SetPlayerIcon(ActorItem player) { // convert to game positions double x = MapHelper.ConvertCoordinatesIntoMapPosition((double)Map.SizeFactor, (double)Map.OffsetX, player.Coordinate.X); double y = MapHelper.ConvertCoordinatesIntoMapPosition((double)Map.SizeFactor, (double)Map.OffsetY, player.Coordinate.Y); // check if a player icon already exists or not if (MapPlayer.id == 0) { // Create new player icon bitmap MapPlayer = new MapIcon { id = 1 }; } // reset graphic Bitmap bitmap = AppHelper.createBitmap("assets\\player.png"); MapPlayer.icon = bitmap; MapPlayer.width = bitmap.Width; MapPlayer.height = bitmap.Height; // work out pixel position int pixelX = Convert.ToInt32((x - 1) * 50 * (double)Map.SizeFactor) - (MapPlayer.icon.Size.Width / 2); int pixelY = Convert.ToInt32((y - 1) * 50 * (double)Map.SizeFactor) - (MapPlayer.icon.Size.Height / 2); // set position and direction MapPlayer.x = pixelX; MapPlayer.y = pixelY; MapPlayer.angle = Math.Abs(player.Heading * (180 / Math.PI) - 180); MapPlayer.setRotation(); // add trail, this is done by just dividing the pixel int trailDistance = 120; int trailDistanceMax = 200; int xDistance = 0; int yDistance = 0; if (MapTrail.Count > 0) { xDistance = Math.Abs(MapTrail[MapTrail.Count - 1].x - pixelX); yDistance = Math.Abs(MapTrail[MapTrail.Count - 1].y - pixelY); } // if map trail empty or either x or y distance traved is above 100, draw new trail if (MapTrail.Count == 0 || (xDistance > trailDistance || yDistance > trailDistance)) { MapIcon MapTrailIcon = new MapIcon { icon = AppHelper.createBitmap("assets\\trail.png"), id = (MapTrail.Count + 1), x = pixelX, y = pixelY, angle = 0 }; MapTrail.Add(MapTrailIcon); // set trail sizes MapTrailSizeWidth = MapTrailIcon.icon.Width; MapTrailSizeHeight = MapTrailIcon.icon.Height; } // work out pixel position pixelX = Convert.ToInt32((x - 1) * 50 * (double)Map.SizeFactor) - 10; pixelY = Convert.ToInt32((y - 1) * 50 * (double)Map.SizeFactor) - 10; trailDistance = 20; trailDistanceMax = 35; xDistance = 0; yDistance = 0; if (MapTrailMini.Count > 0) { xDistance = Math.Abs(MapTrailMini[MapTrailMini.Count - 1].x - pixelX); yDistance = Math.Abs(MapTrailMini[MapTrailMini.Count - 1].y - pixelY); } // if map trail empty or either x or y distance traved is above 100, draw new trail if (MapTrailMini.Count == 0 || (xDistance > trailDistance || yDistance > trailDistance)) { // Ignore big jumps if (xDistance > trailDistanceMax || yDistance > trailDistanceMax) { return; } xPositions.Add(pixelX); yPositions.Add(pixelY); MapIcon MapTrailMiniIcon = new MapIcon { icon = AppHelper.createBitmap("assets\\trailmini.png"), id = (MapTrailMini.Count + 1), x = pixelX, y = pixelY, angle = 0 }; MapTrailMini.Add(MapTrailMiniIcon); // set trail sizes MapTrailMiniSizeWidth = MapTrailMiniIcon.icon.Width; MapTrailMiniSizeHeight = MapTrailMiniIcon.icon.Height; } }