Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const double WORLD_REFINE_BONUS = 5;
- class ore
- {
- public string oreName;
- public int count;
- public double speed;
- public ore(string name,double s)
- {
- this.oreName = name;
- this.speed = s;
- this.count = 0;
- }
- }
- class oreList
- {
- public List<ore> myOres;
- public oreList() {
- myOres = new List<ore>();
- myOres.Add(new ore("Stone",0.1));
- myOres.Add(new ore("Iron",0.05));
- myOres.Add(new ore("Silicon",0.6));
- myOres.Add(new ore("Nickel",2.0));
- myOres.Add(new ore("Cobalt",4.0));
- myOres.Add(new ore("Silver",1.0));
- myOres.Add(new ore("Gold",0.4));
- myOres.Add(new ore("Magnesium",1.0));
- myOres.Add(new ore("Uranium",4));
- myOres.Add(new ore("Platinum",4));
- }
- public int getTotalTime(double speedMulti=1.3) {
- int totalTime = 0;
- for ( int i = 0; i < myOres.Count; i++ ) {
- //totalTime += (int)( myOres[i].count * myOres[i].speed / speedMulti );
- totalTime += getOreTime(myOres[i],speedMulti);
- }
- //return (int) (totalTime / WORLD_REFINE_BONUS);
- return totalTime;
- }
- public int getOreTime(ore myOre, double speedMulti=1.3) {
- return (int) (( myOre.count * myOre.speed / speedMulti ) / WORLD_REFINE_BONUS );
- }
- public ore getOre(string name) {
- for ( int i = 0; i < myOres.Count ; i++ ) {
- ore myOre = myOres[i];
- if ( myOre.oreName == name ) { return myOre; }
- }
- return null;
- }
- public void addCount(string name,int count) {
- ore myOre = getOre(name);
- if ( myOre != null ) { addCount(myOre,count); }
- }
- public void addCount(ore p,int count) {
- p.count += count;
- }
- public void addRefinery(IMyTerminalBlock refinery) {
- VRage.Game.ModAPI.Ingame.IMyInventory inventory;
- inventory = refinery.GetInventory(0);
- List<VRage.Game.ModAPI.Ingame.IMyInventoryItem> items = new List<VRage.Game.ModAPI.Ingame.IMyInventoryItem>();
- items = inventory.GetItems();
- for ( int i = 0; i < items.Count; i++ ) {
- VRage.Game.ModAPI.Ingame.IMyInventoryItem item = items[i];
- addCount(item.Content.SubtypeName, (int)item.Amount);
- //total += (double)item.Amount;
- }
- }
- }
- string timeString(int secs) {
- TimeSpan t = TimeSpan.FromSeconds( secs );
- string time = string.Format("{0:D2}h:{1:D2}m:{2:D2}s",
- t.Hours,
- t.Minutes,
- t.Seconds);
- return time;
- }
- double GetAverageRefinerySpeed(List<IMyTerminalBlock> refineries) {
- if ( refineries == null || refineries.Count == 0 )
- return 1.3;
- double totalRefineSpeed = 0.0;
- System.Text.RegularExpressions.Regex speedRegex = new System.Text.RegularExpressions.Regex( "Productivity: (\\d+\\.?\\d*)%" , System.Text.RegularExpressions.RegexOptions.Singleline);
- for ( int i = 0; i < refineries.Count; i++ )
- {
- double speed = 100.0;
- System.Text.RegularExpressions.Match match = speedRegex.Match( refineries[i].DetailedInfo);
- if (match.Success)
- double.TryParse(match.Groups[1].Value, out speed);
- totalRefineSpeed += speed;
- }
- double aveSpeed = ( totalRefineSpeed / refineries.Count ) / 100.0;
- aveSpeed += 0.3; //Refinery base speed
- return aveSpeed;
- }
- void Main(string argument)
- {
- IMyTextPanel tPanel = GridTerminalSystem.GetBlockWithName("Refine-Panel") as IMyTextPanel;
- if ( tPanel == null )
- {
- Echo("No Text Panel found.");
- return;
- }
- List<IMyTerminalBlock> refineries = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMyRefinery>(refineries);
- if ( refineries == null || refineries.Count < 1 )
- {
- Echo("No refineries found.");
- return;
- }
- oreList ores = new oreList();
- double aveRefineSpeed = GetAverageRefinerySpeed(refineries);
- for ( int i = 0; i < refineries.Count; i++ )
- {
- ores.addRefinery(refineries[i]);
- }
- Echo("Added " + refineries.Count + " refineries\n");
- //ore ironOre = ores.getOre("Iron");
- int totalSeconds = ores.getTotalTime(aveRefineSpeed);
- Echo("Total refinery time = " + totalSeconds + "\n");
- totalSeconds /= refineries.Count;
- string time = timeString(totalSeconds);
- tPanel.WritePublicText("Refinery Completion Countdown\n");
- tPanel.WritePublicText("Total Time Left: " + time,true);
- tPanel.WritePublicText("\n\n",true);
- for ( int i = 0; i < ores.myOres.Count; i++ )
- {
- ore myOre = ores.myOres[i];
- if ( myOre.count > 0 ) {
- int oTime = ores.getOreTime(myOre,aveRefineSpeed);
- oTime /= refineries.Count;
- string timeS = timeString(oTime);
- tPanel.WritePublicText(String.Format("{0,-15} {1,15}\n",myOre.oreName,timeS),true);
- }
- }
- tPanel.GetActionWithName("IncreaseFontSize").Apply(tPanel);
- tPanel.GetActionWithName("DecreaseFontSize").Apply(tPanel);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement