Ejemplo n.º 1
0
        //checks wether the planet icon is clicked
        internal void MapClicked(ECSLib.Vector3 worldCoord, MouseButtons button)
        {
            if (button == MouseButtons.Primary)
            {
                LastWorldPointClicked_m = worldCoord;
            }

            if (ActiveWindow != null)
            {
                ActiveWindow.MapClicked(worldCoord, button);
            }

            if (LoadedWindows.ContainsKey(typeof(DistanceRuler)))
            {
                LoadedWindows[typeof(DistanceRuler)].MapClicked(worldCoord, button);
            }

            Dictionary <Guid, EntityState> allEntities = null;

            if (StarSystemStates.ContainsKey(SelectedStarSysGuid))
            {
                allEntities = StarSystemStates[SelectedStarSysGuid].EntityStatesWithNames;
            }
            //gets all entities with a position on the map
            double closestEntityDistInM = double.MaxValue;
            Entity closestEntity        = null;

            //iterates over entities. Compares the next one with the previous closest-to-click one, if next one is closer, set that one as the closest, repeat for all entities.
            if (allEntities != null)
            {
                foreach (var oneEntityState in allEntities)
                {
                    var oneEntity = oneEntityState.Value.Entity;
                    if (oneEntity.HasDataBlob <PositionDB>())
                    {
                        var thisDistanceInM = Math.Sqrt(Math.Pow(oneEntity.GetDataBlob <PositionDB>().AbsolutePosition_m.X - worldCoord.X, 2) + Math.Pow(oneEntity.GetDataBlob <PositionDB>().AbsolutePosition_m.Y - worldCoord.Y, 2));
                        if (thisDistanceInM <= closestEntityDistInM)
                        {
                            closestEntityDistInM = thisDistanceInM;
                            closestEntity        = oneEntity;
                        }
                    }
                }
            }



            //checks if there is a closest entity
            if (closestEntity != null)
            {
                if (closestEntity.HasDataBlob <MassVolumeDB>())
                {
                    int minPixelRadius = 20;


                    //var distanceBetweenMouseAndEntity = Math.Sqrt(Math.Pow(closestEntity.GetDataBlob<PositionDB>().AbsolutePosition_m - worldCoord,2) + Math.Pow(entityPositionInScreenPixels.Y- mousePosInPixels.Y,2));
                    //int distComp = (int)Math.Sqrt(Math.Pow(50,2)/2);

                    if (closestEntityDistInM <= closestEntity.GetDataBlob <MassVolumeDB>().RadiusInM || Camera.WorldDistance(minPixelRadius) >= Distance.MToAU(closestEntityDistInM))
                    {
                        ImGui.Begin("--crash fixer--(this menu`s whole purpose is preventing a ImGui global state related game crash)");

                        EntityClicked(closestEntity.Guid, SelectedStarSysGuid, button);
                        ImGui.End();

                        if (button == MouseButtons.Alt)
                        {
                            _lastContextMenuOpenedEntityGuid = closestEntity.Guid;
                        }
                    }
                }
            }


            if (LoadedWindows.ContainsKey(typeof(ToolBarUI)))
            {
                LoadedWindows[typeof(ToolBarUI)].MapClicked(worldCoord, button);
            }
        }