Ejemplo n.º 1
0
        private static void ProcessSystemConstructionModules(SolarSystem system)
        {
            bool SendUpdate = GalaxyServer.Millis - system.LastStateUpdate >= SolarSystem.UPDATE_RATE;

            for (int i = system.ConstructionModules.Count - 1; i >= 0; i--)
            {
                ConstructionModule c = system.ConstructionModules[i];
                if (c.UpdateStateAndCheckIfDone(GalaxyServer.Millis))
                {
                    //If we are done, remove it and replace with a station module
                    system.ConstructionModules.RemoveAt(i);
                    system.StationModules.Add(c.ResultingStationModule);

                    ConstructionMessage cm = new ConstructionMessage();
                    cm.TimeRemaining = 0;
                    cm.Guid          = c.Guid;
                    cm.Start         = false;
                    foreach (Client client in system.Clients)
                    {
                        GalaxyServer.AddToSendQueue(client, cm);
                    }
                }
                else if (SendUpdate)
                {
                    ConstructionMessage cm = new ConstructionMessage();
                    cm.TimeRemaining = c.BuildTimeRemaining;
                    cm.Guid          = c.Guid;
                    cm.Start         = false;
                    foreach (Client client in system.Clients)
                    {
                    }
                }
            }
        }
Ejemplo n.º 2
0
    /**
     * load module prefabs
     */
    void LoadModules()
    {
        combatModulePrefabs       = new Dictionary <ModuleType, CombatModule>();
        constructionModulePrefabs = new Dictionary <ModuleType, ConstructionModule>();
        var mods = Resources.LoadAll("Modules", typeof(GameObject));

        foreach (GameObject obj in mods)
        {
            CombatModule mod = obj.GetComponent <CombatModule>();
            if (mod != null)
            {
                ModuleType type = (ModuleType)mod.GetType().GetField("type").GetRawConstantValue();
                combatModulePrefabs.Add(type, mod);
                continue;
            }

            ConstructionModule constructionMod = obj.GetComponent <ConstructionModule>();
            if (constructionMod != null)
            {
                ModuleType type = (ModuleType)constructionMod.GetType().GetField("type").GetRawConstantValue();
                constructionModulePrefabs.Add(type, constructionMod);
                continue;
            }
        }
    }
Ejemplo n.º 3
0
    public void RemoveModule(ConstructionModule module)
    {
        if (module.inventorySlot == null)
        {
            return;
        }
        InventorySlot slot = module.inventorySlot;

        if (slot.number > 1)
        {
            var prefab            = game.GetConstructionModulePrefab(module.GetModuleType());
            var newModuleInstance = Instantiate(prefab) as ConstructionModule;

            newModuleInstance.transform.parent        = slot.transform;
            newModuleInstance.transform.localPosition = Vector2.zero;
            newModuleInstance.inventorySlot           = slot;
            newModuleInstance.manifest      = new ModuleManifest(module);
            newModuleInstance.manifest.name = module.manifest.name;
            slot.module          = newModuleInstance;
            module.inventorySlot = null;
        }
        else
        {
            slot.module          = null;
            module.inventorySlot = null;
            modules.Remove(module);
            slot.Activate();
        }
        if (slot.number > 0)
        {
            slot.number--;
        }
    }
Ejemplo n.º 4
0
 public void RemoveModule(ConstructionModule module, InventorySlot slot)
 {
     if (module.inventorySlot != slot)
     {
         return;
     }
     RemoveModule(module);
 }
Ejemplo n.º 5
0
 public void Unequip(ConstructionModule module)
 {
     if (module is InternalConstructionModule)
     {
         Unequip((InternalConstructionModule)module);
     }
     else if (module is ExternalConstructionModule)
     {
         Unequip((ExternalConstructionModule)module);
     }
 }
Ejemplo n.º 6
0
 public void AddModules(ConstructionModule module, int num)
 {
     foreach (InventorySlot slot in slots)
     {
         if (slot.available || (module.manifest.name == slot.module.manifest.name))
         {
             AddModule(module, slot);
             slot.number += num - 1;
             return;
         }
     }
 }
        private void CreateWorldEvents(BaseWorld world, Player player, TestUnitFactory unitFactory)
        {
            var socialUpdatePeriod = 4;
            var hireCitizen        = new HireCitizenEvent(world, _worldData, player, unitFactory, socialUpdatePeriod);
            var foodEvent          = new CityFoodConsumptionEvent(world, _worldData, socialUpdatePeriod);
            var constructionModule = new ConstructionModule(world, unitFactory);
            var constructionOnGui  = new ConstructionOnGui(unitFactory, constructionModule);

            _onGui.Add(constructionOnGui);

            world.Events.Add(constructionModule);
            world.Events.Add(foodEvent);
            world.Events.Add(hireCitizen);
        }
Ejemplo n.º 8
0
        public void HandleMessage(ConstructionMessage msg, object extra = null)
        {
            Client        client = (Client)extra;
            Player        player = client.Player;
            Assembly      a      = typeof(StationModule).Assembly;
            StationModule sm     = (StationModule)Activator.CreateInstance(a.GetType("GalaxyShared." + msg.ClassName));

            sm.SetDataFromJSON();
            if (sm.CanBuild(player))
            {
                Vector3            pos = player.Pos + Vector3.Transform(Vector3.Forward * 3, player.Rotation);
                ConstructionModule cm  = new ConstructionModule(GalaxyServer.Millis, pos, player.Rotation, new Dock());
                player.SolarSystem.ConstructionModules.Add(cm);
                msg.TimeRemaining   = cm.BuildTimeRemaining;
                msg.Guid            = cm.Guid;
                msg.ResourcesNeeded = sm.BuildRequirements;
                GalaxyServer.AddToSendQueue(client, msg);
            }
        }
Ejemplo n.º 9
0
 public void AddModule(ConstructionModule module)
 {
     foreach (InventorySlot slot in slots)
     {
         Debug.Log(module.manifest.name);
         if (slot.available || (module.manifest.name == slot.module.manifest.name))
         {
             if (slot.module != null)
             {
                 Debug.Log("inside slot: " + slot.module.manifest.name);
             }
             else
             {
                 Debug.Log(slot.available);
             }
             AddModule(module, slot);
             return;
         }
     }
 }
Ejemplo n.º 10
0
    /**
     * construct invetory based on manifest
     */
    public void Construct(InventoryManifest manifest)
    {
        modules = new List <ConstructionModule>();
        foreach (var slotManifest in manifest.slots)
        {
            var moduleManifest        = slotManifest.module;
            ConstructionModule module = Instantiate(
                game.GetConstructionModulePrefab(moduleManifest.type),
                moduleManifest.position,
                moduleManifest.rotation
                ) as ConstructionModule;
            module.manifest = moduleManifest;

            var slot = slots[moduleManifest.inventorySlotIndex];

            slot.number += slotManifest.count - 1;
            AddModule(module, slot);

            Debug.Log("Created " + slotManifest.count + " " + module.GetModuleType() + " modules with name: " + moduleManifest.name);
        }
    }
Ejemplo n.º 11
0
    public void AddModule(ConstructionModule module, InventorySlot slot)
    {
        if (!slot.available && module.manifest.name != slot.module.manifest.name)
        {
            Debug.Log("Addmodule shouldn't happen");
            return;
        }

        if (module.inventorySlot == slot)
        {
            module.transform.localPosition = Vector2.zero;
            return;
        }
        if (!slot.available)
        {
            if (module.manifest.name == slot.module.manifest.name)
            {
                Destroy(module.gameObject);
                slot.number++;
            }
            return;
        }
        if (module.inventorySlot != null)
        {
            if (module.inventorySlot == slot)
            {
                return;
            }
            RemoveModule(module);
        }
        module.transform.parent        = slot.transform;
        module.transform.localPosition = Vector2.zero;
        module.inventorySlot           = slot;
        slot.module = module;
        modules.Add(module);
        slot.Deactivate();
        slot.number++;
    }
Ejemplo n.º 12
0
 public ConstructionOnGui(TestUnitFactory unitFactory, ConstructionModule constructionModule)
 {
     _unitFactory        = unitFactory;
     _constructionModule = constructionModule;
 }