예제 #1
0
파일: Ship.cs 프로젝트: andy-uq/Echo
        public Ship(Corporation owner)
            : this()
        {
            if (owner == null)
                throw new ArgumentNullException("owner");

            Owner = owner;
        }
예제 #2
0
파일: Structure.cs 프로젝트: andy-uq/Echo
        protected Structure(ILocation orbiting, Corporation owner)
            : base(orbiting)
        {
            Owner = owner;

            this.ships = new ObjectCollection<Ship>(this);
            this.personnel = new ObjectCollection<Agent>(this);
            this.stores = new ItemCollection<IItem>();
        }
예제 #3
0
파일: Manufacture.cs 프로젝트: andy-uq/Echo
            public MockShipYard(ILocation orbiting, Corporation owner)
                : base(orbiting, owner)
            {
                var refinedOre = new RefinedOre();
                refinedOre.Quantity = 1000;
                refinedOre.Owner = owner;

                AddItem(refinedOre);
            }
예제 #4
0
파일: Manufacture.cs 프로젝트: andy-uq/Echo
        public void BuildShip()
        {
            var universe = new Universe();
            var corp = new Corporation { Location = universe };
            var shipYard = new MockShipYard(universe, corp);

            var shipBlueprint = new ShipBlueprint {HardPoints = new[] {HardPoint.FactoryHardPoint(HardPointPosition.Front),}, BuildCost = 10, Speed = 20d, Location = shipYard, Owner = corp };
            shipBlueprint.Materials = new List<Material> {new Material(RefinedOre.RefinedOreID, "Refined Ore", 500)};
            shipBlueprint.Stats[ShipStatistic.HullIntegrity].SetValue(1000);
            shipBlueprint.Stats[ShipStatistic.Speed].SetValue(20);

            shipYard.Build(shipBlueprint);

            ulong tick = 0L;
            while ( shipYard.Ships.Count == 0 )
            {
                shipYard.Tick(tick);
                tick++;
            }
        }
예제 #5
0
        public void Agent()
        {
            var templateXml = @"<universe nextTemplateID=""0"">
              <playercorporation templateID=""0"" startupEmployeeCount=""5"" startupCapital=""10000"" />
              <corporation templateID=""1"" startupEmployeeCount=""5"" startupCapital=""10000"" />
              <agent templateID=""2"">
            <stats variation=""0.5000"">
              <stat type=""Charisma"" value=""10"" current=""0"" />
              <stat type=""Intelligence"" value=""10"" current=""0"" />
              <stat type=""Perception"" value=""10"" current=""0"" />
              <stat type=""Memory"" value=""10"" current=""0"" />
              <stat type=""Willpower"" value=""10"" current=""0"" />
            </stats>
              </agent>
            </universe>";

            var universe = new Universe();

            var xdoc = new XmlDocument();
            xdoc.LoadXml(templateXml);

            var factory = universe.ObjectFactory;

            factory.Load(xdoc.SelectRootElement());
            foreach (AgentStatistic agentStat in Enum.GetValues(typeof(AgentStatistic)))
            {
                Assert.AreEqual(10, factory.Agent.DefaultAgentStats[agentStat].Value);
            }

            var corporation = new Corporation {Location = universe};

            var agent = factory.Agent.Create(corporation);
            foreach ( AgentStatistic agentStat in Enum.GetValues(typeof(AgentStatistic)) )
            {
                Assert.GreaterOrEqual(agent.Stats[agentStat].Value, 5);
                Assert.LessOrEqual(agent.Stats[agentStat].Value, 15);
            }
        }
예제 #6
0
파일: Structure.cs 프로젝트: andy-uq/Echo
        public void TakeOwnership(Corporation newOwner)
        {
            if (newOwner == null)
                throw new ArgumentNullException("newOwner");

            var oldOwner = Owner;
            if (oldOwner != null)
                oldOwner.LoseStructure(this, newOwner);

            Owner = newOwner;

            this.personnel.RemoveAll(a => a.Employer == oldOwner);

            CorporationItems(oldOwner).ForEach(i => i.Owner = newOwner);
            CorporationShips(oldOwner).ForEach(s => s.Owner = newOwner);

            Owner.TakeStructure(this, oldOwner);
        }
예제 #7
0
파일: Structure.cs 프로젝트: andy-uq/Echo
 public List<Ship> CorporationShips(Corporation corporation)
 {
     return this.ships.FindAll(s => s.Owner == corporation);
 }
예제 #8
0
파일: Structure.cs 프로젝트: andy-uq/Echo
 public List<Agent> CorporationPersonnel(Corporation corporation)
 {
     return this.personnel.FindAll(a => a.Employer == corporation);
 }
예제 #9
0
파일: Structure.cs 프로젝트: andy-uq/Echo
 public List<IItem> CorporationItems(Corporation corporation)
 {
     return this.stores.FindAll(i => i.Owner == corporation);
 }
예제 #10
0
파일: Item.cs 프로젝트: andy-uq/Echo
 /// <summary>Destroys the item</summary>
 public void Destroy()
 {
     Owner.RemoveAsset(this);
     owner = null;
 }
예제 #11
0
파일: Corporation.cs 프로젝트: andy-uq/Echo
        public void TakeStructure(Structure structure, Corporation oldOwner)
        {
            structure.CorporationShips(this).ForEach(s => this.ships.Add(s));
            structure.Stores.ForEach(AddAsset);

            this.structures.Add(structure);

            Universe.EventPump.RaiseEvent(this, EventType.StructureLost, "Took {0} (a {1}) from {2}", Name, structure.StructureType, oldOwner);
        }
예제 #12
0
파일: Corporation.cs 프로젝트: andy-uq/Echo
        public void LoseStructure(Structure structure, Corporation newOwner)
        {
            structure.Personnel.ForEach(p => this.employees.Remove(p));
            structure.Ships.ForEach(s => this.ships.Remove(s));
            structure.Stores.ForEach(RemoveAsset);

            this.structures.Remove(structure);

            Universe.EventPump.RaiseEvent(this, EventType.StructureLost, "Lost {0} (a {1}) to {2}", Name, structure.StructureType, newOwner);
        }
예제 #13
0
파일: ShipYard.cs 프로젝트: andy-uq/Echo
 public ShipYard(ILocation orbiting, Corporation owner)
     : base(orbiting, owner)
 {
 }
예제 #14
0
파일: Travel.cs 프로젝트: andy-uq/Echo
        public void RefineOre()
        {
            Rand.Initialise(0);

            var universe = new Universe();
            var sol = new SolarSystem { Location = universe };

            var corporation = new Corporation() { Location = universe };
            var mPilot = corporation.Recruit();
            var tPilot = corporation.Recruit();

            var asteroidBelt = new AsteroidBelt(sol) {Richness = 100};
            sol.OrbitSun(asteroidBelt, 100d);

            var refinery = new Refinery(sol, corporation) {OreProcessedPerTick = 5, Efficiency = 2.5d };
            sol.OrbitSun(refinery, 200d);

            var manufactory = new Manufactory(sol, corporation);
            sol.OrbitSun(manufactory, 400d);

            var m1 = new Ship(mPilot) { Speed = 5d, CargoHoldSize = 100d, Name = "M1", UniversalCoordinates = refinery.UniversalCoordinates };
            refinery.Dock(m1);

            var t1 = new Ship(tPilot) { Speed = 5d, CargoHoldSize = 10d, Name = "T1", UniversalCoordinates = refinery.UniversalCoordinates };
            refinery.Dock(t1);

            var start = new ShipTask(asteroidBelt, (ship, target) => asteroidBelt.Mine(ship));
            start = start.Join(refinery, (ship, target) => refinery.UnloadOre(ship)).Join(start);

            refinery.Undock(m1, mPilot);
            m1.SetTask(start);

            start = new ShipTask(refinery, (ship, target) => { refinery.LoadRefinedOre(ship); return ship.Cargo.Count > 0 && ship.Cargo[0].Quantity > 50; });
            start = start.Join(manufactory, (ship, target) => manufactory.UnloadRefinedOre(ship)).Join(start);

            refinery.Undock(t1, tPilot);
            t1.SetTask(start);

            CollectionAssert.Contains(sol.Objects, m1);
            CollectionAssert.Contains(sol.Objects, t1);

            ulong tick = 0L;
            while ( manufactory.OreRemaining < 100 )
            {
                Assert.Less(tick, 1000, "Ssytem took more than 1000 days to complete the task.  {0:n0} products manufactured", manufactory.ProductCount);

                sol.Tick(tick);
                tick++;
            }

            Console.WriteLine("System took {0} days to manufacture {1:n0} items", tick, manufactory.ProductCount);
            Console.WriteLine("The refinery had {0:n0} unprocessed ore", refinery.UnrefinedOre);
            Console.WriteLine("The manufactory has {0:n0} unprocessed ore for building", manufactory.OreRemaining);
        }
예제 #15
0
파일: Trade.cs 프로젝트: andy-uq/Echo
            public TestCase()
            {
                Universe = new Universe();

                Seller = new Corporation {Name = "Seller", Location = Universe };
                Buyer = new Corporation {Name = "Buyer", Location = Universe };

                var starCluster = new StarCluster();
                Universe.AddStarCluster(starCluster);

                var sol = new SolarSystem();
                starCluster.AddSolarSystem(sol);

                Refinery = new Refinery(sol, Seller);
                sol.OrbitSun(Refinery, 100d);

                var m1 = new Ship(Seller.Recruit()) {Name = "M1"};
                sol.EnterSystem(m1, Refinery.LocalCoordinates);
                Refinery.Dock(m1);

                var m2 = new Ship(Buyer.Recruit()) {Name = "M2"};
                sol.EnterSystem(m2, Refinery.LocalCoordinates);
                Refinery.Dock(m2);

                this.item = new Ore {Quantity = 1000, Location = Refinery, Owner = Seller};
            }
예제 #16
0
파일: Refinery.cs 프로젝트: andy-uq/Echo
 public Refinery(ILocation orbiting, Corporation owner)
     : base(orbiting, owner)
 {
     OreProcessedPerTick = 100;
     Efficiency = 0.1d;
 }
예제 #17
0
파일: Agent.cs 프로젝트: andy-uq/Echo
 public Agent(Corporation employer)
 {
     Employer = employer;
     Stats = new AgentStatistics();
 }