Advertisement
Thatguy5532

Untitled

Jan 18th, 2024
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.57 KB | None | 0 0
  1. class TRA_Map_Manager : SCR_MapUIBaseComponent
  2. {
  3.    
  4.     //protected Widget m_WidgetLayer;
  5.     //protected ImageWidget m_UnitImage;
  6.     protected SCR_MapEntity m_MapUnitEntity;
  7.  
  8.     protected float m_iCycleDuration = 0.1;
  9.     protected float m_fWaitingTime = float.MAX;
  10.     protected bool m_isMapOpen = false;
  11.     protected ref array<Widget> UnitWidgets = {};
  12.     protected ref array<Widget> ObjWidgets = {};
  13.  
  14.     protected ref array<SCR_PlayerScoreInfoFiringRange> m_aAllPlayersInfo = new ref array<SCR_PlayerScoreInfoFiringRange>;
  15.     //------------------------------------------------------------------------------------------------
  16.     //! GetPlayer faction
  17.     protected Faction GetPlayerFaction(IEntity player)
  18.     {      
  19.         if (!player)
  20.             return null;
  21.        
  22.         if (!ChimeraCharacter.Cast(player))
  23.             return null;
  24.        
  25.         auto foundComponent = ChimeraCharacter.Cast(player).FindComponent(FactionAffiliationComponent);
  26.         Faction faction;
  27.  
  28.         if (foundComponent)
  29.         {
  30.             auto castedComponent = FactionAffiliationComponent.Cast(foundComponent);
  31.             faction = castedComponent.GetAffiliatedFaction();
  32.         };
  33.  
  34.         return faction;
  35.     }
  36.     //------------------------------------------------------------------------------------------------
  37.     override void OnMapOpen(MapConfiguration config)
  38.     {
  39.         super.OnMapOpen(config);
  40.  
  41.         Print("--------------------MAPOPEN----------------", LogLevel.NORMAL);
  42.         m_MapUnitEntity = SCR_MapEntity.GetMapInstance();
  43.         if (!m_MapUnitEntity) return;
  44.        
  45.         array<string> types = {"village"};
  46.         //array<string> types = {"factory", "village", "radio", "military", "city"};
  47.        
  48.         m_isMapOpen = true;
  49.         ObjWidgets = {};
  50.         for (int i; i < types.Count(); i++)
  51.         {
  52.             int count = GetObjCount(types[i]);
  53.             for (int j; j < count; j++)
  54.             {
  55.                 //Widget m_WidgetLayer = GetGame().GetWorkspace().CreateWidgets(("{06BB0A503B49FBAA}UI/layouts/Map/Opfor_" + types[i] + ".layout"), m_RootWidget);
  56.                 Widget m_WidgetLayer = GetGame().GetWorkspace().CreateWidgets("{06BB0A503B49FBAA}UI/layouts/Map/Opfor_Military.layout", m_RootWidget);
  57.                 ObjWidgets.Insert(m_WidgetLayer);
  58.             };
  59.         }
  60.  
  61.        
  62.         m_MapUnitEntity.GetOnMapPan().Insert(TR_OnMapPan);
  63.         m_MapUnitEntity.GetOnMapZoom().Insert(TR_OnMapZoom);
  64.        
  65.         UpdatePosition();
  66.     }
  67.     //------------------------------------------------------------------------------------------------
  68.     override protected void OnMapClose(MapConfiguration config)
  69.     {
  70.         //m_MapUnitEntity.GetOnMapPan().Remove(TR_OnMapPan);
  71.         //m_MapUnitEntity.GetOnMapZoom().Remove(TR_OnMapZoom);
  72.  
  73.         //m_isMapOpen = false;
  74.         super.OnMapClose(config);
  75.     }
  76.     //------------------------------------------------------------------------------------------------
  77.     override void Update(float timeSlice)
  78.     {
  79.         if (!m_isMapOpen)
  80.             return;
  81.         m_fWaitingTime += timeSlice;
  82.         if (m_fWaitingTime < m_iCycleDuration)
  83.             return;
  84.  
  85.         m_fWaitingTime = 0;
  86.         UpdatePosition();
  87.     }
  88.     //------------------------------------------------------------------------------------------------
  89.     protected void TR_OnMapPan(float x, float y, bool adjustedPan)
  90.     {  
  91.         UpdatePosition();
  92.     }
  93.     //------------------------------------------------------------------------------------------------
  94.     protected void TR_OnMapZoom(float zoomVal)
  95.     {
  96.         UpdatePosition();
  97.     }
  98.     //------------------------------------------------------------------------------------------------
  99.     protected void UpdatePosition()
  100.     {
  101.         int milCount = GetObjCount("military");
  102.         int factCount = GetObjCount("factory");
  103.         int radioCount = GetObjCount("radio");
  104.         int cityCount = GetObjCount("city");
  105.         int vilCount = GetObjCount("village");
  106.  
  107.         array<IEntity> factObjs = GetObjs("factory");
  108.         array<IEntity> milObjs = GetObjs("military");
  109.         array<IEntity> radioObjs = GetObjs("radio");
  110.         array<IEntity> cityObjs = GetObjs("city");
  111.         array<IEntity> vilObjs = GetObjs("village");
  112.        
  113.         int objCount = (milCount + factCount + radioCount + cityCount + vilCount);
  114.         int LObjID = 0;
  115.         for (int i; i < milCount; i++)
  116.         {
  117.        
  118.             vector ObjPos = milObjs[i].GetOrigin();
  119.             vector ObjAngles = milObjs[i].GetAngles();
  120.                
  121.             float screenPosX, screenPosY;
  122.             float mapZoom = m_MapUnitEntity.GetCurrentZoom();
  123.             m_MapUnitEntity.WorldToScreen(ObjPos[0], ObjPos[2], screenPosX, screenPosY, true, mapZoom);
  124.             ImageWidget m_ObjImage = ImageWidget.Cast(ObjWidgets[i].FindAnyWidget("Image"));
  125.             screenPosX = GetGame().GetWorkspace().DPIUnscale(screenPosX);
  126.             screenPosY = GetGame().GetWorkspace().DPIUnscale(screenPosY);
  127.             if(m_ObjImage)
  128.             {
  129.                 m_ObjImage.LoadImageTexture(0, "{9F41E9C8FDFD2BC8}Images/Opfor_Military.edds");
  130.                 // Eventually set the color according to faction in control here:
  131.                 //if ( characterDamageManager.GetIsUnconscious() )
  132.                 //{
  133.                 //  if (characterDamageManager.GetState() == EDamageState.DESTROYED)
  134.                 //  {
  135.                 //      m_ObjImage.SetColor(Color.Black);
  136.                 //      //Print("PlayerDead", LogLevel.NORMAL);
  137.                 //  }else{
  138.                 //      m_ObjImage.SetColor(Color.Orange);
  139.                 //      //Print("PlayerUnconscious", LogLevel.NORMAL);
  140.                 //  }
  141.                 //}else{
  142.                 //  m_ObjImage.SetColor(LocalPlayerFaction.GetFactionColor());
  143.                 //}
  144.                 m_ObjImage.SetColor(Color.Blue);
  145.                 m_ObjImage.SetVisible(true);
  146.                 FrameSlot.SetPos(
  147.                     m_ObjImage,
  148.                     screenPosX,
  149.                     screenPosY
  150.                 );
  151.                 m_ObjImage.SetRotation(ObjAngles[1]);
  152.             }
  153.                
  154.             TextWidget m_ObjText = TextWidget.Cast(ObjWidgets[i].FindAnyWidget("Text"));
  155.             if(m_ObjText)
  156.             {
  157.                 m_ObjText.SetColor(Color.FromRGBA(0, 0, 0, 255));
  158.                 //m_ObjText.SetText(playerManager.GetPlayerName(playerId));
  159.                 string objName = milObjs[i].GetName();
  160.                 m_ObjText.SetText(objName);
  161.                 m_ObjText.SetVisible(true);
  162.                 FrameSlot.SetPos(
  163.                     m_ObjText,
  164.                     screenPosX,
  165.                     screenPosY
  166.                 );
  167.             }
  168.             LObjID = i;
  169.         }
  170.        
  171.         for (int i=(LObjID+1); i < milCount; i++)
  172.         {
  173.             ImageWidget m_ObjImage = ImageWidget.Cast(ObjWidgets[i].FindAnyWidget("Image"));
  174.             if(m_ObjImage)
  175.             {
  176.                 m_ObjImage.LoadImageTexture(0, "{9F41E9C8FDFD2BC8}Images/Opfor_Military.edds");
  177.                 m_ObjImage.SetVisible(false);
  178.             }
  179.            
  180.             TextWidget m_ObjText = TextWidget.Cast(ObjWidgets[i].FindAnyWidget("Text"));
  181.             if(m_ObjText)
  182.             {
  183.                 m_ObjText.SetVisible(false);
  184.             }  
  185.         };
  186.        
  187. /*      for (int i; i < 5; i++)
  188.         {
  189.             ImageWidget m_UnitImage = ImageWidget.Cast(UnitWidgets[i].FindAnyWidget("Image"));
  190.             if(m_UnitImage)
  191.             {
  192.                 m_UnitImage.LoadImageTexture(0, "{9731965B995D0B76}UI/Textures/Icons/iconman_ca.edds");
  193.                 m_UnitImage.SetColor(Color.FromRGBA(180, 0, 0, 255));
  194.             }
  195.  
  196.             m_UnitImage.SetVisible(true);
  197.             FrameSlot.SetPos(
  198.                 m_UnitImage,
  199.                 100*i,
  200.                 100*i
  201.             );
  202.         };
  203.         */
  204.     }
  205.     //------------------------------------------------------------------------------------------------
  206.     // type = "military" || "village" || "city" || "factory" || "radio"
  207.     static int GetObjCount(string type)
  208.     {
  209.         IEntity objectives = GetGame().GetWorld().FindEntityByName((type + "_objectives"));
  210.         IEntity child = objectives.GetChildren();
  211.         int count = 0;
  212.         while (child)
  213.         {
  214.             count++;
  215.             child = child.GetSibling();
  216.         }
  217.         return count;
  218.     }
  219.     //------------------------------------------------------------------------------------------------
  220.     // type = "military" || "village" || "city" || "factory" || "radio"
  221.     static array<IEntity> GetObjs(string type)
  222.     {
  223.         array<IEntity> allObjectives = new array<IEntity>;
  224.         IEntity objectives = GetGame().GetWorld().FindEntityByName((type + "_objectives"));
  225.         IEntity child = objectives.GetChildren();
  226.         while (child)
  227.         {
  228.             allObjectives.Insert(child);
  229.             child = child.GetSibling();
  230.         }
  231.         return allObjectives;
  232.     }
  233.     //------------------------------------------------------------------------------------------------
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement