112 lines
4.1 KiB
C#
112 lines
4.1 KiB
C#
namespace Eco.Mods.TechTree
|
|
{
|
|
using System;
|
|
using System.ComponentModel;
|
|
using Eco.Gameplay.Items;
|
|
using Eco.Shared.Math;
|
|
using Eco.World.Blocks;
|
|
using Eco.Shared.Serialization;
|
|
using Eco.Simulation.WorldLayers;
|
|
using Eco.Gameplay.Pipes;
|
|
using Eco.Gameplay.Items.SearchAndSelect;
|
|
using World = World.World;
|
|
|
|
// To be honest, most of these should probably be removed from Tailing.cs, but they're here for now.
|
|
[Serialized]
|
|
[Weight(30000)]
|
|
[MaxStackSize(20)]
|
|
[RequiresTool(typeof(ShovelItem))]
|
|
[MakesRoads]
|
|
public class DirtItem : BlockItem<DirtBlock>, ICanExitFromPipe
|
|
{
|
|
public override string FriendlyName { get { return "Dirt"; } }
|
|
public override string FriendlyNamePlural { get { return "Dirt"; } }
|
|
public override bool CanStickToWalls { get { return false; } }
|
|
|
|
public string FlowTooltip(float flowrate) { return null; }
|
|
|
|
public int OnPipeExit(Ray posDir, int amount)
|
|
{
|
|
// need a pyramid check, but for now just do down
|
|
var existingBlock = World.GetBlock(posDir.FirstPos) as EmptyBlock;
|
|
if (existingBlock != null)
|
|
{
|
|
var target = World.FindPyramidPos(posDir.FirstPos);
|
|
World.SetBlock(this.OriginType, target);
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
[Serialized]
|
|
[Weight(30000)]
|
|
[MaxStackSize(20)]
|
|
[RequiresTool(typeof(ShovelItem))]
|
|
public class SandItem : BlockItem<SandBlock>
|
|
{
|
|
public override string FriendlyName { get { return "Sand"; } }
|
|
public override string FriendlyNamePlural { get { return "Sand"; } }
|
|
public override bool CanStickToWalls { get { return false; } }
|
|
}
|
|
|
|
[Serialized, Liquid]
|
|
[Category("Hidden")]
|
|
[MaxStackSize(10)]
|
|
public class WaterItem : BlockItem<WaterBlock>, ICanExitFromPipe
|
|
{
|
|
public override bool CanStickToWalls { get { return false; } }
|
|
public string FlowTooltip(float flowrate) { return null; }
|
|
|
|
public int OnPipeExit(Ray posDir, int amount)
|
|
{
|
|
var pos = posDir.FirstPos;
|
|
var toSet = Math.Min(amount, 1000);
|
|
var existingBlock = World.GetBlock(pos);
|
|
if (!(existingBlock is EmptyBlock) && !(existingBlock is WaterBlock))
|
|
return 0;
|
|
|
|
// Set the existing block if it's there, or add a new block.
|
|
if (existingBlock is EmptyBlock)
|
|
existingBlock = World.SetBlock(typeof(WaterBlock), pos, toSet * 0.001f) as WaterBlock;
|
|
|
|
var waterBlock = existingBlock as WaterBlock;
|
|
if (waterBlock.Water < toSet)
|
|
{
|
|
waterBlock.Water = toSet;
|
|
World.WakeUp(pos);
|
|
}
|
|
waterBlock.PipeSupplied = true;
|
|
return toSet;
|
|
}
|
|
}
|
|
|
|
|
|
[Serialized, Liquid]
|
|
[Category("Hidden")]
|
|
public class SewageItem : BlockItem<SewageBlock>, ICanExitFromPipe
|
|
{
|
|
public override string FriendlyName { get { return "Sewage"; } }
|
|
public override string FriendlyNamePlural { get { return "Sewage"; } }
|
|
public override bool CanStickToWalls { get { return false; } }
|
|
public string FlowTooltip(float flowrate) { return null; }
|
|
|
|
|
|
public int OnPipeExit(Ray posDir, int amount)
|
|
{
|
|
WorldLayerManager.ClimateSim.AddGroundPollution(posDir.FirstPos.XZ, amount);
|
|
return amount;
|
|
}
|
|
}
|
|
|
|
[Serialized, Weight(30000), StartsDiscovered]
|
|
[MaxStackSize(20)]
|
|
[RequiresTool(typeof(ShovelItem))]
|
|
public class TailingsItem : BlockItem<TailingsBlock>
|
|
{
|
|
public override string FriendlyName { get { return "Tailings"; } }
|
|
public override string FriendlyNamePlural { get { return "Tailings"; } }
|
|
public override string Description { get { return "Waste product from smelting. When left on soil the run-off will create pollution; killing nearby plants and seeping into the water supply. Contain in buildings or bury in rock to neutralize."; } }
|
|
public override bool CanStickToWalls { get { return false; } }
|
|
}
|
|
} |