Main
This commit is contained in:
Dvurechensky 2024-10-05 07:50:50 +03:00
commit d057fe2c33
7228 changed files with 1779160 additions and 0 deletions

2
.gitattributes vendored Normal file

@ -0,0 +1,2 @@
# Auto detect text files and perform LF normalization
* text=auto

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.1169
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FLCompanionByDvurechensky", "FLCompanionByDvurechensky\FLCompanionByDvurechensky.csproj", "{71B7AFC2-EB05-4098-9A50-71801EC5B23D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{71B7AFC2-EB05-4098-9A50-71801EC5B23D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{71B7AFC2-EB05-4098-9A50-71801EC5B23D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71B7AFC2-EB05-4098-9A50-71801EC5B23D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71B7AFC2-EB05-4098-9A50-71801EC5B23D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {847219A2-BC59-4603-A9CA-265F49B47271}
EndGlobalSection
EndGlobal

Binary file not shown.

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>

@ -0,0 +1,23 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Кастомизированный объект Combobox
/// </summary>
public class ComboBoxItem
{
/// <summary>
/// Текстовое поле
/// </summary>
public string Text { get; set; }
/// <summary>
/// Идентификатор
/// </summary>
public string ID { get; set; }
public override string ToString()
{
return Text;
}
}
}

@ -0,0 +1,17 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Оборудование
/// </summary>
public class Equipment
{
/// <summary>
/// Идентификатор предмета в файлах игры
/// </summary>
public string Id { get; set; }
/// <summary>
/// Имя предмета русское
/// </summary>
public string Name { get; set; }
}
}

@ -0,0 +1,46 @@
using System.Collections.Generic;
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Сюрпризик
/// </summary>
public class Loadout
{
/// <summary>
/// Конструктор
/// </summary>
public Loadout()
{
Cargo = new List<Cargo>();
}
/// <summary>
/// Имя сюрприза
/// </summary>
public string Name { get; set; }
/// <summary>
/// Тип сюрприза
/// </summary>
public string Archetype { get; set; }
/// <summary>
/// Груз сюрприза
/// </summary>
public List<Cargo> Cargo { get; set; }
}
/// <summary>
/// Объект данных груза
/// </summary>
public class Cargo
{
/// <summary>
/// Имя груза
/// </summary>
public string Name { get; set; }
/// <summary>
/// Количество груза
/// </summary>
public int Count { get; set; }
}
}

@ -0,0 +1,17 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Зона добычи груза
/// </summary>
public class LootableZone
{
/// <summary>
/// Имя зоны астероидов
/// </summary>
public string ZoneName { get; set; }
/// <summary>
/// ID груза внутри этой зоны
/// </summary>
public string LootId { get; set; }
}
}

@ -0,0 +1,49 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Класс объектов системы
/// </summary>
public class ObjectSystem
{
/// <summary>
/// ID
/// </summary>
public string ID { get; set; }
/// <summary>
/// Местоположение
/// </summary>
public int[] Pos { get; set; }
/// <summary>
/// Позиция на карте в App
/// </summary>
public int[] MapPos { get; set; }
/// <summary>
/// База ID
/// </summary>
public string BaseID { get; set; }
/// <summary>
/// Имя базы
/// </summary>
public string NameBase { get; set; }
/// <summary>
/// Инфокарта объекта
/// </summary>
public string IdsName { get; set; }
/// <summary>
/// Принадлежность объекта
/// </summary>
public string Archetype { get; set; }
/// <summary>
/// Сюрприз ли это
/// </summary>
public string Loadout { get; set; }
/// <summary>
/// Куда ведёт портал
/// </summary>
public string Goto { get; set; }
/// <summary>
/// Куда ведёт портал ID
/// </summary>
public string GotoID { get; set; }
}
}

@ -0,0 +1,29 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Объект базы
/// </summary>
public class UniverseBase
{
/// <summary>
/// ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// ID системы
/// </summary>
public string System { get; set; }
/// <summary>
/// Ссылка на имя Базы
/// </summary>
public string DLL_Name { get; set; }
/// <summary>
/// Имя базы
/// </summary>
public string Name { get; set; }
/// <summary>
/// Адрес до INI
/// </summary>
public string INI { get; set; }
}
}

@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Объект системы
/// </summary>
public class UniverseSystem
{
/// <summary>
/// Консруктор
/// </summary>
public UniverseSystem()
{
Objects = new List<ObjectSystem>();
Zones = new List<ZoneSystem>();
}
/// <summary>
/// ID
/// </summary>
public string Id { get; set; }
/// <summary>
/// Имя
/// </summary>
public string Name { get; set; }
/// <summary>
/// Адрес до INI
/// </summary>
public string INI { get; set; }
/// <summary>
/// ОТключено (Позиция системы на карте в MultiUniverse)
/// </summary>
public int[] Pos { get; set; }
/// <summary>
/// Посетил ли
/// </summary>
public int Visit { get; set; }
/// <summary>
/// Ссылка на имя в DLL
/// </summary>
public string DLL_Name { get; set; }
/// <summary>
/// Ссылка на инфоркарту DLL
/// </summary>
public string DLL_InfoCard { get; set; }
/// <summary>
/// НЕ работает(позиция на карте теперь в MultiUniverse)
/// </summary>
public double NavMapScale { get; set; }
/// <summary>
/// Итоговый радиус системы
/// </summary>
public int Radius
{
get
{
double val;
if (NavMapScale != 0)
{
val = 131041.0 / NavMapScale;
}
else val = 131041.0;
return (int)Math.Round(val, MidpointRounding.AwayFromZero);
}
}
/// <summary>
/// НПС говорят название объекта
/// </summary>
public string MsgIdPrefix { get; set; }
/// <summary>
/// Список объектов
/// </summary>
public List<ObjectSystem> Objects { get; set; }
/// <summary>
/// Список зон
/// </summary>
public List<ZoneSystem> Zones { get; set; }
}
}

@ -0,0 +1,17 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Класс зоны системы
/// </summary>
public class ZoneSystem
{
/// <summary>
/// ID
/// </summary>
public string ID { get; set; }
/// <summary>
/// Местоположение
/// </summary>
public int[] Pos { get; set; }
}
}

@ -0,0 +1,7 @@
namespace Freelancer_Companion_by_Dormammu.Extensions
{
public static class Extension
{
}
}

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{71B7AFC2-EB05-4098-9A50-71801EC5B23D}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>FLCompanionByDvurechensky</RootNamespace>
<AssemblyName>FLCompanionByDvurechensky</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>ico.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="GraphX.Standard.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\GraphX.3.0.0\lib\net461\GraphX.Standard.Common.dll</HintPath>
</Reference>
<Reference Include="GraphX.Standard.Logic, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\GraphX.3.0.0\lib\net461\GraphX.Standard.Logic.dll</HintPath>
</Reference>
<Reference Include="GraphX.WPF.Controls, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\GraphX.3.0.0\lib\net461\GraphX.WPF.Controls.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="QuickGraph, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\QuickGraphCore.1.0.0\lib\net40\QuickGraph.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="UIAutomationProvider" />
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
</ItemGroup>
<ItemGroup>
<Compile Include="Data\ComboBoxItem.cs" />
<Compile Include="Data\Equipment.cs" />
<Compile Include="Data\Loadout.cs" />
<Compile Include="Data\LootableZone.cs" />
<Compile Include="Data\ObjectSystem.cs" />
<Compile Include="Data\ZoneSystem.cs" />
<Compile Include="Models\Dijkstra.cs" />
<Compile Include="Models\Graph.cs" />
<Compile Include="Models\GraphEdge.cs" />
<Compile Include="Models\GraphVertex.cs" />
<Compile Include="Models\GraphVertexInfo.cs" />
<Compile Include="Data\UniverseBase.cs" />
<Compile Include="Data\UniverseSystem.cs" />
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Models\DataEdge.cs" />
<Compile Include="Models\DataVertex.cs" />
<Compile Include="Models\GraphAreaExample.cs" />
<Compile Include="Models\GraphExample.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\DrawService.cs" />
<Compile Include="Services\LogService.cs" />
<Compile Include="Services\SystemService.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Page Include="Templates\template.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
</ItemGroup>
<ItemGroup>
<Content Include="ico.ico" />
<Content Include="Resources\tr_red.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

@ -0,0 +1,423 @@
namespace FLCompanionByDvurechensky
{
partial class FreelancerCompanionDvurechensky
{
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Код, автоматически созданный конструктором форм Windows
/// <summary>
/// Требуемый метод для поддержки конструктора — не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FreelancerCompanionDvurechensky));
this.Map = new System.Windows.Forms.PictureBox();
this.comboBoxSystems = new System.Windows.Forms.ComboBox();
this.labelSystemss = new System.Windows.Forms.Label();
this.LoggerRichTextBox = new System.Windows.Forms.RichTextBox();
this.flowLayoutPanelNames = new System.Windows.Forms.FlowLayoutPanel();
this.checkBoxBases = new System.Windows.Forms.CheckBox();
this.checkBoxContainers = new System.Windows.Forms.CheckBox();
this.checkBoxAll = new System.Windows.Forms.CheckBox();
this.checkBoxHoll = new System.Windows.Forms.CheckBox();
this.textBoxX = new System.Windows.Forms.TextBox();
this.textBoxY = new System.Windows.Forms.TextBox();
this.textBoxZ = new System.Windows.Forms.TextBox();
this.wpfHost = new System.Windows.Forms.Integration.ElementHost();
this.but_generate = new System.Windows.Forms.Button();
this.but_reload = new System.Windows.Forms.Button();
this.buttonSetRoad = new System.Windows.Forms.Button();
this.comboBoxRoadFirst = new System.Windows.Forms.ComboBox();
this.comboBoxRoadLast = new System.Windows.Forms.ComboBox();
this.checkBoxRusNames = new System.Windows.Forms.CheckBox();
this.buttonCloseMap = new System.Windows.Forms.Button();
this.comboBoxSearch = new System.Windows.Forms.ComboBox();
this.labelSearch = new System.Windows.Forms.Label();
this.checkBoxSearchState = new System.Windows.Forms.CheckBox();
this.buttonSearchEquipment = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.Map)).BeginInit();
this.SuspendLayout();
//
// Map
//
this.Map.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.Map.Location = new System.Drawing.Point(0, -2);
this.Map.Name = "Map";
this.Map.Size = new System.Drawing.Size(800, 800);
this.Map.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.Map.TabIndex = 1;
this.Map.TabStop = false;
this.Map.Paint += new System.Windows.Forms.PaintEventHandler(this.Map_Paint);
//
// comboBoxSystems
//
this.comboBoxSystems.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.comboBoxSystems.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBoxSystems.DisplayMember = "Add";
this.comboBoxSystems.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.comboBoxSystems.FormattingEnabled = true;
this.comboBoxSystems.Location = new System.Drawing.Point(806, 1);
this.comboBoxSystems.Name = "comboBoxSystems";
this.comboBoxSystems.Size = new System.Drawing.Size(406, 24);
this.comboBoxSystems.TabIndex = 2;
this.comboBoxSystems.SelectedIndexChanged += new System.EventHandler(this.comboBoxSystems_SelectedIndexChanged);
this.comboBoxSystems.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ComboBoxSystems_KeyPress);
//
// labelSystemss
//
this.labelSystemss.AutoSize = true;
this.labelSystemss.BackColor = System.Drawing.Color.DarkOrchid;
this.labelSystemss.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.labelSystemss.Font = new System.Drawing.Font("MS PGothic", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelSystemss.ForeColor = System.Drawing.Color.FloralWhite;
this.labelSystemss.Location = new System.Drawing.Point(1228, 4);
this.labelSystemss.Name = "labelSystemss";
this.labelSystemss.Size = new System.Drawing.Size(44, 21);
this.labelSystemss.TabIndex = 3;
this.labelSystemss.Text = "999";
this.labelSystemss.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// LoggerRichTextBox
//
this.LoggerRichTextBox.Font = new System.Drawing.Font("Microsoft YaHei", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.LoggerRichTextBox.Location = new System.Drawing.Point(806, 473);
this.LoggerRichTextBox.Name = "LoggerRichTextBox";
this.LoggerRichTextBox.Size = new System.Drawing.Size(476, 325);
this.LoggerRichTextBox.TabIndex = 4;
this.LoggerRichTextBox.Text = "";
//
// flowLayoutPanelNames
//
this.flowLayoutPanelNames.AutoScroll = true;
this.flowLayoutPanelNames.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.flowLayoutPanelNames.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.flowLayoutPanelNames.Location = new System.Drawing.Point(806, 185);
this.flowLayoutPanelNames.Name = "flowLayoutPanelNames";
this.flowLayoutPanelNames.Size = new System.Drawing.Size(476, 252);
this.flowLayoutPanelNames.TabIndex = 5;
//
// checkBoxBases
//
this.checkBoxBases.AutoSize = true;
this.checkBoxBases.Font = new System.Drawing.Font("Mongolian Baiti", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxBases.Location = new System.Drawing.Point(806, 31);
this.checkBoxBases.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxBases.Name = "checkBoxBases";
this.checkBoxBases.Size = new System.Drawing.Size(128, 24);
this.checkBoxBases.TabIndex = 6;
this.checkBoxBases.Text = "Показать базы";
this.checkBoxBases.UseVisualStyleBackColor = true;
this.checkBoxBases.CheckedChanged += new System.EventHandler(this.checkBoxBases_CheckedChanged);
//
// checkBoxContainers
//
this.checkBoxContainers.AutoSize = true;
this.checkBoxContainers.Font = new System.Drawing.Font("Mongolian Baiti", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxContainers.Location = new System.Drawing.Point(805, 53);
this.checkBoxContainers.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxContainers.Name = "checkBoxContainers";
this.checkBoxContainers.Size = new System.Drawing.Size(175, 24);
this.checkBoxContainers.TabIndex = 7;
this.checkBoxContainers.Text = "Показать контейнеры";
this.checkBoxContainers.UseVisualStyleBackColor = true;
this.checkBoxContainers.CheckedChanged += new System.EventHandler(this.checkBoxContainers_CheckedChanged);
//
// checkBoxAll
//
this.checkBoxAll.AutoSize = true;
this.checkBoxAll.Font = new System.Drawing.Font("Mongolian Baiti", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxAll.Location = new System.Drawing.Point(1033, 27);
this.checkBoxAll.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxAll.Name = "checkBoxAll";
this.checkBoxAll.Size = new System.Drawing.Size(117, 24);
this.checkBoxAll.TabIndex = 8;
this.checkBoxAll.Text = "Показать всё";
this.checkBoxAll.UseVisualStyleBackColor = true;
this.checkBoxAll.CheckedChanged += new System.EventHandler(this.checkBoxAll_CheckedChanged);
//
// checkBoxHoll
//
this.checkBoxHoll.AutoSize = true;
this.checkBoxHoll.Font = new System.Drawing.Font("Mongolian Baiti", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxHoll.Location = new System.Drawing.Point(1032, 53);
this.checkBoxHoll.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxHoll.Name = "checkBoxHoll";
this.checkBoxHoll.Size = new System.Drawing.Size(152, 24);
this.checkBoxHoll.TabIndex = 9;
this.checkBoxHoll.Text = "Показать порталы";
this.checkBoxHoll.UseVisualStyleBackColor = true;
this.checkBoxHoll.CheckedChanged += new System.EventHandler(this.checkBoxHoll_CheckedChanged);
//
// textBoxX
//
this.textBoxX.Location = new System.Drawing.Point(1214, 28);
this.textBoxX.Name = "textBoxX";
this.textBoxX.Size = new System.Drawing.Size(68, 20);
this.textBoxX.TabIndex = 10;
this.textBoxX.Text = "X";
this.textBoxX.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// textBoxY
//
this.textBoxY.Location = new System.Drawing.Point(1214, 53);
this.textBoxY.Name = "textBoxY";
this.textBoxY.Size = new System.Drawing.Size(68, 20);
this.textBoxY.TabIndex = 11;
this.textBoxY.Text = "Y";
this.textBoxY.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// textBoxZ
//
this.textBoxZ.Location = new System.Drawing.Point(1214, 79);
this.textBoxZ.Name = "textBoxZ";
this.textBoxZ.Size = new System.Drawing.Size(68, 20);
this.textBoxZ.TabIndex = 12;
this.textBoxZ.Text = "Z";
this.textBoxZ.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// wpfHost
//
this.wpfHost.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.wpfHost.BackColor = System.Drawing.Color.White;
this.wpfHost.Location = new System.Drawing.Point(0, -2);
this.wpfHost.Name = "wpfHost";
this.wpfHost.Size = new System.Drawing.Size(801, 800);
this.wpfHost.TabIndex = 14;
this.wpfHost.Text = "elementHost1";
this.wpfHost.Visible = false;
this.wpfHost.Child = null;
//
// but_generate
//
this.but_generate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.but_generate.Image = ((System.Drawing.Image)(resources.GetObject("but_generate.Image")));
this.but_generate.Location = new System.Drawing.Point(806, 113);
this.but_generate.Name = "but_generate";
this.but_generate.Size = new System.Drawing.Size(65, 67);
this.but_generate.TabIndex = 2;
this.but_generate.UseVisualStyleBackColor = true;
this.but_generate.Click += new System.EventHandler(this.but_generate_Click);
//
// but_reload
//
this.but_reload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.but_reload.Image = ((System.Drawing.Image)(resources.GetObject("but_reload.Image")));
this.but_reload.Location = new System.Drawing.Point(877, 115);
this.but_reload.Name = "but_reload";
this.but_reload.Size = new System.Drawing.Size(65, 65);
this.but_reload.TabIndex = 15;
this.but_reload.UseVisualStyleBackColor = true;
this.but_reload.Click += new System.EventHandler(this.but_reload_Click);
//
// buttonSetRoad
//
this.buttonSetRoad.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.buttonSetRoad.Enabled = false;
this.buttonSetRoad.Image = ((System.Drawing.Image)(resources.GetObject("buttonSetRoad.Image")));
this.buttonSetRoad.Location = new System.Drawing.Point(948, 115);
this.buttonSetRoad.Name = "buttonSetRoad";
this.buttonSetRoad.Size = new System.Drawing.Size(65, 65);
this.buttonSetRoad.TabIndex = 16;
this.buttonSetRoad.UseVisualStyleBackColor = true;
this.buttonSetRoad.Click += new System.EventHandler(this.ButtonSetRoad_Click);
//
// comboBoxRoadFirst
//
this.comboBoxRoadFirst.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.comboBoxRoadFirst.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBoxRoadFirst.DisplayMember = "Add";
this.comboBoxRoadFirst.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.comboBoxRoadFirst.FormattingEnabled = true;
this.comboBoxRoadFirst.Location = new System.Drawing.Point(1019, 115);
this.comboBoxRoadFirst.Name = "comboBoxRoadFirst";
this.comboBoxRoadFirst.Size = new System.Drawing.Size(263, 24);
this.comboBoxRoadFirst.TabIndex = 17;
//
// comboBoxRoadLast
//
this.comboBoxRoadLast.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.comboBoxRoadLast.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBoxRoadLast.DisplayMember = "Add";
this.comboBoxRoadLast.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.comboBoxRoadLast.FormattingEnabled = true;
this.comboBoxRoadLast.Location = new System.Drawing.Point(1019, 155);
this.comboBoxRoadLast.Name = "comboBoxRoadLast";
this.comboBoxRoadLast.Size = new System.Drawing.Size(263, 24);
this.comboBoxRoadLast.TabIndex = 18;
//
// checkBoxRusNames
//
this.checkBoxRusNames.AutoSize = true;
this.checkBoxRusNames.Font = new System.Drawing.Font("Mongolian Baiti", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxRusNames.Location = new System.Drawing.Point(1033, 79);
this.checkBoxRusNames.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxRusNames.Name = "checkBoxRusNames";
this.checkBoxRusNames.Size = new System.Drawing.Size(118, 24);
this.checkBoxRusNames.TabIndex = 19;
this.checkBoxRusNames.Text = "Русский язык";
this.checkBoxRusNames.UseVisualStyleBackColor = true;
//
// buttonCloseMap
//
this.buttonCloseMap.BackColor = System.Drawing.Color.DarkGoldenrod;
this.buttonCloseMap.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.buttonCloseMap.Cursor = System.Windows.Forms.Cursors.Hand;
this.buttonCloseMap.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.buttonCloseMap.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.buttonCloseMap.ForeColor = System.Drawing.Color.AliceBlue;
this.buttonCloseMap.Location = new System.Drawing.Point(806, 83);
this.buttonCloseMap.Name = "buttonCloseMap";
this.buttonCloseMap.Size = new System.Drawing.Size(25, 23);
this.buttonCloseMap.TabIndex = 20;
this.buttonCloseMap.Text = "X";
this.buttonCloseMap.UseVisualStyleBackColor = false;
this.buttonCloseMap.Click += new System.EventHandler(this.buttonCloseMap_Click);
//
// comboBoxSearch
//
this.comboBoxSearch.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
this.comboBoxSearch.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBoxSearch.DisplayMember = "Add";
this.comboBoxSearch.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.comboBoxSearch.FormattingEnabled = true;
this.comboBoxSearch.Location = new System.Drawing.Point(961, 443);
this.comboBoxSearch.Name = "comboBoxSearch";
this.comboBoxSearch.Size = new System.Drawing.Size(251, 24);
this.comboBoxSearch.TabIndex = 21;
this.comboBoxSearch.SelectedIndexChanged += new System.EventHandler(this.comboBoxSearch_SelectedIndexChanged);
this.comboBoxSearch.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ComboBoxSearch_KeyPress);
//
// labelSearch
//
this.labelSearch.AutoSize = true;
this.labelSearch.BackColor = System.Drawing.Color.Cornsilk;
this.labelSearch.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.labelSearch.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.labelSearch.Location = new System.Drawing.Point(807, 447);
this.labelSearch.Name = "labelSearch";
this.labelSearch.Size = new System.Drawing.Size(148, 20);
this.labelSearch.TabIndex = 22;
this.labelSearch.Text = "Поиск элемента";
//
// checkBoxSearchState
//
this.checkBoxSearchState.AutoSize = true;
this.checkBoxSearchState.Font = new System.Drawing.Font("Mongolian Baiti", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.checkBoxSearchState.Location = new System.Drawing.Point(852, 83);
this.checkBoxSearchState.Margin = new System.Windows.Forms.Padding(2);
this.checkBoxSearchState.Name = "checkBoxSearchState";
this.checkBoxSearchState.Size = new System.Drawing.Size(161, 24);
this.checkBoxSearchState.TabIndex = 23;
this.checkBoxSearchState.Text = "Алгоритм Дейкстры";
this.checkBoxSearchState.UseVisualStyleBackColor = true;
//
// buttonSearchEquipment
//
this.buttonSearchEquipment.BackColor = System.Drawing.Color.Orange;
this.buttonSearchEquipment.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
this.buttonSearchEquipment.Cursor = System.Windows.Forms.Cursors.Hand;
this.buttonSearchEquipment.FlatAppearance.BorderColor = System.Drawing.Color.Red;
this.buttonSearchEquipment.FlatAppearance.MouseDownBackColor = System.Drawing.Color.Black;
this.buttonSearchEquipment.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Gray;
this.buttonSearchEquipment.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.buttonSearchEquipment.ForeColor = System.Drawing.Color.Black;
this.buttonSearchEquipment.Location = new System.Drawing.Point(1218, 444);
this.buttonSearchEquipment.Name = "buttonSearchEquipment";
this.buttonSearchEquipment.Size = new System.Drawing.Size(64, 23);
this.buttonSearchEquipment.TabIndex = 24;
this.buttonSearchEquipment.Text = "Поиск";
this.buttonSearchEquipment.UseVisualStyleBackColor = false;
this.buttonSearchEquipment.Click += new System.EventHandler(this.ButtonSearchEquipment_Click);
//
// FreelancerCompanionDvurechensky
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.Cornsilk;
this.ClientSize = new System.Drawing.Size(1294, 800);
this.Controls.Add(this.buttonSearchEquipment);
this.Controls.Add(this.checkBoxSearchState);
this.Controls.Add(this.labelSearch);
this.Controls.Add(this.comboBoxSearch);
this.Controls.Add(this.buttonCloseMap);
this.Controls.Add(this.checkBoxRusNames);
this.Controls.Add(this.comboBoxRoadLast);
this.Controls.Add(this.comboBoxRoadFirst);
this.Controls.Add(this.buttonSetRoad);
this.Controls.Add(this.but_reload);
this.Controls.Add(this.but_generate);
this.Controls.Add(this.wpfHost);
this.Controls.Add(this.textBoxZ);
this.Controls.Add(this.textBoxY);
this.Controls.Add(this.textBoxX);
this.Controls.Add(this.checkBoxHoll);
this.Controls.Add(this.checkBoxAll);
this.Controls.Add(this.checkBoxContainers);
this.Controls.Add(this.checkBoxBases);
this.Controls.Add(this.flowLayoutPanelNames);
this.Controls.Add(this.LoggerRichTextBox);
this.Controls.Add(this.labelSystemss);
this.Controls.Add(this.comboBoxSystems);
this.Controls.Add(this.Map);
this.MaximizeBox = false;
this.MaximumSize = new System.Drawing.Size(1509, 1032);
this.MinimizeBox = false;
this.MinimumSize = new System.Drawing.Size(1310, 838);
this.Name = "FreelancerCompanionDvurechensky";
this.ShowIcon = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "FLCompanion by Dvurechensky";
((System.ComponentModel.ISupportInitialize)(this.Map)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox Map;
private System.Windows.Forms.ComboBox comboBoxSystems;
private System.Windows.Forms.Label labelSystemss;
private System.Windows.Forms.RichTextBox LoggerRichTextBox;
private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelNames;
private System.Windows.Forms.CheckBox checkBoxBases;
private System.Windows.Forms.CheckBox checkBoxContainers;
private System.Windows.Forms.CheckBox checkBoxAll;
private System.Windows.Forms.CheckBox checkBoxHoll;
private System.Windows.Forms.TextBox textBoxX;
private System.Windows.Forms.TextBox textBoxY;
private System.Windows.Forms.TextBox textBoxZ;
private System.Windows.Forms.Integration.ElementHost wpfHost;
private System.Windows.Forms.Button but_generate;
private System.Windows.Forms.Button but_reload;
private System.Windows.Forms.Button buttonSetRoad;
private System.Windows.Forms.ComboBox comboBoxRoadFirst;
private System.Windows.Forms.ComboBox comboBoxRoadLast;
private System.Windows.Forms.CheckBox checkBoxRusNames;
private System.Windows.Forms.Button buttonCloseMap;
private System.Windows.Forms.ComboBox comboBoxSearch;
private System.Windows.Forms.Label labelSearch;
private System.Windows.Forms.CheckBox checkBoxSearchState;
private System.Windows.Forms.Button buttonSearchEquipment;
}
}

@ -0,0 +1,969 @@
using FLCompanionByDvurechensky.Data;
using FLCompanionByDvurechensky.Services;
using GraphX.Common.Enums;
using GraphX.Controls.Models;
using GraphX.Controls;
using GraphX.Logic.Algorithms.OverlapRemoval;
using GraphX.Logic.Models;
using QuickGraph;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using WindowsFormsProject;
using System.Reflection;
using System.Threading.Tasks;
namespace FLCompanionByDvurechensky
{
/// <summary>
/// Главный класс
/// </summary>
public partial class FreelancerCompanionDvurechensky : Form
{
public LogService LogService { get; set; }
private DrawService DrawService { get; set; }
private SystemService SystemService { get; set; }
private List<ObjectSystem> ObjectPoints { get; set; }
private Bitmap ImageMap { get; set; }
private double KeyResize { get; set; }
private double KeyOverSize { get; set; }
private string CurrentSystem { get; set; }
private ZoomControl Zoomctrl { get; set; }
private GraphAreaExample GArea { get; set; }
private GXLogicCore<DataVertex, DataEdge, BidirectionalGraph<DataVertex, DataEdge>> gXLogic { get; set; }
private string[] VerticleRoad { get; set; }
private string[] GererateRoads { get; set; }
public FreelancerCompanionDvurechensky()
{
//строительство формы
InitializeComponent();
//старт сервиса логирования системы
LogService = new LogService(LoggerRichTextBox);
//инициализация приближения и отдаления карты колесом мыши
Map.MouseWheel += Map_MouseWheel;
//ожидание открытия
this.Shown += FreelancerCompanionDvurechensky_Show;
}
/// <summary>
/// Событие после первого отображения формы
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FreelancerCompanionDvurechensky_Show(object sender, EventArgs e)
{
//загрузка данных
InitializeSystems();
}
/// <summary>
/// Доп. операции над картой колёсиком мыши (приближение/отдаление)
/// </summary>
/// <param name="sender">#</param>
/// <param name="e">Мышь</param>
private void Map_MouseWheel(object sender, MouseEventArgs e)
{
if(e.Delta > 0)
{
Map.Location = new Point(Map.Location.X - 10, Map.Location.Y - 10);
Map.Width += 10;
Map.Height += 10;
}
else
{
Map.Location = new Point(Map.Location.X + 10, Map.Location.Y + 10);
Map.Width -= 10;
Map.Height -= 10;
}
}
/// <summary>
/// Загрузка данных систем
/// </summary>
private void InitializeSystems()
{
checkBoxRusNames.Checked = true;
SystemService = new SystemService(isRussian: checkBoxRusNames.Checked, logService: LogService);
DrawService = new DrawService(5, 3);
SystemService.GetInfo(comboBoxSystems, comboBoxRoadFirst, comboBoxRoadLast, comboBoxSearch, LogService);
labelSystemss.Text = comboBoxSystems.Items.Count.ToString();
}
/// <summary>
/// Отрисовка первоначального вида карты
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Map_Paint(object sender, PaintEventArgs e)
{
int w = Map.ClientSize.Width / 2;
int h = Map.ClientSize.Height / 2;
//Смещение начала координат в центр PictureBox
e.Graphics.TranslateTransform(w, h);
}
//первая координата это X отрицательно влево - положительно вправо
//вторая коордианат это Y отрицательно вверх - положительно вниз
//третья координата это Z отрицательно вниз - положительно вверх
private void comboBoxSystems_SelectedIndexChanged(object sender, System.EventArgs e)
{
var comboBox = (ComboBox)sender;
Map.Location = new Point(0, 0);
Map.Width = 800;
Map.Height = 800;
flowLayoutPanelNames.Controls.Clear();
ObjectPoints = new List<ObjectSystem>();
CurrentSystem = SystemService.SystemsID[comboBox.SelectedIndex];
KeyResize = (double)400 / SystemService.UniverseSystemsData[CurrentSystem].Radius;
ImageMap = new Bitmap(Map.Width, Map.Height);
Map.Image = ImageMap;
checkBoxContainers.Checked = false;
checkBoxBases.Checked = false;
var listMaxTmp = new List<int>();
var radius = SystemService.UniverseSystemsData[CurrentSystem].Radius;
foreach (var bases in SystemService.UniverseSystemsData[CurrentSystem].Objects.FindAll((objectEl) => !objectEl.ID.ToLower().Contains("zone_") && !objectEl.ID.ToLower().Contains("_sun")))
{
listMaxTmp.Add(Math.Abs(bases.Pos[0]));
listMaxTmp.Add(Math.Abs(bases.Pos[1]));
listMaxTmp.Add(Math.Abs(bases.Pos[2]));
}
var maxCoordSystem = listMaxTmp.Max();
if (maxCoordSystem > radius)
{
KeyOverSize = Math.Round((double)maxCoordSystem / radius, 5);
KeyResize /= KeyOverSize;
KeyResize = Math.Round(KeyResize, 5);
}
else KeyOverSize = 0;
RepaintAxis();
LogService.LogEvent($"Open [{comboBox.SelectedIndex + 1}] {comboBox.Text}");
}
private void RepaintAxis()
{
var gr = Graphics.FromImage(Map.Image);
ClearMap(gr);
//отрисовка осей
int w = Map.ClientSize.Width / 2;
int h = Map.ClientSize.Height / 2;
//Смещение начала координат в центр PictureBox
gr.TranslateTransform(w, h);
int newSizeW = 0;
int newSizeH = 0;
if (KeyOverSize > 0) newSizeW = (int)Math.Round((double)(w / KeyOverSize), MidpointRounding.AwayFromZero);
else newSizeW = w;
if (KeyOverSize > 0) newSizeH = (int)Math.Round((double)(double)(h / KeyOverSize), MidpointRounding.AwayFromZero);
else newSizeH = h;
//X
DrawService.DrawXAxis(new Point(-newSizeW, newSizeW), new Point(newSizeW, newSizeW), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, 0), new Point(newSizeW, 0), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, newSizeW - newSizeW / 2), new Point(newSizeW, newSizeW - newSizeW / 2), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, newSizeW - (newSizeW / 2 + newSizeW / 4)), new Point(newSizeW, newSizeW - (newSizeW / 2 + newSizeW / 4)), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, newSizeW - newSizeW / 4), new Point(newSizeW, newSizeW - newSizeW / 4), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, -newSizeW), new Point(newSizeW, -newSizeW), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, -(newSizeW - newSizeW / 2)), new Point(newSizeW, -(newSizeW - newSizeW / 2)), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, -(newSizeW - (newSizeW / 2 + newSizeW / 4))), new Point(newSizeW, -(newSizeW - (newSizeW / 2 + newSizeW / 4))), gr, false);
DrawService.DrawXAxis(new Point(-newSizeW, -(newSizeW - newSizeW / 4)), new Point(newSizeW, -(newSizeW - newSizeW / 4)), gr, false);
//Y
DrawService.DrawYAxis(new Point(-newSizeH, newSizeH), new Point(-newSizeH, -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(0, newSizeH), new Point(0, -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(newSizeW - newSizeW / 2, newSizeH), new Point(newSizeW - newSizeW / 2, -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(newSizeW - (newSizeW / 2 + newSizeW / 4), newSizeH), new Point(newSizeW - (newSizeW / 2 + newSizeW / 4), -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(newSizeW - newSizeW / 4, newSizeH), new Point(newSizeW - newSizeW / 4, -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(newSizeH, newSizeH), new Point(newSizeH, -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(-(newSizeW - newSizeW / 2), newSizeH), new Point(-(newSizeW - newSizeW / 2), -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(-(newSizeW - (newSizeW / 2 + newSizeW / 4)), newSizeH), new Point(-(newSizeW - (newSizeW / 2 + newSizeW / 4)), -newSizeH), gr, false);
DrawService.DrawYAxis(new Point(-(newSizeW - newSizeW / 4), newSizeH), new Point(-(newSizeW - newSizeW / 4), -newSizeH), gr, false);
checkBoxAll.Checked = false;
checkBoxBases.Checked = false;
checkBoxContainers.Checked = false;
checkBoxHoll.Checked = false;
}
private void ClearMap(Graphics graphics)
{
DrawService.DrawPoint(-Map.Width, -Map.Height, Map.Width, Map.Height, graphics, Color.White, Map.Width * 2, Map.Height * 2);
}
private void checkBoxBases_CheckedChanged(object sender, EventArgs e)
{
var checkBoxBases = (CheckBox)sender;
using (Graphics gr = Graphics.FromImage(ImageMap))
{
var counter = 0;
foreach (var baseID in SystemService.UniverseSystemsData[CurrentSystem].Objects.FindAll((baseId) => baseId.BaseID != null).ToArray())
{
int x = (int)Math.Round(KeyResize * baseID.Pos[0], MidpointRounding.AwayFromZero);
int y = (int)Math.Round(KeyResize * baseID.Pos[2], MidpointRounding.AwayFromZero);
int[] mapPos = new int[3];
mapPos[0] = x;
mapPos[1] = y;
mapPos[2] = baseID.Pos[1];
baseID.MapPos = mapPos;
if (!ObjectPoints.Contains(baseID))
ObjectPoints.Add(baseID);
//рисую или стираю точки на карте
if (checkBoxBases.Checked == true)
{
counter++;
//Формирую вывод UI
var button = new Button();
button.Width = 231;
button.Height = 30;
var tooltip = new ToolTip();
tooltip.SetToolTip(button, $"Z: [{baseID.Pos[1]}] X: [{baseID.Pos[0]}] Y: [{baseID.Pos[2]}]\n" + ((baseID.Archetype != null) ? baseID.Archetype : string.Empty));
button.MouseEnter += Base_MouseEnter;
button.MouseLeave += Base_MouseLeave;
button.Click += OpenPos_Click;
button.Name = baseID.BaseID;
var nameTmp = baseID.BaseID.ToLower();
button.Text = (!string.IsNullOrEmpty(SystemService.UniverseBasesData[nameTmp].Name)) ? "[" + counter + "]" + SystemService.UniverseBasesData[nameTmp].Name : "[" + counter + "]" + baseID.ID;
flowLayoutPanelNames.Controls.Add(button);
}
else flowLayoutPanelNames.Controls.Clear();
//рисую или стираю точки на карте
if (checkBoxBases.Checked == true) DrawService.DrawPoint(x, y, Map.Width, Map.Height, gr, Color.Blue, 6, 6);
else RepaintAxis();
}
Map.Image = ImageMap;
}
}
private void OpenPos_Click(object sender, EventArgs e)
{
var btn = (Button)sender;
textBoxX.Text = ObjectPoints.Find((obj) => obj.ID.Contains(btn.Name) || (obj.BaseID != null && obj.BaseID.Contains(btn.Name))).Pos[0].ToString();
textBoxY.Text = ObjectPoints.Find((obj) => obj.ID.Contains(btn.Name) || (obj.BaseID != null && obj.BaseID.Contains(btn.Name))).Pos[1].ToString();
textBoxZ.Text = ObjectPoints.Find((obj) => obj.ID.Contains(btn.Name) || (obj.BaseID != null && obj.BaseID.Contains(btn.Name))).Pos[2].ToString();
}
private void Holl_Click(object sender, EventArgs e)
{
var btn = (Button)sender;
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
{
var obj = ObjectPoints.Find((t) => t.ID.Contains(btn.Name));
var index = Array.IndexOf(SystemService.ArraySystemsCombobox, obj.GotoID);
comboBoxSystems.SelectedIndex = index;
}
else
{
textBoxX.Text = ObjectPoints.Find((obj) => obj.ID.Contains(btn.Name) || (obj.BaseID != null && obj.BaseID.Contains(btn.Name))).Pos[0].ToString();
textBoxY.Text = ObjectPoints.Find((obj) => obj.ID.Contains(btn.Name) || (obj.BaseID != null && obj.BaseID.Contains(btn.Name))).Pos[1].ToString();
textBoxZ.Text = ObjectPoints.Find((obj) => obj.ID.Contains(btn.Name) || (obj.BaseID != null && obj.BaseID.Contains(btn.Name))).Pos[2].ToString();
}
}
private void checkBoxContainers_CheckedChanged(object sender, EventArgs e)
{
var checkBoxContainers = (CheckBox)sender;
using (Graphics gr = Graphics.FromImage(ImageMap))
{
var counter = 0;
foreach (var objectElement in SystemService.UniverseSystemsData[CurrentSystem].Objects)
{
var id = objectElement.ID.ToLower();
bool ok = false;
if (objectElement.Loadout != null && SystemService.Loadouts.Find((l) => l.Name.Contains(objectElement.Loadout.ToLower())) != null) ok = true;
if (!ok) continue;
int x = (int)Math.Round(KeyResize * objectElement.Pos[0], MidpointRounding.AwayFromZero);
int y = (int)Math.Round(KeyResize * objectElement.Pos[2], MidpointRounding.AwayFromZero);
int[] mapPos = new int[3];
mapPos[0] = x;
mapPos[1] = y;
mapPos[2] = objectElement.Pos[1];
objectElement.MapPos = mapPos;
if (!ObjectPoints.Contains(objectElement))
ObjectPoints.Add(objectElement);
//рисую или стираю точки на карте
if (checkBoxContainers.Checked == true)
{
counter++;
//Формирую вывод UI
var button = new Button();
button.Width = 231;
button.Height = 30;
var tooltip = new ToolTip();
tooltip.SetToolTip(button, $"Z: [{objectElement.Pos[1]}] X: [{objectElement.Pos[0]}] Y: [{objectElement.Pos[2]}]\n" + ((objectElement.Archetype != null) ? objectElement.Archetype : string.Empty));
button.MouseEnter += Container_MouseEnter;
button.MouseLeave += Container_MouseLeave;
button.Click += OpenPos_Click;
button.Name = objectElement.ID;
var nameTmp = objectElement.ID.ToLower();
button.Text = "[" + counter + "]" + objectElement.ID;
flowLayoutPanelNames.Controls.Add(button);
}
else flowLayoutPanelNames.Controls.Clear();
//рисую или стираю точки на карте
if (checkBoxContainers.Checked == true) DrawService.DrawPoint(x, y, Map.Width, Map.Height, gr, Color.DarkCyan);
else RepaintAxis();
}
Map.Image = ImageMap;
}
}
private void checkBoxHoll_CheckedChanged(object sender, EventArgs e)
{
var checkBoxHoll = (CheckBox)sender;
using (Graphics gr = Graphics.FromImage(ImageMap))
{
var counter = 0;
foreach (var objectElement in SystemService.UniverseSystemsData[CurrentSystem].Objects.FindAll((objectEl) => (objectEl.GotoID != null)))//objectEl.ID.Contains("_hole") || objectEl.ID.ToLower().Contains(CurrentSystem.ToLower()+"_to")) && !objectEl.ID.Contains("Zone_"))
{
int x = (int)Math.Round(KeyResize * objectElement.Pos[0], MidpointRounding.AwayFromZero);
int y = (int)Math.Round(KeyResize * objectElement.Pos[2], MidpointRounding.AwayFromZero);
int[] mapPos = new int[3];
mapPos[0] = x;
mapPos[1] = y;
mapPos[2] = objectElement.Pos[1];
objectElement.MapPos = mapPos;
if (!ObjectPoints.Contains(objectElement))
ObjectPoints.Add(objectElement);
//рисую или стираю точки на карте
if (checkBoxHoll.Checked == true)
{
counter++;
//Формирую вывод UI
var button = new Button();
button.Width = 231;
button.Height = 30;
var tooltip = new ToolTip();
tooltip.SetToolTip(button, $"Z: [{objectElement.Pos[1]}] X: [{objectElement.Pos[0]}] Y: [{objectElement.Pos[2]}]\n" + ((objectElement.Archetype != null) ? objectElement.Archetype : string.Empty));
button.MouseEnter += All_MouseEnter;
button.MouseLeave += All_MouseLeave;
button.Click += Holl_Click;
button.Name = objectElement.ID;
var nameTmp = objectElement.ID.ToLower();
button.Text = "[" + counter + "]" + (!string.IsNullOrEmpty(objectElement.Goto) ? objectElement.Goto : objectElement.ID);
flowLayoutPanelNames.Controls.Add(button);
}
else flowLayoutPanelNames.Controls.Clear();
//рисую или стираю точки на карте
if (checkBoxHoll.Checked == true) DrawService.DrawPoint(x, y, Map.Width, Map.Height, gr, Color.DarkOrchid);
else RepaintAxis();
}
Map.Image = ImageMap;
}
}
private void checkBoxAll_CheckedChanged(object sender, EventArgs e)
{
var checkBoxAll = (CheckBox)sender;
using (Graphics gr = Graphics.FromImage(ImageMap))
{
var counter = 0;
foreach (var objectEl in SystemService.UniverseSystemsData[CurrentSystem].Objects)
{
int x = (int)Math.Round(KeyResize * objectEl.Pos[0], MidpointRounding.AwayFromZero);
int y = (int)Math.Round(KeyResize * objectEl.Pos[2], MidpointRounding.AwayFromZero);
int[] mapPos = new int[3];
mapPos[0] = x;
mapPos[1] = y;
mapPos[2] = objectEl.Pos[1];
objectEl.MapPos = mapPos;
if (!ObjectPoints.Contains(objectEl))
ObjectPoints.Add(objectEl);
//рисую или стираю точки на карте
if (checkBoxAll.Checked == true)
{
//Формирую вывод UI
var button = new Button();
button.Width = 231;
button.Height = 30;
var tooltip = new ToolTip();
tooltip.SetToolTip(button, $"Z: [{objectEl.Pos[1]}] X: [{objectEl.Pos[0]}] Y: [{objectEl.Pos[2]}]\n" + ((objectEl.Archetype != null) ? objectEl.Archetype : string.Empty));
button.MouseEnter += All_MouseEnter;
button.MouseLeave += All_MouseLeave;
button.Click += OpenPos_Click;
button.Name = objectEl.ID;
var nameTmp = objectEl.ID.ToLower();
button.Text = "[" + counter + "]" + objectEl.ID;
flowLayoutPanelNames.Controls.Add(button);
}
else flowLayoutPanelNames.Controls.Clear();
//рисую или стираю точки на карте
if (checkBoxAll.Checked == true) DrawService.DrawPoint(x, y, Map.Width, Map.Height, gr, Color.DarkOrange);
else RepaintAxis();
}
Map.Image = ImageMap;
}
}
private void ComboBoxSystems_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
int index = comboBoxSystems.FindStringExact(comboBoxSystems.Text);
comboBoxSystems.SelectedIndex = index;
}
}
private async void ComboBoxSearch_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
await SearchEquipments();
}
}
private async void ButtonSearchEquipment_Click(object sender, EventArgs e)
{
await SearchEquipments();
}
/// <summary>
/// Поиск совпадений в списке оборудования
/// </summary>
private async Task SearchEquipments()
{
comboBoxSearch.Items.Clear();
var searchListEq = new List<Equipment>();
searchListEq.AddRange(SystemService.Equipments.FindAll((eq) => (string.IsNullOrEmpty(eq.Name) ? eq.Id.Contains(comboBoxSearch.Text): eq.Name.Contains(comboBoxSearch.Text))));
if (searchListEq.Count <= 0) return;
var count = (searchListEq.Count <= 1000) ? searchListEq.Count : 1000;
for (int i = 0; i < count; i++)
{
var eq = searchListEq[i];
var equipmentsData = new ComboBoxItem
{
Text = (string.IsNullOrEmpty(eq.Name) ? eq.Id : eq.Name),
ID = eq.Id
};
comboBoxSearch.Items.Add(equipmentsData);
}
comboBoxSearch.DroppedDown = true;
}
private void Base_MouseLeave(object sender, EventArgs e)
{
var button = (Button)sender;
var obj = ObjectPoints.Find((baseEl) => baseEl.BaseID == button.Name);
var name = (string.IsNullOrEmpty(obj.NameBase)) ? button.Name : obj.NameBase;
//сделать точку обычной
using (Graphics gr = Graphics.FromImage(ImageMap))
{
DrawService.DrawText(new Point(obj.MapPos[0] + 15, obj.MapPos[1] + 15), Map.Width, Map.Height, name, gr, Brushes.White, 15);
DrawService.DrawPoint(obj.MapPos[0], obj.MapPos[1], Map.Width, Map.Height, gr, Color.Black, 10, 10);
Map.Image = ImageMap;
}
}
private void Base_MouseEnter(object sender, EventArgs e)
{
var button = (Button)sender;
var obj = ObjectPoints.Find((baseEl) => baseEl.BaseID == button.Name);
var name = (string.IsNullOrEmpty(obj.NameBase)) ? button.Name : obj.NameBase;
//сделать точку крупнее
using (Graphics gr = Graphics.FromImage(ImageMap))
{
DrawService.DrawPoint(obj.MapPos[0], obj.MapPos[1], Map.Width, Map.Height, gr, Color.Red, 10, 10);
DrawService.DrawText(new Point(obj.MapPos[0] + 15, obj.MapPos[1] + 15), Map.Width, Map.Height, name, gr, Brushes.Black, 15);
Map.Image = ImageMap;
}
}
private void Container_MouseLeave(object sender, EventArgs e)
{
var button = (Button)sender;
var obj = ObjectPoints.Find((baseEl) => baseEl.ID == button.Name);
var name = button.Name;
//сделать точку обычной
using (Graphics gr = Graphics.FromImage(ImageMap))
{
DrawService.DrawText(new Point(obj.MapPos[0] + 15, obj.MapPos[1] + 15), Map.Width, Map.Height, name, gr, Brushes.White, 15);
DrawService.DrawPoint(obj.MapPos[0], obj.MapPos[1], Map.Width, Map.Height, gr, Color.Red);
Map.Image = ImageMap;
}
}
private void Container_MouseEnter(object sender, EventArgs e)
{
var button = (Button)sender;
var obj = ObjectPoints.Find((objectEl) => objectEl.ID == button.Name);
var name = button.Name;
//сделать точку крупнее
using (Graphics gr = Graphics.FromImage(ImageMap))
{
DrawService.DrawPoint(obj.MapPos[0], obj.MapPos[1], Map.Width, Map.Height, gr, Color.LightGreen);
DrawService.DrawText(new Point(obj.MapPos[0] + 15, obj.MapPos[1] + 15), Map.Width, Map.Height, name, gr, Brushes.Black, 15);
Map.Image = ImageMap;
}
}
private void All_MouseLeave(object sender, EventArgs e)
{
var button = (Button)sender;
var obj = ObjectPoints.Find((baseEl) => baseEl.ID == button.Name);
var name = button.Name;
if (obj == null) return;
//сделать точку обычной
using (Graphics gr = Graphics.FromImage(ImageMap))
{
DrawService.DrawText(new Point(obj.MapPos[0] + 15, obj.MapPos[1] + 15), Map.Width, Map.Height, name, gr, Brushes.White, 15);
DrawService.DrawPoint(obj.MapPos[0], obj.MapPos[1], Map.Width, Map.Height, gr, Color.Brown);
Map.Image = ImageMap;
}
}
private void All_MouseEnter(object sender, EventArgs e)
{
var button = (Button)sender;
var obj = ObjectPoints.Find((objectEl) => objectEl.ID == button.Name);
var name = button.Name;
//сделать точку крупнее
using (Graphics gr = Graphics.FromImage(ImageMap))
{
DrawService.DrawPoint(obj.MapPos[0], obj.MapPos[1], Map.Width, Map.Height, gr, Color.LightGreen);
DrawService.DrawText(new Point(obj.MapPos[0] + 15, obj.MapPos[1] + 15), Map.Width, Map.Height, name, gr, Brushes.Black, 15);
Map.Image = ImageMap;
}
}
private void comboBoxSearch_SelectedIndexChanged(object sender, EventArgs e)
{
var combo = (ComboBox)sender;
LogService.LogEvent("Ищем элемент " + comboBoxSearch.Text + "(" + (combo.SelectedItem as ComboBoxItem).ID + ")" + "...");
LogService.LogEvent("------------------");
LogService.LogEvent("----Астероиды----");
//Ищу совпадения в астероидах
foreach (var ast in SystemService.SysAsteroids)
{
var val = ast.Value.FindAll((zone) => zone.LootId.Contains((combo.SelectedItem as ComboBoxItem).ID));
bool ok = false;
string zoneName = string.Empty;
foreach (var v in val)
{
if (v.ZoneName != null && v.ZoneName.Length > 0)
{
zoneName = zoneName.ToLower();
ok = true;
break;
}
}
if (val != null && val.Count > 0 && ok)
{
foreach (var sys in SystemService.UniverseSystemsData)
{
var obj = sys.Value.Zones?.FindAll((el) => el.ID.ToLower().Contains(zoneName));
if (obj != null && obj.Count > 0)
{
LogService.LogEvent(SystemService.SystemNamesID[ast.Key.ToLower()] + " - " +
" POS: X: " + obj[0].Pos[0] + " Y: " + obj[0].Pos[1] + " Z: " + obj[0].Pos[2]);
}
}
}
if (val != null && val.Count > 0 && !ok) //EXCLUSION ZONE в ASTEROIDS
{
LogService.LogEvent(SystemService.SystemNamesID[ast.Key.ToLower()] + " - " + val[0].LootId);
}
}
LogService.LogEvent("------------------");
LogService.LogEvent("----контейнеры----");
//Ищу совпадения в контейнерах
foreach (var ast in SystemService.Loadouts)
{
var val = ast.Cargo.Find((zone) => zone.Name.Contains((combo.SelectedItem as ComboBoxItem).ID.ToLower()));
if (val != null)
{
foreach (var sys in SystemService.UniverseSystemsData)
{
var obj = sys.Value.Objects?.FindAll((el) => el.Loadout != null && el.Loadout.ToLower().Contains(ast.Name));
if (obj != null && obj.Count > 0)
{
LogService.LogEvent("SYSTEM: " + SystemService.SystemNamesID[sys.Key.ToLower()] + " L: " + ast.Name + " - " + val.Name + " / " + val.Count);
}
}
}
}
LogService.LogEvent("------------------");
}
#region GraphMap
private System.Windows.UIElement GenerateWpfVisuals(bool Custom = false)
{
Zoomctrl = new ZoomControl();
ZoomControl.SetViewFinderVisibility(Zoomctrl, System.Windows.Visibility.Visible);
gXLogic = new GXLogicCore<DataVertex, DataEdge, BidirectionalGraph<DataVertex, DataEdge>>();
GArea = new GraphAreaExample
{
LogicCore = gXLogic,
EdgeLabelFactory = new DefaultEdgelabelFactory()
};
GArea.ShowAllEdgesLabels(true);
gXLogic.Graph = (!Custom) ? GenerateGraph() : GenerateRoad();
gXLogic.DefaultLayoutAlgorithm = LayoutAlgorithmTypeEnum.LinLog;//KK - неплохо
gXLogic.DefaultLayoutAlgorithmParams = gXLogic.AlgorithmFactory.CreateLayoutParameters(LayoutAlgorithmTypeEnum.LinLog);
gXLogic.DefaultOverlapRemovalAlgorithm = OverlapRemovalAlgorithmTypeEnum.FSA;
gXLogic.DefaultOverlapRemovalAlgorithmParams = gXLogic.AlgorithmFactory.CreateOverlapRemovalParameters(OverlapRemovalAlgorithmTypeEnum.OneWayFSA);
((OverlapRemovalParameters)gXLogic.DefaultOverlapRemovalAlgorithmParams).HorizontalGap = 100;
((OverlapRemovalParameters)gXLogic.DefaultOverlapRemovalAlgorithmParams).VerticalGap = 100;
gXLogic.DefaultEdgeRoutingAlgorithm = EdgeRoutingAlgorithmTypeEnum.None;
gXLogic.AsyncAlgorithmCompute = false;
Zoomctrl.Content = GArea;
GArea.RelayoutFinished += gArea_RelayoutFinished;
var myResourceDictionary = new System.Windows.ResourceDictionary { Source = new Uri("Templates\\template.xaml", UriKind.Relative) };
Zoomctrl.Resources.MergedDictionaries.Add(myResourceDictionary);
return Zoomctrl;
}
private void gArea_RelayoutFinished(object sender, EventArgs e)
{
Zoomctrl.ZoomToFill();
}
private GraphExample GenerateGraph()
{
//загрузка систем
var dataGraph = new GraphExample();
for(int i = 0; i < SystemService.ArraySystemsCombobox.Length; i++)
{
var dataVertex = new DataVertex();
if (checkBoxRusNames.Checked == true)
{
var rusName = SystemService.UniverseSystemsData[SystemService.ArraySystemsCombobox[i]].Name;
//dataVertex = new DataVertex("[" + i + "] " + rusName);
dataVertex = new DataVertex(rusName);
}
else dataVertex = new DataVertex("[" + i + "] " + SystemService.ArraySystemsCombobox[i]);
dataGraph.AddVertex(dataVertex);
}
var vlist = dataGraph.Vertices.ToList();
//создание связей
if(SystemService.HollRoads != null)
{
foreach(var road in SystemService.HollRoads)
{
var roadFirstSys = road.Substring(0, road.IndexOf('='));
var roadLastSys = road.Substring((road.IndexOf('=') + 1));
var index_1 = Array.IndexOf(SystemService.ArraySystemsCombobox, roadFirstSys);
var index_2 = Array.IndexOf(SystemService.ArraySystemsCombobox, roadLastSys);
if (index_1 == -1 || index_2 == -1) continue;
var dataEdge = new DataEdge(vlist[index_1], vlist[index_2]) { Text = string.Format("{0} -> {1}", vlist[index_1], vlist[index_2]) };
dataGraph.AddEdge(dataEdge);
}
}
return dataGraph;
}
private GraphExample GenerateRoad()
{
//загрузка систем
var dataGraph = new GraphExample();
LogService.LogEvent($"Создаю путь от {comboBoxRoadFirst.Text} до {comboBoxRoadLast.Text}");
for (int i = 0; i < VerticleRoad.Length; i++)
{
var dataVertex = new DataVertex();
dataVertex = new DataVertex(VerticleRoad[i]);
dataGraph.AddVertex(dataVertex);
if(i > 0)
{
var dataEdge = new DataEdge(dataGraph.Vertices.ToList()[i-1], dataGraph.Vertices.ToList()[i]) { Text = string.Format("{0} -> {1}", dataGraph.Vertices.ToList()[i-1], dataGraph.Vertices.ToList()[i]) };
dataGraph.AddEdge(dataEdge);
}
}
var vlist = dataGraph.Vertices.ToList();
return dataGraph;
}
private void but_generate_Click(object sender, EventArgs e)
{
wpfHost.Visible = true;
wpfHost.Child = GenerateWpfVisuals(Custom: false);
GArea.GenerateGraph(true);
GArea.SetVerticesDrag(true, true);
Zoomctrl.ZoomToFill();
buttonSetRoad.Enabled = true;
}
private void but_reload_Click(object sender, EventArgs e)
{
wpfHost.Visible = true;
GArea.RelayoutGraph();
}
private void ButtonSetRoad_Click(object sender, EventArgs e)
{
var id1 = string.Empty;
var id2 = string.Empty;
if (!checkBoxRusNames.Checked)
{ // определяю английское с русского наименования
id1 = SystemService.SystemsNameId[comboBoxRoadFirst.Text];
id2 = SystemService.SystemsNameId[comboBoxRoadLast.Text];
}
else
{
id1 = comboBoxRoadFirst.Text;
id2 = comboBoxRoadLast.Text;
}
var pth = string.Empty;
if (checkBoxSearchState.Checked)
{
//чистим от однонаправленных связей
var edges = SystemService.HollRoads.FindAll((road) =>
{
var road_1 = road.Substring(0, road.IndexOf('=')); //[Оптимум] какой-то Оптимум=Неизвестный сектор
var road_2 = road.Substring(road.IndexOf('=') + 1); //[Неизвестный сектор] какой-то Оптимум=Неизвестный сектор
if (SystemService.HollRoads.Contains(road_2 + '=' + road_1)) return true; //Неизвестный сектор=Оптимум
return false;
});
var g = new Graph();
gXLogic.Graph = GenerateGraph();
foreach (var vertice in gXLogic.Graph.Vertices)
g.AddVertex(vertice.Text);
foreach (var edge in edges)
{
var roadFirstSys = SystemService.SystemNamesID[edge.Substring(0, edge.IndexOf('='))];
var roadLastSys = SystemService.SystemNamesID[edge.Substring(edge.IndexOf('=') + 1)];
g.AddEdge(roadFirstSys, roadLastSys, 1);
}
var dijkstra = new Dijkstra(g);
pth = dijkstra.FindShortestPath(id1, id2);
LogService.LogEvent(pth);
}
else
{
GraphC g = new GraphC();
for (int i = 0; i < comboBoxSystems.Items.Count; i++)
{
Keyss.Add(i);
g.AddKey(i);
}
SystemService.HollRoads.Distinct();
foreach(var road in SystemService.HollRoads)
{
var roadFirstSys = road.Substring(0, road.IndexOf('='));
var roadLastSys = road.Substring((road.IndexOf('=') + 1));
var index_1 = Array.IndexOf(SystemService.ArraySystemsCombobox, roadFirstSys);
var index_2 = Array.IndexOf(SystemService.ArraySystemsCombobox, roadLastSys);
string rs = index_1 + "-" + index_2;
Edge.Add(rs);
g.AddEdge(rs);
}
Paths.Clear();
FindPath(g, Array.IndexOf(SystemService.ArraySystemsCombobox, (comboBoxRoadLast.SelectedItem as ComboBoxItem).ID));
var pathsResult = Paths.FindAll((res) =>
{
res = res.Trim();
if (res.IndexOf(' ') == -1) return false;
if (res.LastIndexOf(' ') == -1) return false;
var start = res.Substring(0, res.IndexOf(' '));
int INDEXStop = res.LastIndexOf(' ');
var stop = res.Substring(INDEXStop);
if (!string.IsNullOrEmpty(start) && !string.IsNullOrEmpty(stop) && int.Parse(start.Trim()) == Array.IndexOf(SystemService.ArraySystemsCombobox, (comboBoxRoadFirst.SelectedItem as ComboBoxItem).ID)
&& int.Parse(stop.Trim()) == Array.IndexOf(SystemService.ArraySystemsCombobox, (comboBoxRoadLast.SelectedItem as ComboBoxItem).ID))
{
return true;
}
else return false;
});
foreach(var path in pathsResult)
{
var str = path.Trim();
string[] resM = str.Split(' ');
foreach(string s in resM)
{
LogService.LogEvent(SystemService.SystemsID[int.Parse(s)]);
pth += SystemService.SystemNamesID[SystemService.SystemsID[int.Parse(s.Trim())]] + "=";
}
LogService.LogEvent(str);
}
}
VerticleRoad = pth.Split('=');
bool startNameState = false;
string startName = string.Empty;
string stopName = string.Empty;
GererateRoads = new string[VerticleRoad.Length - 1];
int counter = 0;
for (int i = 0; i < VerticleRoad.Length; i++)
{
VerticleRoad[i] = VerticleRoad[i].Trim();
if (startNameState)
{
stopName = VerticleRoad[i].Trim();
startNameState = false;
var road = startName + "=" + stopName;
GererateRoads[counter] = road;
counter++;
}
else
{
if (string.IsNullOrEmpty(stopName))
{
startName = VerticleRoad[i];
}
else
{
startName = stopName;
stopName = VerticleRoad[i];
var road = startName + "=" + stopName;
GererateRoads[counter] = road;
counter++;
startName = VerticleRoad[i];
}
startNameState = true;
}
}
wpfHost.Visible = true;
wpfHost.Child = GenerateWpfVisuals(Custom: true);
GArea.GenerateGraph(true);
GArea.SetVerticesDrag(true, true);
Zoomctrl.ZoomToFill();
}
private void buttonCloseMap_Click(object sender, EventArgs e)
{
wpfHost.Visible = false;
}
#endregion
public void FindPath(GraphC gr, int start) //gr - граф, start - номер вершины, от которой нужно найти пути до остальных
{
marks = new Dictionary<int, bool>();
path = new Stack<int>();
source = gr;
foreach (int i in gr.Keys)
marks.Add(i, false);
DFS(start);
}
public List<int> Keyss = new List<int>();
public List<string> Edge = new List<string>();
Dictionary<int, bool> marks;
Stack<int> path; //<-- это стек
GraphC source; //<-- это моя реализация графа, что там внутри - не важно
public List<string> Paths = new List<string>();
//функция поиска
public void DFS(int v)
{
marks[v] = true;
path.Push(v); // сохраняем в стек текущую вершину
foreach (int i in path) // выводим путь до текущей
{
Console.Write(i.ToString() + " ");
}
Console.WriteLine();
foreach (int i in source[v, Keyss, Edge].NodeLinks)
if (marks[i] == false)
{
DFS(i);
path.Pop(); // не забываем извлекать уже проверенные вершины
}
string paths = string.Empty;
foreach (int i in path) // выводим путь до текущей
{
paths += i.ToString() + " ";
}
Paths.Add(paths);
}
}
public class GraphC
{
public List<int> Keys = new List<int>();
public List<string> Edge = new List<string>();
public List<int> NodeLinks { get; set; }
public GraphC()
{
NodeLinks = new List<int>();
}
public GraphC(int index, List<int> keys, List<string> edge)
{
Keys.AddRange(keys);
Edge.AddRange(edge);
NodeLinks = new List<int>();
var Edges = Edge.FindAll((ed) =>
{
var start = ed.Substring(0, ed.IndexOf('-'));
int startVal = int.Parse(start);
if (startVal == index)
{
return true;
}
else return false;
});
foreach (var Edge in Edges)
{
var stop = int.Parse(Edge.Substring(Edge.IndexOf('-') + 1, Edge.Length - (Edge.IndexOf('-') + 1)));
NodeLinks.Add(stop);
}
//Console.WriteLine($"Y verchini {index} svyazey {NodeLinks.Count}");
}
public GraphC this[int index, List<int> keys, List<string> edges]
{
get
{
return new GraphC(index, keys, edges);
}
}
public void AddKey(int key)
{
Keys.Add(key);
}
public void AddEdge(string edge)
{
Edge.Add(edge);
}
}
}

@ -0,0 +1,241 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="but_generate.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABS
CAABFVgAADqXAAAXb9daH5AAAAAJcEhZcwAARBsAAEQbAe2VWxAAAAeUSURBVHhezZt1iK1FGIev127F
wC4MMDDWQgUVFbGxMFG4KgaIYhd2tygW2IqKXgsVFVtQsMW4it2tV69xzfX3LPsuc2ff+c58MWddeP45
Z76Z+X5n5p03ZscNDg4OMTAw0G9mFpuJi8S14gCxhPDaFqPfAkwv1hFnijfEYMRkcYfYQ8wvvD46pV8C
rCiOEc+Jv0T84h5fimvENmJ24fXbmpICsJwPFI+I34X3krm8Jy4WG4mZhDdeI7oWgGW7p7hTsJy9l2nD
v+JVcYpYQ4wX3jyy6UKAOcS2AkPGsvUmXoI/xdPiMLGc8ObWk6YCsAw3FpeI94U3wX7yq7hf7CsWEd6c
XeoIwHLj71TxmmA5epMZa74Xt4pdxLzCe5cRcgRYXhwhnhEsO2/QukwVL4jrxYXifHG1eEL8KLxnmvCZ
uEpsIWYVo94vJcBCYj/xoPhNeJ035RaxsphRxONOJxYVp4uuxDbeFueK9cXImJ4AG4gvhNdJW14U4VhV
3Cy8PtrC1mUbD43jCbCVyHVW6vKyCMeq4i7h9dEF14mhcTwBAHeVPfmt8Dpow0RB/7OIeFxOl9UEE/Se
bQO//FNigphNDI2ZEsBgPx4iMFhep01hhU0SOEwYqSvF7YLT5Q/hPdMUTgVc6g3FKMcpFiDlZmKwsKQc
L78Ib6D/G2y3w8XiwnsnDO74UICdBL8Azg1uZvyAsYI4SWBVvYHHEk4sokkCKO+UAXwDtsHjYmIowHnC
OuIIuk/sKLy9CkRoOBsPiK6PrLq8K04TRJ3eXIGj92zxkbDnpoYCnBV8EfK6OFosKeJODf5IbOB4eH2U
ADvykNhdzCm8ebEKWA3YGi8inZwjgPGDwDpjTNg/8WBANIg/TpBSylXGR7lUcJJ4cwCM96HiJeH1YdQS
wODFnhR7i3lEPDhgbYndEQzhvH7q8qwgv7Cg8MaEdQUnyjfC6yOmkQAhHwqeY3/FkzFIjBwpXhFeH1WQ
U7hRbCpIp3n9E47vJh4WfwuvnxStBTDYX+yzKuvLEUveACvdK77A7hwrlhFeX0CQdrJ4R3h95NCZACH4
+zhPVXH5SoKAh1SXPYeId4sdROrkYRWQSSagmiLCcZtQRACDfXiFYF/GL2LMLXCwyAJXHWELiP0FdsAb
qylFBTDYl+xP9in7NX65KnDIyBeUOl77IkAI+xUvkv0bv6xBwQQHDEestINVXIBUWM3+vUDEe52jk6yv
90wJiglAkvIEsabYWmC0vHZkaOzlOUq7MGx1KCYA5769mIHjFC/pz4VVfY4b/qyfFBHgJ5Hy1kiuhm35
xc2bPGf4sxyoP+CEed/VoYgAHwgMWfjiBi7y88La4ulxFPJdzvi8NEcmorFyCOG/E17bHIoIQFq7qrJL
sGRt6wjACbK0iPvD1njtcygiwD8Cby2eqIGxs7RXrgBkoVLR39qibgxgNBaAidP+YEFxIzZu5PfiiRpk
ZKz4kSsAOb24H2NV0dRfaCQAZ/t2IpwEdcLQKPEL4+KGbQwSKxyTtMsRgBWFfxD3Y2wvvOdyaCQAlxzi
ScB6ghPA2mGp1xJxO6q51iZHANpU5QAuF95zOTQS4CYRT8Kg4hK2ZalzM4Ty9Xxin+HP7PscAYgD3Lqe
IONblXChBlm1PRoJQBI0nohB8sObEPG/V/TMEYBnvbwARyrxgvcMtYCjBGE3f+QqvHaNBPhEzCXiCRmP
Cu85jxwBgOsx4RiExzcIry3eJX9he1YQhZi4bVIAJna82FVQuv5ZhA9yDSYcIISSWti2ilwBgHiCq3Sk
v98a/iyG5b6liOcEl4m4vSsASc+9RPgwZ214E4SUVSohmgp8POoIkAMF1Xg+BjWBuL0rAEtopHgYQNk8
LIvdJuJwljOeLWJtetGlAPxw8fEcQlkvfsYVgHg8ldikbBZ2QLV1E0FhYllRt6TdpQD8OKmbpqxW74dx
BfhKpFJXqwiOlrijr0WTommXApCDTF2oxHZ4z7gC4Onh1MSdACujy6JolwKkjkt8kNT1PVcAGLlB4VDn
mOtF10aQAm8419VFVYptGgFIT9kXLHOqMWFnQE2QunvYSRu6FgD48QjSSMl7zlfIlFCAg6IvPxZxCErQ
0zTy8ighQB0mhQIQcHBBImzABLnajnOBH1/niMthrAWYEAoAiwkcmVKl7ZixEuBNsbNIXpLiDgCXJL2H
u6TfArCtuTc0EsukBDCo9nJF1uusC/olANHhGWJhMc079hIACDvJxJao2JQWgIozp0HyOn2OAAZeFsdL
l9fjSwmADSNWqbrtNkQdAQxi8RMF7q83eB1KCIDtwobF83ZpIoCxlCBR0aae16UA2CpsVjzPStoIYBAg
kZ1JVYKr6EIAbBM2atQ12By6EMAggLpHeJNM0UYAbBE2KRUBZtGlAMbm4jHhTTqmiQDYHi5ZYIvisWtT
QgAgaKJw2euWeR0BsDXYHGxPPF5jSglgUCXmX2+8jCzkCEDdDxuDrYn7b01pAQxSUuTpPxXhy1FJMgG8
pOW9IpWc6YR+CWBwh5cXtTidGqIJEOYjuMqOLYmf75x+C2DwPwckWPkX2BmGPyPrzH+fUotIXcbumIFx
/wFYGnz+zBLT8gAAAABJRU5ErkJggg==
</value>
</data>
<data name="but_reload.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABS
CAABFVgAADqXAAAXb9daH5AAAAAJcEhZcwAARBsAAEQbAe2VWxAAAAY5SURBVHhe1dtpqG1zHMbx65pn
oUxlyJA5XBlfEC9kum90ZYhMiSIhQ+aULikZokxJIUMkhMxDhpBEhAyZ5zFDmY7nua11PHvt7zp77Wlt
59an2/mdtX/r/6y99xr+a505U1NTM5o3b97/wWJysWwbtUYoU8JioqYTsJb8IQ9FrRHKlLCYqOkEHCpT
hWOLWiOUKWExUdMJuEnKDfCFbCK0XBfKlLCYqGnLVpJPpNwAdq/Qsl0oU8JioqYt20cyfOlooeU7UKaE
xURNW3a50Ab4XDYWes00ypSwmKhpi5aRN4U2gN0t9LpplClhMVHTAc2VNcUf6VPlErlZ7ivcI3fJtXKO
HCzHiQ9/FL50pND6FqFMCYuJmvbBJzCbydnyrPwoFGIYn8qGQuvHTAmLiZo24OB7ycPS6x0cBX9yaByY
KWExUdMedpTHhQY6TodL13goU8JioqY1lpOL5HehAY7bx7KBdIyLMiUspmrDGuvKk0IDa9Pt0jE2ypSw
mKoNwdbyodCAJsHXDdPjo0wJiymbgU3lA6GBTMpHsp4sGiNlSlhMZSPgQ8/bQoOYtFtl0TgpU8JiKhtV
+ITmNaGVV3mn6B3Uy/KA+ITnEXleXpfv5B+h1w7jIMFMCYvJTcAtQistvSNXy2GykfgIsYRkj8VlKVld
dpeTxTvSP4V69ssbfT5lSlhMalJ1jNAKf5XbZD/xOTy9tom9ZVQnTwspU8JiUpO0hXwtuZLf5HrxKW91
+UHsL9m/Xz/INbKlzKVMCYtJTdIdkit7VHwYrC43jLrL3158TXCh+Jxkuh9lSlhM0czf03Jn9Y34Ss3f
41xmWEvKq1INN5O35ERZVbp6UqaExRTNHhSv0Hvx9YvaqPlr1PRU+jnxJfOM+xvKlLCYikZ7iPfO5xY/
j8vxQmFLHsP94ivNRp8+ypSwmIpGC+WIsukY+QSGgv8inhneXuh1tShTwmJSE2/pVbLpmKwoPnZn8K/k
Uuk591eHMiUsJmo6Jv6alcHfkzNkDaFlG6NMCYuJmo7JBeLgnu72p4GW6RtlSlhM1HRMfPweWfASZUpY
TNR0NqFMCYuJms4mlClhMVHT2YQyJSwmajqbUKaExURNh+BzCh/afJeIfj9ylClhMVHTATjwnvKY3FnU
WkGZEhYTNe3D0rJAnpbySvIsoWXHgjIlLCZq2sDK4gsbz/mVZ3f2l+wk9JpR8adt7eJ/zJSwmIqmTa0j
vmL01HQGL/lMz/OD9NpROV3OLH+mTAmLqWzUg+8PXCHfCgUv3Sj0+lHwBOtV4kvmzYsaZkpYTGWjGjuL
Z4ibTmIcJdRnWP7nCRKv4zqZ/h1lSlhM2azg6e19xbe+/Z2uhqzjyVNPkVPPQS0r54lnpL0OT4j60zi9
DGVKWEzRzN9d34J+SarhmnhRqvcGhrGbVMfip0k7lqNMCYtJTXzicoq8K7myfp0vHYMbkL92fkyu+unz
EadrYpQyJSwmNRn0Ha+6Unx47BhgQ6uJp+R8IkV3jrwxfKLV9VrKlLCY1OQkqa5wUF+KjwR+3HUH8Tu2
vPi77ClxW0F8HN9F/Mnzk2B+HfUrdX30S5QpYTEVjcop8VHyO+md1mfie4mviO8J+GdPgjbdwXqa3mec
HcFLlClhMRWNfEvMN0NoAJPkO1N+lLYjdKJMCYspmvnuCw1iUl4Q31nOMXahTAmLqdLQx34aTNueEu8n
quPrQpkSFlOl4VbiBxpoUG25QbzjrI4NUaaExQRNR3lU6Id3jocIjakWZUpYTNDUT4H6ERca5Dj8JL5l
7itNGs+MKFPCYqKm4mcCvhca8Ki8Lz6+1z4H3ARlSlhM1LTgkxQaePIF0M/S65j+t/id9p7dl9XzpfH3
fCaUKWExUdOCZ1x8akqBSt5IPv31+fuBckJRO008aeGfD5BdxR/xkU+WUqaExURNwzZS9wi83/3Gf9w0
LpQpYTFR0wq/m7QBnpGRv6P9okwJi4maVniu/wmpbgD/1Qct3yrKlLCYqCnYTryzK8P7Qsd/N0DLtooy
JSwmalrDDzSUG+ANqb1CaxNlSlhM1LSGp7t8ju4NcFlRmzjKlLCYqOkMPMnhCUo/7Um/bx1lSlhM1LQH
H9c9hUW/ax1l+s/UnH8BePj8zIVNlTQAAAAASUVORK5CYII=
</value>
</data>
<data name="buttonSetRoad.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADgAAAA+CAYAAAB+39gDAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1
MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAnASURBVGhD3Zt5UNRHFscbwSjH
ii4QQORUimEVEIFAgAACpggGKSlLS4xAAbKkPEDYXf3HKlCCCgaRWgVdxSOeKCCXoHii4rVlUERUvPBA
0LC1oWQ3VVubt+/1/H6/mSjiKDDD7B/f6pnp/nX3h1+/7ve6G7Z+/Xrm6+sbGxIS0h0bG9tja2ubvWbN
Gr3e3l524cIFlp+fz8rKyrhqa2vZxYsX2bZt29iOHTv490OHDrFLly7x/C1btrDq6mq2f/9+dubMGXb+
/Hm2detW/v3YsWOssrKSNTY28u9UR319PTtw4ABv5/Tp06ywsFBq6/jx4+zy5cusuLiY7dy5k504cYId
PnyYt0X1UPt1dXXs4MGD7OzZs7wtKktlqK7c3FwuNmbMmJAZM2ZAa2srXL16Ffbu3QtTpkz52cfHZz5V
SpVQg0eOHNFOQDc3t2xsHBISEoAxBhs3boSXL19CZmYmWFlZ3XB3d5/W3NzMrl27xjuvdYAREREbsZMQ
FhbGAUlmZuaAD8O9e/cgPj4e7O3tj8TFxZl0dnaytrY2tnnzZu0BRNvbUFJSAmFfzeJw3lMYjNCRg/r6
+nNIfBhwyIKLi0vG7t27eSN79uxhNTU12gMYFCwH7LzM4Fc9BraWckhScvK30NXVBQgFMpnslaOj42wp
U8NSGXB6iBzwvwYMwAaFn3/0YDASYeV16cCWwkIOumrVKrC2tv77rFmzJguZGtN7AUNDQzfgjwgYwZ/h
gJhymcnTvM8VdVpZWQNWCGiLMGfOHJqI9mVlZRlLBdQslQBxCegbUBSC0rD1dVXUHRwcAo8ePeT26eXl
9audnd2fpUw1amBvUFm6qE8Y/MOBgaWpoo2UlFS+rOBEABMmTHiBQz5cylSDBg9Q1Bh5ev4znG1HyNvR
0xsJxcU7uX2uXLkSDA0NLy1btsyJZw6xVAYMUhVQlGCfq70V7dnbOwA6AnxpiYqKIvvcsXjxYgOpwBBo
6ABFjZM/4+GsaHfmzK/h4cOHcPLkSXL7fkFvKVXKHGQNPSAJbZNstMuJgYmxov2/rFgJ3d3dOHyLYezY
se24rHwpZQ6S3gtI6+CAAUUJ9nlcadiO1jfgDvzz58+5fZqYmJxesGCBvVRggFIF8HtaJgYFUJRgn3/C
iUjsi7PzH3i00tLSAuHh4YBRzGYMxUZLBT5SmgEUhW/0P2MZuExS9Gn27Ch48qQdTp06BZMnT37t4ODw
RynzI6RZQBLZJ6ZPJjMwNlL0LQPDsVe4fqLTDRYWFvfQPr+QMj9AmgcUhbMtpRU+iv4ZG4+F0tIyePz4
MaSm8om2dsWKFROkAipo+ACKEuzzW09FPzGmhqamH+HGjRsQGRkJo0aNyt23b98nUoF+NPwARRky+AVh
ZbaK/i74ZiE8e/YUMN5DaPceT0/PGCnzHRq+gCR9edrmxuB3CCz2O3fDBujAZaWgoIBm25thYWHeUuYb
UgkQf4TA4K/5M2oFFCUM2x+U7NPExAyqq6u5faalpdGwPZqenm4hFRCkMmDA9Jn8GY0AihJAo90VDD4+
vnDr1i1obGwEnGkpYskqKirSEQvQ9odqb3A4AIrC4fraCp13lAi6aFESdHR0AL4xdBqcX9nY2MylDNq3
aWho4NIeQBJCUto8jcEoXEtF0E1ol+T25eTkULRyPTg4eCp+Z+jcs+3bt7OSkhItARQlDNtCpW2T8eOt
MFI5BXfu3OHbmubm5gdXr15tQjt2tNOGUQzDP4CWAIoiUAywA5TsMyAwCO7evQv19fXk9mEAPuIx/v5a
0EVUjPYAkmjbBJeWf9ozsLZQgE6aNEn6/Ja0ClCUEJZdRW9I3DZ5p7QSUBT6t04OfUApS6sB8U2OHtUH
lLK0ElBYQh64/j8OUYT796cMHG36gOlLWgMorIcxuPCLnXd1mwrXr1+H0NBQ6be3hJ6AAKhBZ7s/CWAH
lBZ6CpSPVlRAe3s7JCUlga2tbZ2xsXEq5jWiegXR51jpDQ4LZ1tZgp21oZ0ZYZ+ob6R169bBixcd3FWT
yWRtfn5+vufOneMHsxj2ccebzg5v3rzJ0AmQezIUDw4rQIT7Fy7kynb2DQ+Gn0F5eTn4+/v3YFQRTxkP
HjzgYHTAWlpaygi2b8CgYQAohktKdjZtmic0NTVxW5s/fz4YGBjkZmdn64kF6LSXHGzyQfsERAMVAOWH
QhoBFMB+ULKzceNMoKqqmp9zLF++nALe6piYGCupgCA6Mu8XkCYZjQEKdtY6lYEh+phiv3Nyc/lwpBsf
jo6OrRjo+kqZb+i9gNOnT8/TCCAC9Y5HR9la0d+FMTHw9OkTqMAZ0sPDo8fOzi5OynyHVHmDHPALdQGK
dqYU9nh5fQbYIW5ntC2hr6+v8rbhhwOOfqNDgyUBbJfSxpKpqSlUVlbx9Wzp0qWgq6tbnZmZ+Zad9SfN
v0HBzlrwjekrOcY5ObnQ3f0T5OXlgZGRUeu8efM+lzI/QJoFRDujzSMHpc2jmNg4eNHRAdgZmDhx4s90
EVDK/AhpBlAYjnN/Y2fecPt2C1y5cgWCgoIILic9PV3a/vtYqRdQAPub0npmamoGNTU1cP/+fUhOTgYb
G5vKyMhIc6nAAKUeQMHOaItPHycpsf28PPnNxaysLAK75eLi4iVlDpKGHlCwMztc08R24+MT+CYtHV27
urr2eHt7L5QyB1lDBygMxyj0QsT26EYi2VlDQwM/psaFOnvt2rW6UoEh0OAD9mFnn5pbQG2t/H7pkiVL
wMzMrCw+Pn7Q7Kw/qQ4Y+B5Awc5u0Fb6SEUbeegv0nDMz8+nHebmwMBATylTDVIZ0L8/QLSzHozNbJU2
WxMSEvkZQVVVFTg5Of2EUXW0lKlGDQzw9/I03E1RJy7MaGe3ud+Iz9IBZRZWOEIqoGZ9OCC+LfFC7F/f
tLO6Onj06BEkJiZSfFaWlpamFjvrTyoD+gXIAdvrGXTKGIxUsrON+Zu4ndE+CNrZzYiICLXaWX9SGXDG
l1/xZ5TvaicuSoKurk6gTSlcqLsDAgKi6SQVhyi/QE4X0ulyOd2+p4vj1AiduNJhJB0tU4rP8pSOtDZt
2sRwbWS7du2SUuoUXUw/evQoL0uX0dGueUr1UoepzaKiIi7sK6OL8bRVQW2+FxDXqwLM+M3eop+fPz97
o2NjWtucnZ2/o8NFDGtYS0sLb6SgoICnwx5QJpN9h4UgIyMDdHR0+P9LkN8YHR1Nb60sJSXFjLbkSNQw
XesvLy/XHkB3d3cPfEN8VqQbDWRn6OnT1Y2p9N8uOKmwiooK3knamqMzca0C7OrqYugMB1paWjYhWDOm
c+kBGo7UKHWMGqRGtA/wLvsftpvZeJJFe4QAAAAASUVORK5CYII=
</value>
</data>
</root>

@ -0,0 +1,50 @@
using GraphX.Common.Models;
namespace WindowsFormsProject
{
/* DataEdge это класс данных для ребер. Он содержит все данные о пользовательских краях, указанные пользователем.
* Этот класс также должен быть производным от класса EdgeBase, который предоставляет свойства и методы, обязательные для
* правильные операции GraphX.
* Некоторые из полезных членов EdgeBase:
* - Свойство ID, в котором хранится уникальный положительный идентификационный номер. Свойство должно быть заполнено пользователем.
* - логическое свойство IsSelfLoop, указывающее, является ли это ребро самозацикленным (например, имеет идентичные вершины Target и Source)
* коллекция точек RoutingPoints, используемая для создания пути маршрутизации по краю. Если Null, то для рисования края будет использоваться прямая линия.
* В большинстве случаев GraphX обрабатывает это автоматически.
* - Исходное свойство, которое содержит исходную вершину ребра.
* - Целевое свойство, которое содержит целевую вершину ребра.
* - Свойство Weight, которое содержит необязательное значение веса ребра, которое можно использовать в некоторых алгоритмах компоновки.
*/
public class DataEdge : EdgeBase<DataVertex>
{
/// <summary>
/// Конструктор по умолчанию. Нам нужно установить как минимум исходные и целевые свойства ребра.
/// </summary>
/// <param name="source">Исходные данные вершин</param>
/// <param name="target">Данные целевой вершины</param>
/// <param name="weight">Необязательный вес ребра</param>
public DataEdge(DataVertex source, DataVertex target, double weight = 1)
: base(source, target, weight)
{
}
/// <summary>
/// Конструктор без параметров по умолчанию (для совместимости с сериализацией)
/// </summary>
public DataEdge()
: base(null, null, 1)
{
}
/// <summary>
/// Пользовательское строковое свойство, например
/// </summary>
public string Text { get; set; }
#region GET members
public override string ToString()
{
return Text;
}
#endregion
}
}

@ -0,0 +1,42 @@
using GraphX;
using GraphX.Common.Models;
namespace WindowsFormsProject
{
/* DataVertex это класс данных для вершин. Он содержит все пользовательские данные вершин, указанные пользователем.
* Этот класс также должен быть производным от VertexBase, который предоставляет свойства и методы, обязательные для
* правильные операции GraphX.
* Некоторые из полезных членов VertexBase:
* - Свойство ID, в котором хранится уникальный положительный идентификационный номер. Свойство должно быть заполнено пользователем.
*/
public class DataVertex: VertexBase
{
/// <summary>
/// Некоторое строковое свойство для примера
/// </summary>
public string Text { get; set; }
#region Calculated or static props
public override string ToString()
{
return Text;
}
#endregion
/// <summary>
/// Конструктор без параметров по умолчанию для этого класса
/// (требуется для сериализации YAXlib)
/// </summary>
public DataVertex():this("")
{
}
public DataVertex(string text = "")
{
Text = text;
}
}
}

@ -0,0 +1,149 @@
using FLCompanionByDvurechensky.Data;
using System.Collections.Generic;
/// <summary>
/// TODO: работает не корректно
/// Алгоритм Дейкстры
/// </summary>
public class Dijkstra
{
Graph graph;
List<GraphVertexInfo> infos;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="graph">Граф</param>
public Dijkstra(Graph graph)
{
this.graph = graph;
}
/// <summary>
/// Инициализация информации
/// </summary>
void InitInfo()
{
infos = new List<GraphVertexInfo>();
foreach (var v in graph.Vertices)
{
infos.Add(new GraphVertexInfo(v));
}
}
/// <summary>
/// Получение информации о вершине графа
/// </summary>
/// <param name="v">Вершина</param>
/// <returns>Информация о вершине</returns>
GraphVertexInfo GetVertexInfo(GraphVertex v)
{
if (v == null) return null;
foreach (var i in infos)
{
if (i.Vertex.Name.Contains(v.Name))
{
return i;
}
}
return null;
}
/// <summary>
/// Поиск непосещенной вершины с минимальным значением суммы
/// </summary>
/// <returns>Информация о вершине</returns>
public GraphVertexInfo FindUnvisitedVertexWithMinSum()
{
var minValue = int.MaxValue;
GraphVertexInfo minVertexInfo = null;
foreach (var i in infos)
{
if (i.IsUnvisited && i.EdgesWeightSum < minValue)
{
minVertexInfo = i;
minValue = i.EdgesWeightSum;
}
}
return minVertexInfo;
}
/// <summary>
/// Поиск кратчайшего пути по названиям вершин
/// </summary>
/// <param name="startName">Название стартовой вершины</param>
/// <param name="finishName">Название финишной вершины</param>
/// <returns>Кратчайший путь</returns>
public string FindShortestPath(string startName, string finishName)
{
return FindShortestPath(graph.FindVertex(startName), graph.FindVertex(finishName));
}
/// <summary>
/// Поиск кратчайшего пути по вершинам
/// </summary>
/// <param name="startVertex">Стартовая вершина</param>
/// <param name="finishVertex">Финишная вершина</param>
/// <returns>Кратчайший путь</returns>
public string FindShortestPath(GraphVertex startVertex, GraphVertex finishVertex)
{
InitInfo();
var first = GetVertexInfo(startVertex);
first.EdgesWeightSum = 0;
while (true)
{
var current = FindUnvisitedVertexWithMinSum();
if (current == null)
{
break;
}
SetSumToNextVertex(current);
}
return GetPath(startVertex, finishVertex);
}
/// <summary>
/// Вычисление суммы весов ребер для следующей вершины
/// </summary>
/// <param name="info">Информация о текущей вершине</param>
void SetSumToNextVertex(GraphVertexInfo info)
{
info.IsUnvisited = false;
foreach (var e in info.Vertex.Edges)
{
var nextInfo = GetVertexInfo(e.ConnectedVertex);
var sum = info.EdgesWeightSum + e.EdgeWeight;
if (sum < nextInfo.EdgesWeightSum)
{
nextInfo.EdgesWeightSum = sum;
nextInfo.PreviousVertex = info.Vertex;
}
}
}
/// <summary>
/// Формирование пути
/// </summary>
/// <param name="startVertex">Начальная вершина</param>
/// <param name="endVertex">Конечная вершина</param>
/// <returns>Путь</returns>
string GetPath(GraphVertex startVertex, GraphVertex endVertex)
{
var path = endVertex.ToString();
while (startVertex != endVertex)
{
if(endVertex == null) return path;
endVertex = GetVertexInfo(endVertex).PreviousVertex;
if(endVertex != null)
path = endVertex.ToString() + " = " + path;
}
return path;
}
}

@ -0,0 +1,64 @@
using System.Collections.Generic;
/// <summary>
/// Граф
/// </summary>
public class Graph
{
/// <summary>
/// Список вершин графа
/// </summary>
public List<GraphVertex> Vertices { get; }
/// <summary>
/// Конструктор
/// </summary>
public Graph()
{
Vertices = new List<GraphVertex>();
}
/// <summary>
/// Добавление вершины
/// </summary>
/// <param name="vertexName">Имя вершины</param>
public void AddVertex(string vertexName)
{
Vertices.Add(new GraphVertex(vertexName));
}
/// <summary>
/// Поиск вершины
/// </summary>
/// <param name="vertexName">Название вершины</param>
/// <returns>Найденная вершина</returns>
public GraphVertex FindVertex(string vertexName)
{
foreach (var v in Vertices)
{
if (v.Name.Contains(vertexName))
{
return v;
}
}
return null;
}
/// <summary>
/// Добавление ребра
/// </summary>
/// <param name="firstName">Имя первой вершины</param>
/// <param name="secondName">Имя второй вершины</param>
/// <param name="weight">Вес ребра соединяющего вершины</param>
public void AddEdge(string firstName, string secondName, int weight)
{
var v1 = FindVertex(firstName);
var v2 = FindVertex(secondName);
if (v2 != null && v1 != null)
{
v1.AddEdge(v2, weight);
v2.AddEdge(v1, weight);
}
}
}

@ -0,0 +1,12 @@
using GraphX.Controls;
using QuickGraph;
namespace WindowsFormsProject
{
/// <summary>
/// Это пользовательское представление GraphArea с использованием пользовательских типов данных.
/// GraphArea — компонент визуальной панели, отвечающий за отрисовку визуальных элементов (вершин и ребер).
/// Он также предоставляет множество глобальных настроек и методов, что делает GraphX ​​таким настраиваемым и удобным для пользователя.
/// </summary>
public class GraphAreaExample : GraphArea<DataVertex, DataEdge, BidirectionalGraph<DataVertex, DataEdge>> { }
}

@ -0,0 +1,26 @@
/// <summary>
/// Ребро графа
/// </summary>
public class GraphEdge
{
/// <summary>
/// Связанная вершина
/// </summary>
public GraphVertex ConnectedVertex { get; }
/// <summary>
/// Вес ребра
/// </summary>
public int EdgeWeight { get; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="connectedVertex">Связанная вершина</param>
/// <param name="weight">Вес ребра</param>
public GraphEdge(GraphVertex connectedVertex, int weight)
{
ConnectedVertex = connectedVertex;
EdgeWeight = weight;
}
}

@ -0,0 +1,12 @@
using QuickGraph;
namespace WindowsFormsProject
{
/// <summary>
/// Это наш пользовательский график данных, полученный из класса BidirectionalGraph с использованием пользовательских типов данных.
/// Граф данных хранит данные о вершинах и ребрах, которые используются GraphArea и конечным пользователем для различных операций.
/// Содержимое графика данных обрабатывается пользователем вручную (добавление/удаление объектов). Основная идея заключается в том, что вы можете динамически
/// удалять/добавлять объекты в макет GraphArea, а затем использовать график данных для восстановления исходного содержимого макета.
/// </summary>
public class GraphExample : BidirectionalGraph<DataVertex, DataEdge> { }
}

@ -0,0 +1,52 @@
using System.Collections.Generic;
/// <summary>
/// Вершина графа
/// </summary>
public class GraphVertex
{
/// <summary>
/// Название вершины
/// </summary>
public string Name { get; }
/// <summary>
/// Список ребер
/// </summary>
public List<GraphEdge> Edges { get; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="vertexName">Название вершины</param>
public GraphVertex(string vertexName)
{
Name = vertexName;
Edges = new List<GraphEdge>();
}
/// <summary>
/// Добавить ребро
/// </summary>
/// <param name="newEdge">Ребро</param>
public void AddEdge(GraphEdge newEdge)
{
Edges.Add(newEdge);
}
/// <summary>
/// Добавить ребро
/// </summary>
/// <param name="vertex">Вершина</param>
/// <param name="edgeWeight">Вес</param>
public void AddEdge(GraphVertex vertex, int edgeWeight)
{
AddEdge(new GraphEdge(vertex, edgeWeight));
}
/// <summary>
/// Преобразование в строку
/// </summary>
/// <returns>Имя вершины</returns>
public override string ToString() => Name;
}

@ -0,0 +1,40 @@
namespace FLCompanionByDvurechensky.Data
{
/// <summary>
/// Информация о вершине
/// </summary>
public class GraphVertexInfo
{
/// <summary>
/// Вершина
/// </summary>
public GraphVertex Vertex { get; set; }
/// <summary>
/// Не посещенная вершина
/// </summary>
public bool IsUnvisited { get; set; }
/// <summary>
/// Сумма весов ребер
/// </summary>
public int EdgesWeightSum { get; set; }
/// <summary>
/// Предыдущая вершина
/// </summary>
public GraphVertex PreviousVertex { get; set; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="vertex">Вершина</param>
public GraphVertexInfo(GraphVertex vertex)
{
Vertex = vertex;
IsUnvisited = true;
EdgesWeightSum = int.MaxValue;
PreviousVertex = null;
}
}
}

@ -0,0 +1,22 @@
using System;
using System.Windows.Forms;
namespace FLCompanionByDvurechensky
{
/// <summary>
/// Точка входа
/// </summary>
static class Program
{
/// <summary>
/// Главная точка входа для приложения.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FreelancerCompanionDvurechensky());
}
}
}

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Общие сведения об этой сборке предоставляются следующим набором
// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
// связанные со сборкой.
[assembly: AssemblyTitle("FLCompanionByDvurechensky")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FLCompanionByDvurechensky")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
[assembly: ComVisible(false)]
// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
[assembly: Guid("71b7afc2-eb05-4098-9a50-71801ec5b23d")]
// Сведения о версии сборки состоят из следующих четырех значений:
//
// Основной номер версии
// Дополнительный номер версии
// Номер сборки
// Редакция
//
// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
// используя "*", как показано ниже:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FLCompanionByDvurechensky.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FLCompanionByDvurechensky.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace FLCompanionByDvurechensky.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.6.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

@ -0,0 +1,184 @@
using System;
using System.Drawing;
namespace FLCompanionByDvurechensky.Services
{
/// <summary>
/// Сервис для работы с картой
/// </summary>
public class DrawService
{
/// <summary>
/// Пикселей в одном делении
/// </summary>
private int BlockLength { get; set; }
/// <summary>
/// Длинна стрелки
/// </summary>
private int ArrowLength { get; set; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="BlockLength"></param>
/// <param name="ArrowLength"></param>
public DrawService(int BlockLength,int ArrowLength)
{
this.BlockLength = BlockLength;
this.ArrowLength = ArrowLength;
}
/// <summary>
/// Рисование оси X
/// </summary>
/// <param name="start">Начало</param>
/// <param name="end">Конец</param>
/// <param name="map">Карта</param>
public void DrawXAxis(Point start, Point end, Graphics map, bool arrow = true)
{
//Деления в положительном направлении оси
for (int i = BlockLength; i < end.X - ArrowLength; i += BlockLength)
{
map.DrawLine(Pens.Black, i, -1, i, 1);
}
//Деления в отрицательном направлении оси
for (int i = -BlockLength; i > start.X; i -= BlockLength)
{
map.DrawLine(Pens.Black, i, -1, i, 1);
}
//Ось
map.DrawLine(Pens.Black, start, end);
//Стрелка
if(arrow) map.DrawLines(Pens.Black, GetArrow(start.X, start.Y, end.X, end.Y, ArrowLength));
}
/// <summary>
/// Рисование оси Y
/// </summary>
/// <param name="start">Начало</param>
/// <param name="end">Конец</param>
/// <param name="map">Карта</param>
public void DrawYAxis(Point start, Point end, Graphics map, bool arrow = true)
{
//Деления в отрицательном направлении оси
for (int i = BlockLength; i < start.Y; i += BlockLength)
{
map.DrawLine(Pens.Black, -1, i, 1, i);
}
//Деления в положительном направлении оси
for (int i = -BlockLength; i > end.Y + ArrowLength; i -= BlockLength)
{
map.DrawLine(Pens.Black, -1, i, 1, i);
}
//Ось
map.DrawLine(Pens.Black, start, end);
//Стрелка
if (arrow) map.DrawLines(Pens.Black, GetArrow(start.X, start.Y, end.X, end.Y, ArrowLength));
}
/// <summary>
/// Рисует местоположение базы
/// </summary>
/// <param name="X">X</param>
/// <param name="Y">Y</param>
/// <param name="map">Карта</param>
public void DrawPoint(int X, int Y, int width, int height, Graphics map, Color color, int boxW = 5, int boxH = 5)
{
int[] coords = ResetCoords(X, Y, width, height);
Rectangle rect = new Rectangle(coords[0], coords[1], boxW, boxH);
map.DrawRectangle(new Pen(color, .5f), rect);
Brush bb = new SolidBrush(color);
map.FillRectangle(bb, rect);
}
/// <summary>
/// Рисование текста
/// </summary>
/// <param name="point">Местоположение</param>
/// <param name="text">Текст</param>
/// <param name="map">Карта</param>
/// <param name="isYAxis">Выбор оси</param>
public void DrawText(Point point, int width, int height, string text, Graphics map, Brush color, int sizeText, bool isYAxis = false)
{
var fontFamily = new FontFamily("Arial");
var font = new Font(fontFamily, sizeText, FontStyle.Bold, GraphicsUnit.Pixel);
var size = map.MeasureString(text, font);
var coords = ResetCoords(point.X, point.Y, width, height);
var rect = new RectangleF(new Point(coords[0], coords[1]), size);
map.DrawString(text, font, color, rect);
}
/// <summary>
/// Вычисление стрелки оси
/// </summary>
/// <param name="x1">X1</param>
/// <param name="y1">Y1</param>
/// <param name="x2">X2</param>
/// <param name="y2">Y2</param>
/// <param name="height">Ширина стрелки</param>
/// <param name="width">Длинна стрелки</param>
/// <returns></returns>
private PointF[] GetArrow(float x1, float y1, float x2, float y2, float height = 10, float width = 4)
{
PointF[] result = new PointF[3];
//направляющий вектор отрезка
var n = new PointF(x2 - x1, y2 - y1);
//Длина отрезка
var l = (float)Math.Sqrt(n.X * n.X + n.Y * n.Y);
//Единичный вектор
var v1 = new PointF(n.X / l, n.Y / l);
//Длина стрелки
n.X = x2 - v1.X * height;
n.Y = y2 - v1.Y * height;
//формирование элементов
result[0] = new PointF(n.X + v1.Y * width, n.Y - v1.X * width);
result[1] = new PointF(x2, y2);
result[2] = new PointF(n.X - v1.Y * width, n.Y + v1.X * width);
return result;
}
/// <summary>
/// Пересчитывает координаты
/// </summary>
/// <param name="X"></param>
/// <param name="Y"></param>
/// <returns></returns>
private int[] ResetCoords(int X, int Y, int width, int height)
{
bool stateX = false;
bool stateY = false;
width /= 2;
height /= 2;
if (X < 0)
{
X += width;
stateX = true;
}
if (Y < 0)
{
Y += height;
stateY = true;
}
if (X > 0 && !stateX)
{
X += width;
stateX = true;
}
if (Y > 0 && !stateY)
{
Y += height;
stateY = true;
}
if (X == 0 && !stateX) X = width;
if (Y == 0 && !stateY) Y = height;
int[] coords = new int[2];
coords[0] = X;
coords[1] = Y;
return coords;
}
}
}

@ -0,0 +1,112 @@
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace FLCompanionByDvurechensky.Services
{
/// <summary>
/// Сервис логирования
/// </summary>
public class LogService
{
/// <summary>
/// Поле вывода информации интерфейса
/// </summary>
private RichTextBox Logger { get; set; }
/// <summary>
/// Время начала логирования
/// </summary>
private string LogDateTime { get; set; }
/// <summary>
/// Директория логирования
/// </summary>
private string DirLog
{
get
{
var path = "Log";
if(!Directory.Exists(path)) Directory.CreateDirectory(path);
else
{
var directoryInfo = new DirectoryInfo(path);
if (directoryInfo.GetFiles().Length > 50)
{
Directory.Delete(path, true); //true - если директория не пуста (удалит и файлы и папки)
Directory.CreateDirectory(path);
}
}
return path;
}
}
/// <summary>
/// Путь до файла лога
/// </summary>
private string LogPath => Path.Combine(DirLog, $"{LogDateTime}_log.txt");
/// <summary>
/// Конструктор
/// </summary>
/// <param name="logger">Объект вывода интерфейса</param>
public LogService(RichTextBox logger)
{
Logger = logger;
LogDateTime = DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
}
/// <summary>
/// Обычное событие
/// </summary>
/// <param name="message">текст сообщения</param>
public void LogEvent(string message)
{
Logger.BeginInvoke(new Action(() =>
{
Logger.BackColor = Color.LightGray;
Logger.SelectionColor = Color.Black;
var msg = "-----> " + message + Environment.NewLine;
Logger.AppendText(msg);
File.AppendAllText(LogPath, msg);
Logger.SelectionStart = Logger.TextLength;
Logger.ScrollToCaret();
}));
}
/// <summary>
/// Событие ошибки
/// </summary>
/// <param name="message">текст ошибки</param>
public void ErrorLogEvent(string message)
{
Logger.BeginInvoke(new Action(() =>
{
Logger.BackColor = Color.LightGray;
Logger.SelectionColor = Color.Red;
var msg = "!~ " + message + Environment.NewLine;
Logger.AppendText(msg);
File.AppendAllText(LogPath, msg);
Logger.SelectionStart = Logger.TextLength;
Logger.ScrollToCaret();
}));
}
/// <summary>
/// Событие предупреждения
/// </summary>
/// <param name="message">текст предупреждения</param>
public void ErrorWarningEvent(string message)
{
Logger.BeginInvoke(new Action(() =>
{
Logger.BackColor = Color.LightGray;
Logger.SelectionColor = Color.DarkBlue;
var msg = "#~ " + message + Environment.NewLine;
Logger.AppendText(msg);
File.AppendAllText(LogPath, msg);
Logger.SelectionStart = Logger.TextLength;
Logger.ScrollToCaret();
}));
}
}
}

@ -0,0 +1,709 @@
using FLCompanionByDvurechensky.Data;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FLCompanionByDvurechensky.Services
{
/// <summary>
/// Сервис глобальной работы системы
/// </summary>
public class SystemService
{
/// <summary>
/// Все данные системы
/// </summary>
public Dictionary<string, UniverseSystem> UniverseSystemsData { get; set; }
/// <summary>
/// Список баз
/// </summary>
public Dictionary<string, UniverseBase> UniverseBasesData { get; set; }
/// <summary>
/// ID Систнем
/// </summary>
public List<string> SystemsID { get; set; }
/// <summary>
/// Список предметов в игре
/// </summary>
public List<Equipment> Equipments { get; set; }
/// <summary>
/// ID системы - Список зон добычи ископаемых
/// </summary>
public Dictionary<string, List<LootableZone>> SysAsteroids { get; set; }
/// <summary>
/// ID - Name системы
/// </summary>
public Dictionary<string, string> SystemNamesID { get; set; }
/// <summary>
/// Name - Id систем
/// </summary>
public Dictionary<string, string> SystemsNameId { get; set; }
/// <summary>
/// Cписок контейнеров
/// </summary>
public List<Loadout> Loadouts { get; set; }
/// <summary>
/// Список путей от систем до систем
/// </summary>
public List<string> HollRoads { get; set; }
/// <summary>
/// Массив очищенных айдишников систем для ComboBox
/// </summary>
public string[] ArraySystemsCombobox { get; set; }
/// <summary>
/// Обрабатывать русские наименования в алгоритмах
/// </summary>
public bool IsRussian { get; set; }
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Ansi)]
private static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern int LoadString(IntPtr hInstance, int ID, StringBuilder lpBuffer, int nBufferMax);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool FreeLibrary(IntPtr hModule);
private LogService LogService { get; set; }
private string BaseId { get; set; }
private string SystemID { get; set; }
private int SurptiseNick_ID { get; set; }
/// <summary>
/// Конструктор
/// </summary>
/// <param name="isRussian">использование русского языка(TODO: по умолчанию только он)</param>
/// <param name="logService">экземпляр сервиса логирования</param>
public SystemService(bool isRussian, LogService logService)
{
UniverseSystemsData = new Dictionary<string, UniverseSystem>();
UniverseBasesData = new Dictionary<string, UniverseBase>();
SystemNamesID = new Dictionary<string, string>();
SystemsNameId = new Dictionary<string, string>();
SysAsteroids = new Dictionary<string, List<LootableZone>>();
Equipments = new List<Equipment>();
SystemsID = new List<string>();
Loadouts = new List<Loadout>();
HollRoads = new List<string>();
IsRussian = isRussian;
LogService = logService;
}
/// <summary>
/// Получение и обработка информации
/// </summary>
/// <param name="systems">Список систем</param>
/// <param name="roadStart">Выбор пути старта</param>
/// <param name="roadStop">Выбор точки остановки</param>
/// <param name="equipments">Выбор оборудования для поиска</param>
/// <param name="logService">Экземпляр сервиса логирования</param>
public void GetInfo(ComboBox systems, ComboBox roadStart, ComboBox roadStop, ComboBox equipments, LogService logService)
{
try
{
var stopwatch = new Stopwatch();
Task.Factory.StartNew(delegate ()
{
Parallel.Invoke(() => GetAllSystems(),
() => GetAllEquipments(equipments),
() => GetAllAsteroids(),
() => GetAllLoadouts(),
() => GetAllBases(roadStart, roadStop, systems));
});
}
catch (Exception exception)
{
logService.ErrorLogEvent(exception.Message);
}
}
/// <summary>
/// Получение списка грузов
/// </summary>
/// <param name="line"></param>
/// <param name="logService"></param>
private void GetLoadout(string line)
{
if (line.Contains("nickname ="))
{
SurptiseNick_ID++;
var nickName = (line.Substring(10, line.Length - 10)).Trim().ToLower();
Loadouts.Add(new Loadout() { Name = nickName });
}
if (line.Contains("archetype ="))
{
var arch = (line.Substring(11, line.Length - 11)).Trim().ToLower();
Loadouts[SurptiseNick_ID - 1].Archetype = arch;
}
if (line.Contains("cargo ="))
{
var cargoNameCount = (line.Substring(7, line.Length - 7)).Trim().ToLower();
var name = cargoNameCount.Substring(0, cargoNameCount.IndexOf(','));
var count = cargoNameCount.Substring(cargoNameCount.IndexOf(',') + 1, cargoNameCount.Length - (cargoNameCount.IndexOf(',') + 1));
int.TryParse(count, out int res);
Loadouts[SurptiseNick_ID - 1].Cargo.Add(new Cargo()
{
Name = name,
Count = res
});
}
}
/// <summary>
/// Получение информации о системе
/// </summary>
/// <param name="line">строка с данными</param>
private void GetSystemDataToFile(string line)
{
if (line.Contains("nickname"))
{
SystemID = (line.Substring(10, line.Length - 10)).Trim().ToLower();
UniverseSystemsData.Add(SystemID, new UniverseSystem()
{
Id = SystemID
});
}
if (line.Contains("strid_name"))
{
var dll_name = (line.Substring(12, line.Length - 12)).Trim();
UniverseSystemsData[SystemID].DLL_Name = dll_name;
var id = SystemID.ToLower();
string name = string.Empty;
if (SystemNamesID.ContainsKey(id)) name = SystemNamesID[id];
else name = id;
UniverseSystemsData[SystemID].Name = name;
}
if (line.Contains("visit"))
{
var visit = (line.Substring(7, line.Length - 7)).Trim();
UniverseSystemsData[SystemID].Visit = int.Parse(visit);
}
if (line.Contains("ids_info"))
{
var dll_ids_name = (line.Substring(10, line.Length - 10)).Trim();
UniverseSystemsData[SystemID].DLL_InfoCard = dll_ids_name;
}
if (line.Contains("file"))
{
var file = (line.Substring(6, line.Length - 6)).Trim();
UniverseSystemsData[SystemID].INI = file;
GetSystemInfo(SystemID);
}
if (line.Contains("NavMapScale"))
{
var nav = (line.Substring(13, line.Length - 13)).Trim();
IFormatProvider formatter = new NumberFormatInfo { NumberDecimalSeparator = "." };
UniverseSystemsData[SystemID].NavMapScale = double.Parse(nav, formatter);
}
}
/// <summary>
/// Получение списка баз системы
/// </summary>
/// <param name="line">строка с информацией</param>
private void GetBaseDataToFile(string line)
{
if (line.Contains("nickname"))
{
BaseId = (line.Substring(10, line.Length - 10)).Trim().ToLower();
UniverseBasesData.Add(BaseId, new UniverseBase()
{
Id = BaseId
});
}
if (line.Contains("strid_name"))
{
var dll_name = (line.Substring(12, line.Length - 12)).Trim();
if (dll_name.Contains(";"))
dll_name = dll_name.Substring(0, dll_name.IndexOf(';'));
UniverseBasesData[BaseId].DLL_Name = dll_name;
var names = GetNameSystem(int.Parse(dll_name), BaseId);
foreach (var name in names)
{
UniverseBasesData[BaseId].Name += name + " | ";
}
}
}
/// <summary>
/// Читает конфигурационный файл системы
/// </summary>
/// <param name="systemId">ID системы</param>
private void GetSystemInfo(string systemId)
{
var sr = new StreamReader(UniverseSystemsData[systemId].INI);
var data = sr.ReadLine();
var Object = false;
var Zone = false;
while (data != null)
{
if (data.Contains("Object"))
{
Object = true;
Zone = false;
if (UniverseSystemsData[systemId].Objects == null)
UniverseSystemsData[systemId].Objects = new List<ObjectSystem>();
}
if (data.Contains("Zone"))
{
Object = false;
Zone = true;
}
if (Object)
{
if (data.Contains("nickname"))
{
var id_name = (data.Substring(10, data.Length - 10)).Trim();
UniverseSystemsData[systemId].Objects.Add(new ObjectSystem()
{
ID = id_name
});
}
if (data.Contains("pos ="))
{
var position = (data.Substring(5, data.Length - 5)).Trim();
if (position.Contains(";"))
position = (position.Substring(0, position.IndexOf(';')).Trim());
int[] pos = position.Split(',').Select(n =>
{
int val = 0;
n = n.Trim();
var state = int.TryParse(n, out val);
if (state == false)
{
double td = 0;
if (n.Contains('.'))
{
IFormatProvider formatter = new NumberFormatInfo { NumberDecimalSeparator = "." };
td = double.Parse(n, formatter);
int i = (int)Math.Round(td, MidpointRounding.AwayFromZero);
val = i;
return val;
}
else
{
File.AppendAllText("log.txt", "Error Parse Position - " + position + " - " + UniverseSystemsData[systemId].INI + "\n");
return 0;
}
}
else return val;
}).ToArray();
if(pos == null)
{
LogService.ErrorLogEvent(systemId);
}
else UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].Pos = pos;
}
if (data.Contains("base ="))
{
var baseID = (data.Substring(6, data.Length - 6)).Trim();
UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].BaseID = baseID;
}
if (data.Contains("ids_name ="))
{
var idsName = (data.Substring(10, data.Length - 10)).Trim();
UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].IdsName = idsName;
}
if (data.Contains("archetype ="))
{
var archetype = (data.Substring(11, data.Length - 11)).Trim();
UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].Archetype = archetype;
}
if (data.Contains("loadout ="))
{
var loadout = (data.Substring(9, data.Length - 9)).Trim();
UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].Loadout = loadout;
}
if (data.Contains("goto =") && !data.Contains(';'))
{
var loadout = (data.Substring(6, data.Length - 6)).Trim().ToLower();
var idS = loadout.Substring(0, loadout.IndexOf(','));
var nameS = SystemNamesID[idS];
UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].Goto = nameS;
UniverseSystemsData[systemId].Objects[UniverseSystemsData[systemId].Objects.Count - 1].GotoID = idS;
}
}
if(Zone)
{
if (data.Contains("nickname ="))
{
var id_name = (data.Substring(10, data.Length - 10)).Trim();
UniverseSystemsData[systemId].Zones.Add(new ZoneSystem()
{
ID = id_name
});
}
if (data.Contains("pos ="))
{
var position = (data.Substring(5, data.Length - 5)).Trim();
if (position.Contains(";"))
position = (position.Substring(0, position.IndexOf(';')).Trim());
int[] pos = position.Split(',').Select(n =>
{
var val = 0;
n = n.Trim();
var state = int.TryParse(n, out val);
if (state == false)
{
double td = 0;
if (n.Contains('.'))
{
IFormatProvider formatter = new NumberFormatInfo { NumberDecimalSeparator = "." };
td = double.Parse(n, formatter);
int i = (int)Math.Round(td, MidpointRounding.AwayFromZero);
val = i;
return val;
}
else
{
File.AppendAllText("log.txt", "Error Parse Position - " + position + " - " + UniverseSystemsData[systemId].INI + "\n");
return 0;
}
}
else return val;
}).ToArray();
if (pos == null)
{
LogService.ErrorLogEvent(systemId);
}
else UniverseSystemsData[systemId].Zones[UniverseSystemsData[systemId].Zones.Count - 1].Pos = pos;
}
}
data = sr.ReadLine();
}
}
/// <summary>
/// Получение человекочитаемого наименования
/// </summary>
/// <param name="id">идентификатор элемента объекта</param>
/// <param name="baseId">идентификатор объекта</param>
/// <returns>список наименований</returns>
public List<string> GetNameSystem(int id, string baseId)
{
string[] dlls = new string[] { "NameResources.dll", "SBM.dll", "SBM2.dll", "SBM3.dll" };
var names = new List<string>();
foreach(string dll in dlls)
{
string name = ExtractStringFromDLL(dll, id);
if (!string.IsNullOrEmpty(name))
{
if(!names.Contains(name))
{
names.Add(name);
}
}
}
if(names.Count == 0)
{
names.Add("НЕТ НАЗВАНИЙ");
LogService.ErrorLogEvent($"[Имя объекта системы][{baseId}] id: " + id + " - не содержит названия");
}
return names;
}
/// <summary>
/// Обновление содержимого ключевых элементов Combobox
/// </summary>
private void LoadComboboxData(ComboBox roadStart, ComboBox roadStop, ComboBox systems)
{
int resultCountSystem = 0;
var countCurrSys = 0;
ArraySystemsCombobox = new string[UniverseSystemsData.Count];
var dirInfoSystems = new DirectoryInfo("SYSTEMS");
var dirInfoArray = dirInfoSystems.GetDirectories();
//формирую список идентификаторов систем
foreach (var dirInfo in dirInfoArray)
{
var dirName = dirInfo.ToString().ToLower();
if (UniverseSystemsData.ContainsKey(dirName))
{
resultCountSystem++;
var roadStartData = new ComboBoxItem();
roadStartData.Text = (string.IsNullOrEmpty(UniverseSystemsData[dirName].Name) ? UniverseSystemsData[dirName].Id : UniverseSystemsData[dirName].Name);
roadStartData.ID = UniverseSystemsData[dirName].Id;
roadStart.BeginInvoke(new Action(() =>
{
roadStart.Items.Add(roadStartData);
roadStart.SelectedIndex = 0;
}));
var roadStopData = new ComboBoxItem();
roadStopData.Text = (string.IsNullOrEmpty(UniverseSystemsData[dirName].Name) ? UniverseSystemsData[dirName].Id : UniverseSystemsData[dirName].Name);
roadStopData.ID = UniverseSystemsData[dirName].Id;
roadStop.BeginInvoke(new Action(() =>
{
roadStop.Items.Add(roadStopData);
if(roadStop.Items.Count >= 2) roadStop.SelectedIndex = 1;
}));
if (UniverseSystemsData[dirName].Name.Length == 0)
{
systems.BeginInvoke(new Action(() =>
{
systems.Items.Add(UniverseSystemsData[dirName].Id);
}));
}
else
{
systems.BeginInvoke(new Action(() =>
{
systems.Items.Add(UniverseSystemsData[dirName].Name + " | " + UniverseSystemsData[dirName].Id);
systems.SelectedIndex = 0;
}));
}
ArraySystemsCombobox[countCurrSys] = dirName;
countCurrSys++;
SystemsID.Add(UniverseSystemsData[dirName].Id);
}
else
{
resultCountSystem++;
LogService.ErrorWarningEvent("[" + resultCountSystem + "] " + dirName + " - не является системой...");
}
}
ArraySystemsCombobox = ArraySystemsCombobox.Where(x => x != null).ToArray();
LogService.LogEvent("Обновление данных в интерфейсе о системах завершено");
LoadRoute();
}
/// <summary>
/// Обработка маршрутов между системами (все гиперпереходы)
/// </summary>
private void LoadRoute()
{
foreach (var sys in ArraySystemsCombobox)
{
foreach (var elem in UniverseSystemsData[sys].Objects.FindAll((el) => !el.ID.Contains('=') && el.ID.ToLower().Contains(sys.ToLower() + "_to")))
{
var name = elem.ID;
var destiny = name.Substring(name.IndexOf('_') + 4, name.Length - 4 - sys.Length);
if (destiny.IndexOf('_') != -1)
destiny = destiny.Substring(0, destiny.IndexOf('_'));
//проверяем goto
if (elem.GotoID == null || elem.GotoID.ToLower().Contains(sys.ToLower())) continue;
var res = sys.ToLower() + "=" + elem.GotoID.ToLower();
if (!res.Contains("police01"))
HollRoads.Add(res);
}
HollRoads.Add("aod01=hu04"); //система ангелов тьмы
HollRoads.Add("hu04=aod01"); //система ангелов тьмы
HollRoads.Add("dream_system01=hi03"); //система грёз
HollRoads.Add("hi03=dream_system01"); //система грёз
}
//формирование словаря для маршрутизации в русском переводе
for (int i = 0; i < ArraySystemsCombobox.Length; i++)
{
if (!SystemsNameId.ContainsKey(UniverseSystemsData[ArraySystemsCombobox[i]].Name))
SystemsNameId.Add(UniverseSystemsData[ArraySystemsCombobox[i]].Name, ArraySystemsCombobox[i]);
else
LogService.LogEvent(UniverseSystemsData[ArraySystemsCombobox[i]].Name);
}
LogService.LogEvent("Список маршрутов определён и обновлён в интерфейсе");
}
/// <summary>
/// Чтение списка баз и информации о системе
/// </summary>
private void GetAllBases(ComboBox roadStart, ComboBox roadStop, ComboBox systems)
{
using (var reader = new StreamReader("universe.ini"))
{
var line = string.Empty;
bool systemState = false, baseState = false;
while ((line = reader.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
if (line.Contains("[system]"))
{
systemState = true;
baseState = false;
}
if (line.Contains("[Base]"))
{
systemState = false;
baseState = true;
}
if (systemState)
GetSystemDataToFile(line);
if (baseState)
GetBaseDataToFile(line);
}
}
}
LogService.LogEvent($"Вcя информация о {UniverseSystemsData.Count} системах игры прочитана");
LogService.LogEvent($"Все базы игры прочитаны: {UniverseBasesData.Count}");
LoadComboboxData(roadStart, roadStop, systems);
}
/// <summary>
/// Получает список грузов
/// </summary>
private void GetAllLoadouts()
{
//получаю список грузов
using (var reader = new StreamReader("loadouts.ini"))
{
var line = string.Empty;
bool load = false;
while ((line = reader.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
line = line.ToLower();
if (line.Contains("[loadout]"))
load = true;
if (load) GetLoadout(line);
}
}
}
LogService.LogEvent($"Все грузы игры прочитаны: {Loadouts.Count}");
}
/// <summary>
/// Получение списка систем
/// </summary>
private void GetAllSystems()
{
using (var reader = new StreamReader("systems.ini"))
{
var line = string.Empty;
while ((line = reader.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
var idS = line.Substring(0, line.IndexOf('='));
var nameS = line.Substring(line.IndexOf('=') + 1);
SystemNamesID.Add(idS, nameS);
}
}
}
LogService.LogEvent($"Все системы игры прочитаны: {SystemNamesID.Count}");
}
/// <summary>
/// Получаение всех наименований оборудования в игре
/// </summary>
private void GetAllEquipments(ComboBox equipments)
{
using (var reader = new StreamReader("equipments.ini"))
{
var line = string.Empty;
while ((line = reader.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
var tmp1 = line.Substring(line.IndexOf(',') + 1, line.Length - (line.IndexOf(',') + 1));
var tmp2 = tmp1.Substring(tmp1.IndexOf(',') + 1, tmp1.Length - (tmp1.IndexOf(',') + 1));
var tmp3 = tmp2.Substring(tmp2.IndexOf(',') + 1, tmp2.Length - (tmp2.IndexOf(',') + 1));
var tmp4 = tmp3.Substring(tmp3.IndexOf(',') + 1, tmp3.Length - (tmp3.IndexOf(',') + 1));
var Id = tmp4.Substring(0, tmp4.IndexOf(',')).Trim();
var tmp5 = tmp4.Substring(tmp4.IndexOf(',') + 1, tmp4.Length - (tmp4.IndexOf(',') + 1));
var Name = tmp5.Substring(0, tmp5.IndexOf(',')).Trim();
Equipments.Add(new Equipment() { Id = Id, Name = Name });
}
}
}
LogService.LogEvent($"Всё оброрудование игры прочитано: {Equipments.Count}");
}
/// <summary>
/// Получаение всех данных по астероидным полям
/// </summary>
private void GetAllAsteroids()
{
var dirInfoSystems = new DirectoryInfo("ASTEROIDS");
var files = dirInfoSystems.GetFiles();
foreach(var file in files)
{
if (!file.Name.Contains('_')) continue;
var idSys = file.Name.Substring(0, file.Name.IndexOf('_'));
var path = Path.Combine("ASTEROIDS", file.Name);
//получаю список груза
using (var reader = new StreamReader(path))
{
var line = string.Empty;
bool loot = false;
var nameZone = string.Empty;
while ((line = reader.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
if (line.Contains("[LootableZone]")) loot = true;
if (line.Contains("[TexturePanels]")) loot = false;
if (loot)
{
//Id зоны
if(line.Contains("zone ="))
{
nameZone = line.Substring(line.IndexOf('=') + 1, line.Length - (line.IndexOf('=') + 1)).Trim();
}
//Груз астероида
if(line.Contains("asteroid_loot_commodity ="))
{
var lootes = line.Substring(line.IndexOf('=') + 1, line.Length - (line.IndexOf('=') + 1)).Trim();
//Если система с таким ID существует, то заполняем инфу в неё
if (SysAsteroids.ContainsKey(idSys))
{
SysAsteroids[idSys].Add(new LootableZone()
{
LootId = lootes.ToLower(),
ZoneName = nameZone.ToLower()
});
}
else //создаём такую систему со своими зонами астероидов
{
SysAsteroids.Add(idSys, new List<LootableZone>() { new LootableZone()
{
LootId = lootes.ToLower(),
ZoneName = nameZone.ToLower()
}});
}
}
}
}
}
}
}
LogService.LogEvent($"Все астероидные поля прочитаны: {SysAsteroids.Count}");
}
/// <summary>
/// Чтение элемента из DLL
/// </summary>
/// <param name="file">Адрес до файла</param>
/// <param name="number">Номер элемента</param>
/// <returns>строка с данными</returns>
private string ExtractStringFromDLL(string file, int number)
{
var lib = LoadLibrary(file);
var resultBuilder = new StringBuilder(2048);
LoadString(lib, number, resultBuilder, resultBuilder.Capacity);
FreeLibrary(lib);
return resultBuilder.ToString();
}
}
}

@ -0,0 +1,86 @@
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="http://schemas.panthernet.ru/graphx/">
<!-- VERTEX CONTROL -->
<Style TargetType="{x:Type controls:VertexControl}">
<Setter Property="Background" Value="#FFE3E3E3"/>
<Setter Property="BorderThickness" Value="15,3,15,3"/>
<Setter Property="Padding" Value="30,5,30,5"/>
<Setter Property="BorderBrush" Value="#FF393939"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:VertexControl}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
CornerRadius="30,30,30,30"
Padding="{TemplateBinding Padding}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ContentPresenter Content="{TemplateBinding Vertex}" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- VERTEX DRAGGING CONTROL -->
<Setter Property="controls:DragBehaviour.IsDragEnabled"
Value="True" />
<Setter Property="controls:HighlightBehaviour.IsHighlightEnabled" Value="False"/>
<Style.Triggers>
<Trigger Property="controls:HighlightBehaviour.Highlighted" Value="True">
<Setter Property="Background" Value="Gold"/>
<Setter Property="BorderThickness" Value="7"/>
</Trigger>
</Style.Triggers>
</Style>
<!-- EDGE CONTROL -->
<Style TargetType="{x:Type controls:EdgeControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:EdgeControl}">
<Grid>
<Path Stroke="{TemplateBinding Foreground}"
StrokeThickness="2" MinWidth="1" MinHeight="1"
ToolTip="{TemplateBinding ToolTip}"
x:Name="PART_edgePath"/>
<controls:DefaultEdgePointer NeedRotation="true" x:Name="PART_EdgePointerForTarget" >
<Path Data="M0,0.5 L1,1 1,0" Fill="Black" Stretch="Uniform" Width="30" Height="30"/>
</controls:DefaultEdgePointer>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="MinWidth"
Value="1" />
<Setter Property="MinHeight"
Value="1" />
<Setter Property="Background"
Value="Red" />
<Setter Property="Foreground"
Value="Black" />
<Setter Property="Opacity"
Value="1" />
<Setter Property="controls:HighlightBehaviour.IsHighlightEnabled" Value="False"/>
<Style.Triggers>
<Trigger Property="controls:HighlightBehaviour.Highlighted" Value="True">
<Setter Property="Foreground" Value="Gold"/>
<Setter Property="StrokeThickness" Value="5"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>

@ -0,0 +1,91 @@
[TexturePanels]
file = solar\asteroids\mine_shapes.ini
[Field]
cube_size = 1000
fill_dist = 6000
diffuse_color = 110, 110, 100
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
[properties]
flag = mine_danger_objects
flag = danger_density_high
[Exclusion Zones]
exclusion = Zone_AD01_vignette_01_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_02_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_03_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_04_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_05_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_06_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_07_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_08_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_09_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_10_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_11_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_12_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_13_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_14_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_15_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD01_vignette_16_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[Cube]
xaxis_rotation = 8, 40, 90, 158
yaxis_rotation = 5, 45, 100, 135
zaxis_rotation = 355, 45, 78, 145
asteroid = mine_spike1, -0.900000, 0.000000, 0.050000, 110, 0, 10, mine
asteroid = mine_spike1, 0.750000, 0.100000, 0.000000, 0, 45, 20, mine
asteroid = mine_spike1, 0.050000, -0.750000, -0.100000, 50, 35, 40, mine
asteroid = mine_spike1, 0.000000, 0.850000, 0.100000, 150, 15, 12, mine
asteroid = mine_spike1, 0.100000, 0.000000, -0.850000, 40, 0, 50, mine
asteroid = mine_spike1, -0.100000, 0.050000, 0.900000, 30, 15, 60, mine
[Band]
render_parts = 10
shape = asteroid_belt_mines
height = 7000
offset_dist = 6000
fade = 0.800000, 1.000000, 10, 11
texture_aspect = 0.750000
color_shift = 0.600000, 0.600000, 0.700000
vert_increase = 1
[AsteroidBillboards]
count = 10000
start_dist = 2500
fade_dist_percent = 0.500000
shape = spike_mine_tri
size = 200, 200

@ -0,0 +1,60 @@
[Field]
cube_size = 500 ;400
fill_dist = 5000 ;1100
diffuse_color = 210, 0, 0
ambient_color = 255, 225, 225
ambient_increase = 20, 30, 255
empty_cube_frequency = 0.100000
max_alpha = 0.900000
[properties]
flag = mine_danger_objects
flag = danger_density_high
[Exclusion Zones]
exclusion = Zone_AD02_vignette_01_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD02_vignette_02_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD02_vignette_03_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD02_01_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD02_02_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_AD02_03_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[Cube]
xaxis_rotation = 8, 40, 90, 158
yaxis_rotation = 5, 45, 100, 135
zaxis_rotation = 355, 45, 78, 145
asteroid = mine_spike2, -0.900000, 0.000000, 0.050000, 110, 0, 10, mine
asteroid = mine_spike2, 0.750000, 0.100000, 0.000000, 0, 45, 20, mine
asteroid = mine_spike2, 0.050000, -0.750000, -0.100000, 50, 35, 40, mine
asteroid = mine_spike2, 0.000000, 0.850000, 0.100000, 150, 15, 12, mine
asteroid = mine_spike2, 0.100000, 0.000000, -0.850000, 40, 0, 50, mine
asteroid = mine_spike2, -0.100000, 0.050000, 0.900000, 30, 15, 60, mine
[Band]
render_parts = 10
shape = asteroid_belt_mines
height = 7000
offset_dist = 6000
fade = 0.800000, 1.000000, 10, 11
texture_aspect = 0.750000
color_shift = 0.600000, 0.600000, 0.700000
vert_increase = 1
[AsteroidBillboards]
count = 10000
start_dist = 2500
fade_dist_percent = 0.500000
shape = spike_mine_tri
size = 200, 200

@ -0,0 +1,201 @@
[TexturePanels]
file = solar\asteroids\mine_shapes.ini
[Field]
cube_size = 500 ;400
fill_dist = 5000 ;1100
diffuse_color = 1, 255, 255
ambient_color = 1, 225, 255
ambient_increase = 1, 255, 255
empty_cube_frequency = 0.100000
max_alpha = 1.000000
[properties]
flag = mine_danger_objects
flag = danger_density_high
[Exclusion Zones]
exclusion = Zone_ALDRIN01_mine_01_exclusion_01
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_01_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_02_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_03_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_04_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_05_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_06_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_07_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_08_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_09_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_10_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_11_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_12_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_13_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_14_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_15_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_16_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_17_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_18_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_19_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_20_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_21_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_22_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_23_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_24_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_25_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_26_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_27_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_28_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_29_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_30_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_31_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_32_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_33_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_34_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_35_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_36_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_37_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_38_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_39_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_40_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_41_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_42_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_43_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_44_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_45_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_46_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_47_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_48_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_49_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_50_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
exclusion = Zone_ALDRIN01_51_lane_access
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[Cube]
xaxis_rotation = 8, 40, 90, 158
yaxis_rotation = 5, 45, 100, 135
zaxis_rotation = 355, 45, 78, 145
asteroid = mine_spike3, -0.900000, 0.000000, 0.050000, 110, 0, 10, mine
asteroid = mine_spike3, 0.750000, 0.100000, 0.000000, 0, 45, 20, mine
asteroid = mine_spike3, 0.050000, -0.750000, -0.100000, 50, 35, 40, mine
asteroid = mine_spike3, 0.000000, 0.850000, 0.100000, 150, 15, 12, mine
asteroid = mine_spike3, 0.100000, 0.000000, -0.850000, 40, 0, 50, mine
asteroid = mine_spike3, -0.100000, 0.050000, 0.900000, 30, 15, 60, mine
[Band]
render_parts = 10
shape = asteroid_belt_mines
height = 7000
offset_dist = 6000
fade = 0.800000, 1.000000, 10, 11
texture_aspect = 0.950000
color_shift = 0.600000, 0.690000, 0.690000
vert_increase = 1
[AsteroidBillboards]
count = 10000
start_dist = 2500
fade_dist_percent = 0.500000
shape = spike_mine_tri
size = 200, 200

@ -0,0 +1,32 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commod_Space_beetle01
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commod_Space_beetle01
asteroid_loot_count = 0, 0
dynamic_loot_count = 5, 10
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0
[DynamicAsteroids]
asteroid = dasteroid_Space_beetle1
count = 500
placement_radius = 300 ;200.000000
placement_offset = 0 ;150.000000
max_velocity = 50.000000
max_angular_velocity = 0.000000
color_shift = 1.000000, 1.000000, 1.000000

@ -0,0 +1,32 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commod_Space_beetle02
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commod_Space_beetle02
asteroid_loot_count = 0, 0
dynamic_loot_count = 5, 10
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0
[DynamicAsteroids]
asteroid = dasteroid_Space_beetle2
count = 500
placement_radius = 300 ;200.000000
placement_offset = 0 ;150.000000
max_velocity = 50.000000
max_angular_velocity = 0.000000
color_shift = 1.000000, 1.000000, 1.000000

@ -0,0 +1,105 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1500
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[DynamicAsteroids]
asteroid = SG_Necalli_Asteroid01
count = 7
placement_radius = 1600.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = SG_Necalli_Asteroid02
count = 7
placement_radius = 1600.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = SG_Necalli_Asteroid03
count = 5
placement_radius = 1600.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = SG_Necalli_Asteroid04
count = 5
placement_radius = 1600.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = SG_Necalli_Asteroid01
count = 5
placement_radius = 1600.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
;[Band]
;render_parts = 6
;shape = asteroid_belt_04
;height = 6000
;offset_dist = 3000
;fade = 0.800000, 1.250000, 15, 17
;texture_aspect = 1.000000
;ambient_intensity = 2
;vert_increase = 2
;color_shift = 0.000000, 0.700000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commod_AOD_ore
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commod_AOD_ore
asteroid_loot_count = 0, 0
dynamic_loot_count = 10, 25
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0
[Cube]
xaxis_rotation = 0, 0, 180, 180
yaxis_rotation = 0, 30, 90, 195
zaxis_rotation = 0, 0, 180, 180
asteroid = badlands_large1_01, -0.7, 0.5, 0.5, 3, 35, 0
asteroid = badlands_medium2_01, -0.4, -0.4, -0.7, 5, 0, 0
asteroid = badlands_small1_01, 0.3, -0.65, 0.2, 0, 50, 8
[DynamicAsteroids]
asteroid = dasteroid_badlands_small1
count = 50
placement_radius = 300 ;200.000000
placement_offset = 0 ;150.000000
max_velocity = 50.000000
max_angular_velocity = 0.000000
color_shift = 1.000000, 1.000000, 1.000000

@ -0,0 +1,65 @@
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;2000
diffuse_color = 255, 255, 255
ambient_color = 120, 140, 120
ambient_increase = 70, 70, 70
;empty_cube_frequency = 0.500000
[Exclusion Zones]
exclusion = Zone_AR01_city_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR01_to_AR02_exclusion
exclude_dynamic_asteroids = 1
[properties]
flag = nomad_objects
flag = Object_density_med
[DynamicAsteroids]
asteroid = nomad01_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nomad01_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nomad01_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nomad01_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_nomad_small1
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 10.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;

@ -0,0 +1,74 @@
[Field]
cube_size = 1000 ;500
fill_dist = 5000 ;2400
diffuse_color = 255, 255, 255
ambient_color = 130, 130, 130
ambient_increase = 50, 80, 80
;empty_cube_frequency = 0.500000
[properties]
flag = ice_objects
flag = Object_density_low
[Exclusion Zones]
exclusion = AR02_to_AR01_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR02_planet_1_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = ice_spike_asteroid200
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid125
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid200
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid125
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid50
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_ice_crystal_small1
;count = 10
;placement_radius = 300 ;200.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;

@ -0,0 +1,72 @@
[Field]
cube_size = 1000 ;500
fill_dist = 5000 ;2400
diffuse_color = 255, 255, 255
ambient_color = 130, 130, 130
ambient_increase = 50, 80, 80
;empty_cube_frequency = 0.500000
[properties]
flag = ice_objects
flag = Object_density_low
[Exclusion Zones]
exclusion = AR03_to_AR02_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = ice_spike_asteroid200
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid125
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid200
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid125
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_spike_asteroid50
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_ice_crystal_small1
;count = 10
;placement_radius = 300 ;200.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;

@ -0,0 +1,65 @@
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;2000
diffuse_color = 255, 255, 255
ambient_color = 120, 140, 120
ambient_increase = 70, 70, 70
;empty_cube_frequency = 0.500000
[Exclusion Zones]
exclusion = AR03_01_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR03_to_AR04_exclusion
exclude_dynamic_asteroids = 1
[properties]
flag = nomad_objects
flag = Object_density_med
[DynamicAsteroids]
asteroid = nomad01_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nomad01_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nomad01_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nomad01_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_nomad_small1
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 10.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;

@ -0,0 +1,88 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 30, 30, 30
ambient_increase = 0, 0, 0
[properties]
flag = rock_objects
flag = Object_density_med
[Exclusion Zones]
exclusion = AR04_to_AR03_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR04_to_AR05_exclusion
exclude_dynamic_asteroids = 1
exclusion = Zone_AR04_planet_3_exclusion
exclude_dynamic_asteroids = 1
exclusion = Zone_AR04_planet_1_exclusion
exclude_dynamic_asteroids = 1
exclusion = Zone_AR04_02_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = nonmineable_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid30
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid30
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid90
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid30
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.700000, 0.700000, 0.700000
ambient_intensity = 1.000000
size = 60, 120

@ -0,0 +1,97 @@
[TexturePanels]
file = solar\asteroids\debris_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 100, 100, 80
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
;empty_cube_frequency = 0.600000
[properties]
flag = Debris_objects
flag = Object_density_low
[Exclusion Zones]
exclusion = AR05_to_AR06_exclusion
exclude_dynamic_asteroids = 1
exclusion = Zone_AR05_04_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = debris_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_med2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 10
shape = debris_belt_04
height = 6000
offset_dist = 2500
fade = 1.100000, 1.450000, 10, 11
texture_aspect = 1.000000
color_shift = 0.900000, 0.900000, 0.900000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;150
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.300000
shape = debris_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 50, 130
;[DynamicAsteroids]
;asteroid = dasteroid_debris_small1
;count = 5
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 8.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 0, 0
dynamic_loot_count = 50, 100
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 2

@ -0,0 +1,105 @@
[TexturePanels]
file = solar\asteroids\debris_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 100, 100, 80
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
;empty_cube_frequency = 0.600000
[properties]
flag = Debris_objects
flag = Object_density_low
[Exclusion Zones]
exclusion = AR07_to_AR06_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR07_Sun1_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR07_01_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR07_02_exclusion
exclude_dynamic_asteroids = 1
[Exclusion Zones]
exclusion = AR05_to_AR06_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = debris_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_med2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 10
shape = debris_belt_04
height = 6000
offset_dist = 2500
fade = 1.100000, 1.450000, 10, 11
texture_aspect = 1.000000
color_shift = 0.900000, 0.900000, 0.900000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;150
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.300000
shape = debris_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 50, 130
;[DynamicAsteroids]
;asteroid = dasteroid_debris_small1
;count = 5
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 8.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 0, 0
dynamic_loot_count = 50, 100
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,91 @@
[TexturePanels]
file = solar\asteroids\debris_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 100, 100, 80
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
;empty_cube_frequency = 0.600000
[properties]
flag = Debris_objects
flag = Object_density_low
[DynamicAsteroids]
asteroid = debris_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_med2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 10
shape = debris_belt_04
height = 6000
offset_dist = 2500
fade = 1.100000, 1.450000, 10, 11
texture_aspect = 1.000000
color_shift = 0.900000, 0.900000, 0.900000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;150
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.300000
shape = debris_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 50, 130
;[DynamicAsteroids]
;asteroid = dasteroid_debris_small1
;count = 5
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 8.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 0, 0
dynamic_loot_count = 50, 100
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,88 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[DynamicAsteroids]
asteroid = rock_asteroid_x301
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_kaaron
asteroid_loot_commodity = commodity_kaaron
dynamic_loot_container = lootcrate_ast_loot_kaaron
dynamic_loot_commodity = commodity_kaaron
asteroid_loot_count = 0, 0
dynamic_loot_count = 50, 90
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,93 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[Exclusion Zones]
exclusion = DK_Asteroid_exclusion01
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[DynamicAsteroids]
asteroid = rock_asteroid_x301
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_nukleon
asteroid_loot_commodity = commodity_nukleon
dynamic_loot_container = lootcrate_ast_loot_nukleon
dynamic_loot_commodity = commodity_nukleon
asteroid_loot_count = 0, 0
dynamic_loot_count = 100, 150
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,91 @@
[TexturePanels]
file = solar\asteroids\debris_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 100, 100, 80
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
;empty_cube_frequency = 0.600000
[properties]
flag = Debris_objects
flag = Object_density_low
[DynamicAsteroids]
asteroid = debris_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_med2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 10
shape = debris_belt_04
height = 6000
offset_dist = 2500
fade = 1.100000, 1.450000, 10, 11
texture_aspect = 1.000000
color_shift = 0.900000, 0.900000, 0.900000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;150
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.300000
shape = debris_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 50, 130
;[DynamicAsteroids]
;asteroid = dasteroid_debris_small1
;count = 5
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 8.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 0, 0
dynamic_loot_count = 50, 100
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,94 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[Exclusion Zones]
exclusion = AR10_to_AR09_exclusion
exclude_dynamic_asteroids = 1
exclusion = AR10_01_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = rock_asteroid_x301
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_niobium
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_niobium
asteroid_loot_count = 0, 0
dynamic_loot_count = 45, 65
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,62 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;355
fill_dist = 5000 ;1250
tint_field = 15, 15, 15
max_alpha = 1.000000
;empty_cube_frequency = 0.200000
[properties]
flag = badland_danger_objects
flag = danger_density_low
[DynamicAsteroids]
asteroid = badlands_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_medium2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_badlands_small1
;count = 10
;placement_radius = 300 ;200.000000
;placement_offset = 0 ;150.000000
;max_velocity = 50.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_everlasting_gobstopper
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_everlasting_gobstopper
asteroid_loot_count = 0, 0
dynamic_loot_count = 10, 17
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,88 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[DynamicAsteroids]
asteroid = rock_asteroid_x304
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x305
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x306
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x307
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x304
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_Balagar
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_Balagar
asteroid_loot_count = 0, 0
dynamic_loot_count = 45, 65
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,91 @@
[TexturePanels]
file = solar\asteroids\debris_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 100, 100, 80
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
;empty_cube_frequency = 0.600000
[properties]
flag = Debris_objects
flag = Object_density_low
[DynamicAsteroids]
asteroid = debris_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_med2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 10
shape = debris_belt_04
height = 6000
offset_dist = 2500
fade = 1.100000, 1.450000, 10, 11
texture_aspect = 1.000000
color_shift = 0.900000, 0.900000, 0.900000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;150
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.300000
shape = debris_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 50, 130
;[DynamicAsteroids]
;asteroid = dasteroid_debris_small1
;count = 5
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 8.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 0, 0
dynamic_loot_count = 50, 100
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,91 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 170, 220, 255
ambient_color = 60, 60, 60
ambient_increase = 0, 0, 0
[properties]
flag = rock_objects
flag = Object_density_med
[DynamicAsteroids]
asteroid = mineable1_asteroid10
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid30
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
zone = zone_ew01_img_mining_area
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_niobium
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_niobium
asteroid_loot_count = 0, 0
dynamic_loot_count = 1, 1
asteroid_loot_difficulty = 20
dynamic_loot_difficulty = 2
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_niobium
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_niobium
asteroid_loot_count = 0, 0
dynamic_loot_count = 1, 1
asteroid_loot_difficulty = 70
dynamic_loot_difficulty = 1
[FlExplorer]
template = solar\asteroids\ew01_malvinas_mineable_asteroids.ini

@ -0,0 +1,65 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;355
fill_dist = 5000 ;1250
tint_field = 15, 15, 15
max_alpha = 1.000000
;empty_cube_frequency = 0.200000
[properties]
flag = badland_danger_objects
flag = danger_density_low
[DynamicAsteroids]
asteroid = badlands_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_medium2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_badlands_small1
;count = 10
;placement_radius = 300 ;200.000000
;placement_offset = 0 ;150.000000
;max_velocity = 50.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_everlasting_gobstopper
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_everlasting_gobstopper
asteroid_loot_count = 0, 0
dynamic_loot_count = 25, 50
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0
[FlExplorer]
template = solar\asteroids\li01_badlands_asteroids.ini

@ -0,0 +1,87 @@
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1500
diffuse_color = 255, 255, 255
ambient_color = 255, 255, 255
ambient_increase = 40, 40, 40
;empty_cube_frequency = 0.400000
[properties]
flag = lava_objects
flag = object_density_med
[DynamicAsteroids]
asteroid = lava02_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = lava02_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = lava02_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = lava02_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = lava02_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = lava02_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_lava02
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 10.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 0.500000, 0
;
[LootableZone]
zone = zone_Rh05_Kruger_diamonds
asteroid_loot_container = lootcrate_ast_loot_diamonds
asteroid_loot_commodity = commodity_diamonds
dynamic_loot_container = lootcrate_ast_loot_diamonds
dynamic_loot_commodity = commodity_diamonds
asteroid_loot_count = 1, 30
dynamic_loot_count = 1, 30 ;1, 1
asteroid_loot_difficulty = 9 ;70
dynamic_loot_difficulty = 9 ;10

@ -0,0 +1,104 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1500
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 60, 60, 60
;empty_cube_frequency = 0.400000
[properties]
flag = rock_objects
flag = object_density_med
[Exclusion Zones]
exclusion = Zone_Am02_to_Am01_hole
exclude_billboards = 1
[DynamicAsteroids]
asteroid = rock_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 4
shape = asteroid_belt_04
height = 5000
offset_dist = 3000
fade = 1.000000, 1.350000, 10, 14
texture_aspect = 1.000000
color_shift = 1.000000, 1.000000, 1.000000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;200
start_dist = 2500 ;1100
fade_dist_percent = 0.5 ;0.350000
shape = roid_rock_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 30, 110
;[DynamicAsteroids]
;asteroid = dasteroid_rock_small1
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;

@ -0,0 +1,20 @@
[Field]
cube_size = 400
fill_dist = 1100
diffuse_color = 100, 150, 255
ambient_color = 100, 200, 255
ambient_increase = 20, 30, 255
empty_cube_frequency = 0
max_alpha = 0.4
[properties]
flag = danger_density_med
flag = gas_danger_objects
[Cube]
asteroid = mine_oxygen, 0.8, -0.5, -0.2, 15, 90, 120, mine
asteroid = mine_oxygen, -0.3, 0.6, 0.8, 85, 0, 185, mine
asteroid = mine_oxygen, 0.4, -0.7, -0.2, 15, 90, 120, mine
asteroid = mine_oxygen, -0.3, -0.3, 0.8, 85, 0, 185, mine
asteroid = mine_oxygen, -0.7, 0.4, -0.4, 75, 30, 70, mine

@ -0,0 +1,49 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
tint_field = 15, 15, 15
max_alpha = 1.000000
[properties]
flag = badland_danger_objects
flag = danger_density_low
[DynamicAsteroids]
asteroid = badlands_large1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_medium2
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_small1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_water
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_water
asteroid_loot_count = 0, 0
dynamic_loot_count = 90, 140
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 2

@ -0,0 +1,98 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1700
tint_field = 160, 225, 200
;empty_cube_frequency = 0.600000
[properties]
flag = rock_objects
flag = Object_density_med
flag = danger_density_low
[Exclusion Zones]
exclusion = Zone_BR08_pop_ambient_01
exclude_dynamic_asteroids = 1
exclusion = Zone_BR08_Tradelane_01
exclusion = Zone_BR08_Tradelane_02
[DynamicAsteroids]
asteroid = uranium_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[AsteroidBillboards]
count = 1000 ;500
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.500000
shape = uranium_tri
color_shift = 0.750000, 0.750000, 0.750000
ambient_intensity = 1
size = 80, 110
;[DynamicAsteroids]
;asteroid = dasteroid_uranium
;count = 10
;placement_radius = 300 ;125.000000
;placement_offset = 0 ;80.000000
;max_velocity = 10.000000
;max_angular_velocity = 3.000000
;color_shift = 1, 1, 1
;
[Band]
render_parts = 4
shape = asteroid_belt_04
height = 8000
offset_dist = 5000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
color_shift = 1.050000, 0.850000, 0.850000
ambient_intensity = 1.000000
vert_increase = 2
[FlExplorer]
template = solar\asteroids\br04_ld14_rock_asteroid_field.ini

@ -0,0 +1,96 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1700
tint_field = 160, 225, 200
;empty_cube_frequency = 0.600000
[properties]
flag = rock_objects
flag = Object_density_med
flag = danger_density_low
[Exclusion Zones]
exclusion = Zone_BR08_vignette_03_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = uranium_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[AsteroidBillboards]
count = 1000 ;500
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.500000
shape = uranium_tri
color_shift = 0.750000, 0.750000, 0.750000
ambient_intensity = 1
size = 80, 110
;[DynamicAsteroids]
;asteroid = dasteroid_uranium
;count = 10
;placement_radius = 300 ;125.000000
;placement_offset = 0 ;80.000000
;max_velocity = 10.000000
;max_angular_velocity = 3.000000
;color_shift = 1, 1, 1
;
[Band]
render_parts = 4
shape = asteroid_belt_04
height = 8000
offset_dist = 5000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
color_shift = 1.050000, 0.850000, 0.850000
ambient_intensity = 1.000000
vert_increase = 2
[FlExplorer]
template = solar\asteroids\br04_ld14_rock_asteroid_field.ini

@ -0,0 +1,116 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1550
diffuse_color = 220, 220, 180
ambient_color = 120, 120, 120
ambient_increase = 70, 40, 30
;empty_cube_frequency = 0.600000
[properties]
flag = rock_objects
flag = Object_density_med
[Exclusion Zones]
exclusion = Zone_BR10_vignette_01_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 4000
offset_dist = 2000
fade = 1.000000, 1.350000, 15, 17
texture_aspect = 1.000000
color_shift = 1.000000, 1.000000, 1.000000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;300
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.350000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 1.000000
size = 70, 100
;[DynamicAsteroids]
;asteroid = dasteroid_mineable_small1
;count = 9
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;
[FlExplorer]
template = solar\asteroids\br01_somerset_rock_asteroid_field.ini

@ -0,0 +1,87 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1650
tint_field = 255, 255, 255
;empty_cube_frequency = 0.600000
[properties]
flag = rock_objects
flag = Object_density_med
flag = DANGER_DENSITY_MED
[DynamicAsteroids]
asteroid = mineable2_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable2_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable2_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[Cube]
asteroid = mine_spike_mineable, -0.200000, -0.100000, -0.600000, 105, 160, 25, mine
asteroid = mine_spike_mineable, 0.500000, -0.200000, -0.600000, 75, 30, 70, mine
asteroid = mine_spike_mineable, -0.900000, 0.600000, -0.800000, 75, 30, 70, mine
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 3000
offset_dist = 2000
fade = 1.000000, 1.350000, 15, 17
texture_aspect = 1.000000
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;400
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.350000
shape = mine_rock_tri
color_shift = 0.700000, 0.700000, 0.700000
ambient_intensity = 1.000000
size = 60, 70
;[DynamicAsteroids]
;asteroid = dasteroid_gold
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_gold
asteroid_loot_commodity = commodity_gold
dynamic_loot_container = lootcrate_ast_loot_gold
dynamic_loot_commodity = commodity_gold
asteroid_loot_count = 1, 30
dynamic_loot_count = 1, 30 ;1, 1
asteroid_loot_difficulty = 9 ;40
dynamic_loot_difficulty = 9 ;2
[FlExplorer]
template = solar\asteroids\br05_molly_gold_field.ini

@ -0,0 +1,89 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1700
tint_field = 160, 225, 200
;empty_cube_frequency = 0.600000
[properties]
flag = rock_objects
flag = Object_density_med
flag = danger_density_low
[DynamicAsteroids]
asteroid = uranium_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = uranium_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[AsteroidBillboards]
count = 1000 ;500
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.500000
shape = uranium_tri
color_shift = 0.750000, 0.750000, 0.750000
ambient_intensity = 1
size = 80, 110
;[DynamicAsteroids]
;asteroid = dasteroid_uranium
;count = 10
;placement_radius = 300 ;125.000000
;placement_offset = 0 ;80.000000
;max_velocity = 10.000000
;max_angular_velocity = 3.000000
;color_shift = 1, 1, 1
;
[Band]
render_parts = 4
shape = asteroid_belt_04
height = 8000
offset_dist = 5000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
color_shift = 1.050000, 0.850000, 0.850000
ambient_intensity = 1.000000
vert_increase = 2

@ -0,0 +1,93 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[Exclusion Zones]
exclusion = Zone_BSG03_vignette_01_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[DynamicAsteroids]
asteroid = rock_asteroid_x301
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_Groytoz
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_Groytoz
asteroid_loot_count = 0, 0
dynamic_loot_count = 60, 80
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 2

@ -0,0 +1,62 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1800
diffuse_color = 150, 200, 255
ambient_color = 30, 30, 30
ambient_increase = 0, 50, 80
;empty_cube_frequency = 0.700000
[properties]
flag = rock_objects
flag = Object_density_low
[Exclusion Zones]
exclusion = Zone_BW11_vignette_01_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = rock_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 6
shape = asteroid_belt_dust
height = 3000
offset_dist = 1000
fade = 1.000000, 1.350000, 15, 17
texture_aspect = 1.000000
color_shift = 1.000000, 1.000000, 1.000000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;600
start_dist = 2500 ;800
fade_dist_percent = 0.5 ;0.200000
shape = roid_rock_tri
color_shift = 0.500000, 0.800000, 1
ambient_intensity = 2
size = 10, 40
;[DynamicAsteroids]
;asteroid = dasteroid_rock_small1
;count = 10
;placement_radius = 300 ;250.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 0.500000, 0.500000, 0.500000
;
[FlExplorer]
template = solar\asteroids\bw06_nemuro_dust_field.ini

@ -0,0 +1,49 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
tint_field = 15, 15, 15
max_alpha = 1.000000
[properties]
flag = badland_danger_objects
flag = danger_density_low
[DynamicAsteroids]
asteroid = badlands_large1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_medium2
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_small1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_Titan
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_Titan
asteroid_loot_count = 0, 0
dynamic_loot_count = 25, 50
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,74 @@
[TexturePanels]
file = solar\asteroids\ice_shapes.ini
[Field]
cube_size = 1000 ;500
fill_dist = 5000 ;2400
diffuse_color = 170, 220, 255
ambient_color = 60, 70, 100
ambient_increase = 70, 120, 160
;empty_cube_frequency = 0.700000
[properties]
flag = ice_objects
flag = Object_density_low
[DynamicAsteroids]
asteroid = ice_block_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_block_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = ice_block_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[AsteroidBillboards]
count = 1000 ;200
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.350000
shape = asteroid_ice_block
color_shift = 1.000000, 1.000000, 1.000000
ambient_intensity = 1.000000
size = 20, 70
;[DynamicAsteroids]
;asteroid = dasteroid_ice_crystal_small1
;count = 10
;placement_radius = 300 ;200.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_water
asteroid_loot_commodity = commodity_water
dynamic_loot_container = lootcrate_ast_loot_water
dynamic_loot_commodity = commodity_water
asteroid_loot_count = 1, 30
dynamic_loot_count = 1, 30 ;1, 1
asteroid_loot_difficulty = 9 ;30
dynamic_loot_difficulty = 9 ;5
[FlExplorer]
template = solar\asteroids\ew01_torres_ice_crystal_field.ini

@ -0,0 +1,107 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1200
diffuse_color = 170, 220, 255
ambient_color = 60, 60, 60
ambient_increase = 0, 0, 0
;empty_cube_frequency = 0.500000
[properties]
flag = rock_objects
flag = Object_density_med
[Exclusion Zones]
exclusion = Zone_BW12_vignette_01_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = mineable1_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = mineable1_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_mineable_small1
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 10.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
zone = zone_ew01_img_mining_area
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_niobium
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_niobium
asteroid_loot_count = 1, 30
dynamic_loot_count = 1, 30 ;1, 1
asteroid_loot_difficulty = 9 ;20
dynamic_loot_difficulty = 9 ;2
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_niobium
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_niobium
asteroid_loot_count = 1, 30
dynamic_loot_count = 1, 30 ;1, 1
asteroid_loot_difficulty = 9 ;70
dynamic_loot_difficulty = 9 ;1
[FlExplorer]
template = solar\asteroids\ew01_malvinas_mineable_asteroids.ini

@ -0,0 +1,93 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 255, 255, 255
ambient_color = 30, 30, 30
ambient_increase = 0, 0, 0
;empty_cube_frequency = 0.400000
[properties]
flag = rock_objects
flag = Object_density_med
[Exclusion Zones]
exclusion = Zone_BW13_vignette_02_exclusion
exclude_dynamic_asteroids = 1
[DynamicAsteroids]
asteroid = nonmineable_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid60
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid90
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = nonmineable_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[AsteroidBillboards]
count = 1000 ;400
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.350000
shape = mine_rock_tri
color_shift = 0.700000, 0.700000, 0.700000
ambient_intensity = 1.000000
size = 60, 120
;[DynamicAsteroids]
;asteroid = dasteroid_rock_small1
;count = 10
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;

@ -0,0 +1,91 @@
[TexturePanels]
file = solar\asteroids\debris_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1600
diffuse_color = 100, 100, 80
ambient_color = 255, 255, 255
ambient_increase = 20, 20, 30
;empty_cube_frequency = 0.600000
[properties]
flag = Debris_objects
flag = Object_density_low
[DynamicAsteroids]
asteroid = debris_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_med2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 10
shape = debris_belt_04
height = 6000
offset_dist = 2500
fade = 1.100000, 1.450000, 10, 11
texture_aspect = 1.000000
color_shift = 0.900000, 0.900000, 0.900000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;150
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.300000
shape = debris_tri
color_shift = 1, 1, 1
ambient_intensity = 1.000000
size = 50, 130
;[DynamicAsteroids]
;asteroid = dasteroid_debris_small1
;count = 5
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 8.000000
;max_angular_velocity = 2.000000
;color_shift = 1, 1, 1
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 1, 30
dynamic_loot_count = 1, 30 ;1, 1
asteroid_loot_difficulty = 9 ;50
dynamic_loot_difficulty = 9 ;3

@ -0,0 +1,47 @@
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 255, 255, 255
ambient_increase = 0, 0, 0
[properties]
flag = debris_objects
flag = Object_density_med
[DynamicAsteroids]
asteroid = debris_small1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = debris_small2
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_metal
asteroid_loot_commodity = commodity_scrap_metal
dynamic_loot_container = lootcrate_ast_loot_metal
dynamic_loot_commodity = commodity_scrap_metal
asteroid_loot_count = 1, 30
dynamic_loot_count = 25, 50
asteroid_loot_difficulty = 9
dynamic_loot_difficulty = 9

@ -0,0 +1,112 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000 ;400
fill_dist = 5000 ;1550
diffuse_color = 220, 220, 180
ambient_color = 120, 120, 120
ambient_increase = 70, 40, 30
;empty_cube_frequency = 0.600000
[properties]
flag = rock_objects
flag = Object_density_med
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid30
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
;[Cube]
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 4000
offset_dist = 2000
fade = 1.000000, 1.350000, 15, 17
texture_aspect = 1.000000
color_shift = 1.000000, 1.000000, 1.000000
ambient_intensity = 1.000000
vert_increase = 2
[AsteroidBillboards]
count = 1000 ;300
start_dist = 2500 ;1000
fade_dist_percent = 0.5 ;0.350000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 1.000000
size = 70, 100
;[DynamicAsteroids]
;asteroid = dasteroid_mineable_small1
;count = 9
;placement_radius = 300 ;150.000000
;placement_offset = 0 ;90.000000
;max_velocity = 15.000000
;max_angular_velocity = 3.000000
;color_shift = 1.000000, 1.000000, 1.000000
;
[FlExplorer]
template = solar\asteroids\br01_somerset_rock_asteroid_field.ini

@ -0,0 +1,49 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
tint_field = 15, 15, 15
max_alpha = 1.000000
[properties]
flag = badland_danger_objects
flag = danger_density_low
[DynamicAsteroids]
asteroid = badlands_large1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_medium2
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_small1
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_GoldOre
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_GoldOre
asteroid_loot_count = 0, 0
dynamic_loot_count = 25, 50
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,73 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = badland_danger_objects
flag = danger_density_low
[DynamicAsteroids]
asteroid = badlands_large1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_medium2
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = badlands_small1
count = 100 ;LAst
placement_radius = 1500.000000 ;LAst
placement_offset = 0.000000 ;LAst
max_velocity = 0.600000 ;LAst
max_angular_velocity = 0.300000 ;LAst
color_shift = 1.000000, 1.000000, 1.000000
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 0.000000, 0.700000, 1.000000
;[Cube]
;[DynamicAsteroids]
;asteroid = dasteroid_badlands_small1
;count = 10
;placement_radius = 300 ;200.000000
;placement_offset = 0 ;150.000000
;max_velocity = 50.000000
;max_angular_velocity = 3.000000
;color_shift = 0.000000, 0.700000, 1.000000
;
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_tanzanite
asteroid_loot_commodity = commodity_tanzanite
dynamic_loot_container = lootcrate_ast_loot_tanzanite
dynamic_loot_commodity = commodity_tanzanite
asteroid_loot_count = 0, 0
dynamic_loot_count = 25, 50
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 0

@ -0,0 +1,83 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[Exclusion Zones]
exclusion = Zone_CN01_asteroids_01_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[DynamicAsteroids]
asteroid = minedout_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid10
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid90
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = minedout_asteroid60
count = 100
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000

@ -0,0 +1,93 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[Exclusion Zones]
exclusion = Zone_CN02_pop_ambient_02
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[DynamicAsteroids]
asteroid = rock_asteroid_x301
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x302
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x303
count = 5
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_Groytoz
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_Groytoz
asteroid_loot_count = 0, 0
dynamic_loot_count = 60, 80
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 2

@ -0,0 +1,93 @@
[TexturePanels]
file = solar\asteroids\rock_shapes.ini
[Field]
cube_size = 1000
fill_dist = 5000
diffuse_color = 255, 255, 255
ambient_color = 40, 40, 40
ambient_increase = 90, 90, 90
[properties]
flag = rock_objects
flag = object_density_low
[Exclusion Zones]
exclusion = Zone_CN02_vignette_02_exclusion
exclude_dynamic_asteroids = 1
exclude_billboards = 1
[DynamicAsteroids]
asteroid = rock_asteroid_x304
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x305
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x306
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x307
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[DynamicAsteroids]
asteroid = rock_asteroid_x304
count = 10
placement_radius = 1500.000000
placement_offset = 0.000000
max_velocity = 0.600000
max_angular_velocity = 0.300000
color_shift = 1.000000, 1.000000, 1.000000
[AsteroidBillboards]
count = 1000
start_dist = 2500
fade_dist_percent = 0.500000
shape = mine_rock_tri
color_shift = 0.800000, 0.800000, 0.800000
ambient_intensity = 0.800000
size = 60, 120
[Band]
render_parts = 6
shape = asteroid_belt_04
height = 6000
offset_dist = 3000
fade = 0.800000, 1.250000, 15, 17
texture_aspect = 1.000000
ambient_intensity = 2
vert_increase = 2
color_shift = 1.000000, 1.000000, 1.000000
[LootableZone]
asteroid_loot_container = lootcrate_ast_loot_niobium
asteroid_loot_commodity = commodity_Balagar
dynamic_loot_container = lootcrate_ast_loot_niobium
dynamic_loot_commodity = commodity_Balagar
asteroid_loot_count = 0, 0
dynamic_loot_count = 45, 65
asteroid_loot_difficulty = 30
dynamic_loot_difficulty = 2

Some files were not shown because too many files have changed in this diff Show More