Guest User

Untitled

a guest
Jul 13th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.    class CustomHUD extends UTHUD;
  2.      
  3. //var MaterialInstanceConstant GameMinimapMIC; // doesn't work at least for me
  4. //var Material GameMinimapp; // same
  5.      
  6. var MU_Minimap GameMinimap;
  7. var Float TileSize;
  8. var Int MapDim;
  9. var Int BoxSize;
  10. var color PlayerColors[2];
  11.      
  12. //var float MPosXMap; // not needed
  13. //var float MPosYMap; // not needed
  14.  
  15. // create Material Instances in code, did not found an other solution
  16. var MaterialInstanceConstant MiniMapInst; // new
  17. var MaterialInstanceConstant CompassInst; // new
  18.  
  19. var float ResScaleX; // see comment in PostRender
  20.      
  21. simulated function PostBeginPlay()
  22. {
  23.     Super.PostBeginPlay();
  24.      
  25.     GameMinimap = TaskGame(WorldInfo.Game).GameMinimap;
  26.  
  27.     // create Material Instances
  28.     MiniMapInst = new(none) class'MaterialInstanceConstant';
  29.     MiniMapInst.SetParent( GameMinimap.Minimap );
  30.  
  31.     CompassInst = new(none) class'MaterialInstanceConstant';
  32.     CompassInst.SetParent( GameMinimap.CompassOverlay );
  33. }
  34.      
  35. event PostRender()
  36. {
  37.     // my Hud is based on 1280x1024, for other resolutions it will be scaled up/down
  38.     // Canvas.ClipX returns your current Width, ClipY the Height res.
  39.     ResScaleX = Canvas.ClipX/1280;
  40.  
  41.     DrawMap();
  42. }
  43.  
  44. /////////////////////////////////
  45. //Radar/Minimap
  46. /////////////////////////////////
  47.      
  48. function float GetPlayerHeading()
  49. {
  50.     local Float PlayerHeading;
  51.     local Rotator PlayerRotation;
  52.     local Vector v;
  53.      
  54.     PlayerRotation.Yaw = PlayerOwner.Pawn.Rotation.Yaw;
  55.     v = vector(PlayerRotation);
  56.     PlayerHeading = GetHeadingAngle(v);
  57.     PlayerHeading = UnwindHeading(PlayerHeading);
  58.      
  59.     while (PlayerHeading < 0)
  60.             PlayerHeading += PI * 2.0f;
  61.      
  62.     return PlayerHeading;
  63. }
  64.      
  65.      
  66. //There will be a warning on the screen
  67. //You can disable it, be typing "DisableAllScreenMessages"
  68.      
  69. function DrawMap()
  70. {
  71.     local Float TrueNorth,PlayerHeading;
  72.     local Float MapRotation,CompassRotation;
  73.     local Vector PlayerPos, ClampedPlayerPos, RotPlayerPos, DisplayPlayerPos, StartPos;
  74.     local LinearColor MapOffset;
  75.     local Float ActualMapRange;
  76.     local Controller C;
  77.      
  78.     //Set MapDim & BoxSize accounting for the current resolution
  79.     /*doesn't work, ResolutionScale is Always 0, MPosXMap and MapPosYMap are always outside the Screen
  80.     MapPosition.X = MPosXMap;  //default.MapPosition.X * FullWidth;
  81.     MapPosition.Y = MPosYMap;  //default.MapPosition.Y * FullHeight;
  82.     MapDim = default.MapDim * ResolutionScale;
  83.     BoxSize = default.BoxSize * ResolutionScale;*/
  84.  
  85.     MapDim = default.MapDim * ResScaleX; // this works for me
  86.     BoxSize = default.BoxSize * ResScaleX; // this works for me
  87.      
  88.     //Calculate map range values
  89.     ActualMapRange = FMax(  GameMinimap.MapRangeMax.X - GameMinimap.MapRangeMin.X,
  90.                             GameMinimap.MapRangeMax.Y - GameMinimap.MapRangeMin.Y);
  91.      
  92.     //Calculate normalized player position
  93.     PlayerPos.X = (PlayerOwner.Pawn.Location.Y - GameMinimap.MapCenter.Y) / ActualMapRange;
  94.     PlayerPos.Y = (GameMinimap.MapCenter.X - PlayerOwner.Pawn.Location.X) / ActualMapRange;
  95.      
  96.     //Calculate clamped player position
  97.     ClampedPlayerPos.X = FClamp(PlayerPos.X,-0.5 + (TileSize / 2.0),0.5 - (TileSize / 2.0));
  98.     ClampedPlayerPos.Y = FClamp(PlayerPos.Y,-0.5 + (TileSize / 2.0),0.5 - (TileSize / 2.0));
  99.      
  100.     //Get north direction and player's heading
  101.     TrueNorth = GameMinimap.GetRadianHeading();
  102.     Playerheading = GetPlayerHeading();
  103.      
  104.     //Calculate rotation values
  105.     if(GameMinimap.bForwardAlwaysUp)
  106.     {
  107.         MapRotation = PlayerHeading;
  108.         CompassRotation = PlayerHeading - TrueNorth;
  109.     }
  110.     else
  111.     {
  112.         MapRotation = PlayerHeading - TrueNorth;
  113.         CompassRotation = MapRotation;
  114.     }
  115.      
  116.     // Replace ATan with ATan2!
  117.     //Calculate position for displaying the player in the map
  118.     //DisplayPlayerPos.X = VSize(PlayerPos) * Cos( ATan(PlayerPos.X) - MapRotation);
  119.     //DisplayPlayerPos.Y = VSize(PlayerPos) * Sin( ATan(PlayerPos.Y) - MapRotation);
  120.     DisplayPlayerPos.X = VSize(PlayerPos) * Cos( ATan2(PlayerPos.Y, PlayerPos.X) - MapRotation);
  121.     DisplayPlayerPos.Y = VSize(PlayerPos) * Sin( ATan2(PlayerPos.Y, PlayerPos.X) - MapRotation);
  122.      
  123.     // Replace ATan with ATan2!
  124.     //Calculate player location after rotation
  125.     //RotPlayerPos.X = VSize(ClampedPlayerPos) * Cos( ATan(ClampedPlayerPos.X) - MapRotation);
  126.     //RotPlayerPos.Y = VSize(ClampedPlayerPos) * Sin( ATan(ClampedPlayerPos.Y) - MapRotation);
  127.     RotPlayerPos.X = VSize(ClampedPlayerPos) * Cos( ATan2(ClampedPlayerPos.Y, ClampedPlayerPos.X) - MapRotation);
  128.     RotPlayerPos.Y = VSize(ClampedPlayerPos) * Sin( ATan2(ClampedPlayerPos.Y, ClampedPlayerPos.X) - MapRotation);
  129.      
  130.     //Calculate upper left UV coordinate
  131.     StartPos.X = FClamp(RotPlayerPos.X + (0.5 - (TileSize / 2.0)),0.0,1.0 - TileSize);
  132.     StartPos.Y = FClamp(RotPlayerPos.Y + (0.5 - (TileSize / 2.0)),0.0,1.0 - TileSize);
  133.     StartPos.X = FClamp(DisplayPlayerPos.X + (0.5 - (TileSize / 2.0)),TileSize/-2,1.0 - TileSize/2);
  134.     StartPos.Y = FClamp(DisplayPlayerPos.Y + (0.5 - (TileSize / 2.0)),TileSize/-2,1.0 - TileSize/2);
  135.      
  136.     //Calculate texture panning for alpha
  137.     MapOffset.R =  FClamp(-1.0 * RotPlayerPos.X,-0.5 + (TileSize / 2.0),0.5 - (TileSize / 2.0));
  138.     MapOffset.G =  FClamp(-1.0 * RotPlayerPos.Y,-0.5 + (TileSize / 2.0),0.5 - (TileSize / 2.0));
  139.     MapOffset.R =  FClamp(-1.0 * DisplayPlayerPos.X,-0.5,0.5);
  140.     MapOffset.G =  FClamp(-1.0 * DisplayPlayerPos.Y,-0.5,0.5);
  141.      
  142.     //Set the material parameter values
  143.     /* direct Modification of Instanced Material is not allowed, Instead use your created Instances
  144.     GameMinimap.Minimap.SetScalarParameterValue('MapRotation',MapRotation);
  145.     GameMinimap.Minimap.SetScalarParameterValue('TileSize',TileSize);
  146.     GameMinimap.Minimap.SetVectorParameterValue('MapOffset',MapOffset);
  147.     GameMinimap.CompassOverlay.SetScalarParameterValue('CompassRotation',CompassRotation);*/
  148.     MiniMapInst.SetScalarParameterValue('MapRotation',MapRotation);
  149.     MiniMapInst.SetScalarParameterValue('TileSize',TileSize);
  150.     MiniMapInst.SetVectorParameterValue('MapOffset',MapOffset);
  151.     CompassInst.SetScalarParameterValue('CompassRotation',CompassRotation);
  152.      
  153.     //Draw the map
  154.     Canvas.SetPos(MapPosition.X,MapPosition.Y);
  155.     //Canvas.DrawMaterialTile(GameMinimap.Minimap,MapDim,MapDim,StartPos.X,StartPos.Y,TileSize,TileSize);
  156.     Canvas.DrawMaterialTile(MiniMapInst,MapDim,MapDim,StartPos.X,StartPos.Y,TileSize,TileSize); // use own Materialinstance
  157.      
  158.     //Draw the player's location
  159.     Canvas.SetPos(  MapPosition.X + MapDim * (((DisplayPlayerPos.X + 0.5) - StartPos.X) / TileSize) - (BoxSize / 2),
  160.                     MapPosition.Y + MapDim * (((DisplayPlayerPos.Y + 0.5) - StartPos.Y) / TileSize) - (BoxSize / 2));
  161.  
  162.     Canvas.SetDrawColor(PlayerColors[0].R,
  163.                         PlayerColors[0].G,
  164.                         PlayerColors[0].B,
  165.                         PlayerColors[0].A);
  166.  
  167.     Canvas.DrawBox(BoxSize,BoxSize);
  168.      
  169.     /*****************************
  170.     *  Draw Other Players
  171.     *****************************/
  172.     foreach WorldInfo.AllControllers(class'Controller',C)
  173.     {
  174.         if(PlayerController(C) != PlayerOwner)
  175.         {
  176.             //Calculate normalized player position
  177.             PlayerPos.Y = (GameMinimap.MapCenter.X - C.Pawn.Location.X) / ActualMapRange;
  178.             PlayerPos.X = (C.Pawn.Location.Y - GameMinimap.MapCenter.Y) / ActualMapRange;
  179.      
  180.             //Calculate position for displaying the player in the map, same as above ATan->ATan2
  181.             //DisplayPlayerPos.X = VSize(PlayerPos) * Cos( ATan(PlayerPos.X) - MapRotation);
  182.             //DisplayPlayerPos.Y = VSize(PlayerPos) * Sin( ATan(PlayerPos.Y) - MapRotation);
  183.             DisplayPlayerPos.X = VSize(PlayerPos) * Cos( ATan2(PlayerPos.Y, PlayerPos.X) - MapRotation);
  184.             DisplayPlayerPos.Y = VSize(PlayerPos) * Sin( ATan2(PlayerPos.Y, PlayerPos.X) - MapRotation);
  185.      
  186.             if(VSize(DisplayPlayerPos - RotPlayerPos) <= ((TileSize / 2.0) -
  187.                     (TileSize * Sqrt(2 * Square(BoxSize / 2)) / MapDim)))
  188.             {
  189.                 //Draw the player's location
  190.                 Canvas.SetPos(  MapPosition.X + MapDim * (((DisplayPlayerPos.X + 0.5) -
  191.                                 StartPos.X) / TileSize) - (BoxSize / 2),
  192.                                 MapPosition.Y + MapDim * (((DisplayPlayerPos.Y + 0.5) -
  193.                                 StartPos.Y) / TileSize) - (BoxSize / 2));
  194.  
  195.                 Canvas.SetDrawColor(PlayerColors[1].R,
  196.                                     PlayerColors[1].G,
  197.                                     PlayerColors[1].B,
  198.                                     PlayerColors[1].A);
  199.                 Canvas.DrawBox(BoxSize,BoxSize);
  200.             }
  201.         }
  202.     }
  203.      
  204.     //Draw the compass overlay
  205.     Canvas.SetPos(MapPosition.X,MapPosition.Y);
  206.     //Canvas.DrawMaterialTile(GameMinimap.CompassOverlay,MapDim,MapDim,0.0,0.0,1.0,1.0);
  207.     Canvas.DrawMaterialTile(CompassInst,MapDim,MapDim,0.0,0.0,1.0,1.0); // use own Materialinstance
  208. }
  209.      
  210.      
  211. exec function ChangeMapsize(int size)
  212. {
  213.     MapDim = size;
  214. }
  215.      
  216. exec function MapSizeUp()
  217. {
  218.     MapDim *= 2;
  219.     BoxSize *= 2;
  220. }
  221.      
  222. exec function MapSizeDown()
  223. {
  224.     MapDim /= 2;
  225.     BoxSize /= 2;
  226. }
  227.      
  228. exec function MapZoomIn()
  229. {
  230.     TileSize = 1.0 / FClamp(int((1.0 / TileSize) + 1.0) + 0.5,1.5,10.5);
  231.     TileSize = 1.0 / FClamp(int((1.0 / TileSize) + 1.0) + 0.5,1.5,10.5);
  232. }
  233.      
  234. exec function MapZoomOut()
  235. {
  236.     TileSize = 1.0 / FClamp(Int((1.0 / TileSize) - 1.0) + 0.5,1.5,10.5);
  237. }
  238.      
  239. defaultproperties
  240. {
  241.     MapDim=256
  242.     BoxSize=12
  243.     PlayerColors(0)=(R=255,G=255,B=255,A=255)
  244.     PlayerColors(1)=(R=96,G=255,B=96,A=255)
  245.     TileSize=1
  246.     MapPosition=(X=0.000000,Y=0.000000)
  247. }
Add Comment
Please, Sign In to add comment