private void _chestOpen(ChestData data)
        {
            if (ChestDialog.Instance == null || data.X != ChestDialog.Instance.CurrentChestX ||
                data.Y != ChestDialog.Instance.CurrentChestY)
            {
                return;
            }

            ChestDialog.Instance.InitializeItems(data.Items);
        }
Ejemplo n.º 2
0
        public static void ReadChestData(ContentManager Content)
        {
            string[] filenames = Directory.GetFiles(@"Content\Game\Chests", "*.xnb");

            foreach (string name in filenames)
            {
                string    filename = @"Game\Chests\" + Path.GetFileNameWithoutExtension(name);
                ChestData data     = Content.Load <ChestData>(filename);
                ChestData.Add(data.Name, data);
            }
        }
        private void LoadWorld()
        {
            RpgLibrary.WorldClasses.LevelData levelData =
                Game.Content.Load <RpgLibrary.WorldClasses.LevelData>(@"Game\Levels\Starting Level");

            RpgLibrary.WorldClasses.MapData mapData =
                Game.Content.Load <RpgLibrary.WorldClasses.MapData>(@"Game\Levels\Maps\" + levelData.MapName);

            TileMap map = TileMap.FromMapData(mapData, Game.Content);

            Level level = new Level(map);

            ChestData chestData = Game.Content.Load <ChestData>(@"Game\Chests\Plain Chest");

            Chest chest = new Chest(chestData);

            BaseSprite chestSprite = new BaseSprite(
                containers,
                new Rectangle(0, 0, 32, 32),
                new Point(10, 10));

            ItemSprite itemSprite = new ItemSprite(
                chest,
                chestSprite);

            level.Chests.Add(itemSprite);

            World world = new World(GameRef, GameRef.ScreenRectangle);

            world.Levels.Add(level);
            world.CurrentLevel = 0;

            AnimatedSprite s = new AnimatedSprite(
                GameRef.Content.Load <Texture2D>(@"SpriteSheets\Eliza"),
                AnimationManager.Instance.Animations);

            s.Position = new Vector2(0 * Engine.TileWidth, 5 * Engine.TileHeight);

            EntityData ed = new EntityData("Eliza", 10, 10, 10, 10, 10, 10, "20|CON|12", "16|WIL|16",
                                           "0|0|0");

            Entity e = new Entity("Eliza", ed, EntityGender.Female, EntityType.NPC);

            NonPlayerCharacter npc = new NonPlayerCharacter(e, s);

            npc.SetConversation("eliza1");
            world.Levels[world.CurrentLevel].Characters.Add(npc);

            GamePlayScreen.World = world;

            CreateConversation();

            ((NonPlayerCharacter)world.Levels[world.CurrentLevel].Characters[0]).SetConversation("eliza1");
        }
Ejemplo n.º 4
0
    public static GameObject CreateObject(ChestData data)
    {
        GameObject go = GameObject.Instantiate <GameObject>(Resources.Load <GameObject>(data.name));

        go.transform.position = data.Position();
        Chest chest = go.GetComponent <Chest>();

        chest.data = data;

        return(go);
    }
Ejemplo n.º 5
0
    public static void SaveChestData(ChestInteract chest)
    {
        BinaryFormatter formatter = new BinaryFormatter();

        string     path   = Application.persistentDataPath + "/Chest.data";
        FileStream stream = new FileStream(path, FileMode.Create);

        ChestData data = new ChestData(chest);

        formatter.Serialize(stream, data);
        stream.Close();
    }
Ejemplo n.º 6
0
        public void CopyChestData(Chest source, Chest target)
        {
            IChestDataManager chestDataManager = ModEntry.CategorizeChests.ChestDataManager;
            ChestData         sourceData       = chestDataManager.GetChestData(source);
            ChestData         targetData       = chestDataManager.GetChestData(target);

            targetData.AcceptedItemKinds.Clear();
            foreach (var itemKey in sourceData.AcceptedItemKinds)
            {
                targetData.AddAccepted(itemKey);
            }
        }
Ejemplo n.º 7
0
        void btnEdit_Click(object sender, EventArgs e)
        {
            if (lbDetails.SelectedItem != null)
            {
                string   detail = lbDetails.SelectedItem.ToString();
                string[] parts  = detail.Split(',');
                string   entity = parts[0].Trim();

                ChestData data    = itemManager.ChestData[entity];
                ChestData newData = null;

                using (FormChestDetails frmChestData = new FormChestDetails())
                {
                    frmChestData.Chest = data;
                    frmChestData.ShowDialog();

                    if (frmChestData.Chest == null)
                    {
                        return;
                    }

                    if (frmChestData.Chest.Name == entity)
                    {
                        itemManager.ChestData[entity] = frmChestData.Chest;
                        FillListBox();

                        return;
                    }

                    newData = frmChestData.Chest;
                }

                DialogResult result = MessageBox.Show(
                    "Name has changed. Do you want to add a new entry?",
                    "New Entry",
                    MessageBoxButtons.YesNo);

                if (result == DialogResult.No)
                {
                    return;
                }

                if (itemManager.ChestData.ContainsKey(newData.Name))
                {
                    MessageBox.Show("Entry already exists. Use Edit to modify the entry.");
                    return;
                }

                lbDetails.Items.Add(newData);
                itemManager.ChestData.Add(newData.Name, newData);
            }
        }
Ejemplo n.º 8
0
        private void RecreateItemToggles()
        {
            ToggleBag.RemoveChildren();

            var itemKeys = ItemDataManager.Categories[ActiveCategory];

            foreach (var itemKey in itemKeys)
            {
                var item   = ItemDataManager.GetItem(itemKey);
                var toggle = ToggleBag.AddChild(new ItemToggle(TooltipManager, item, ChestData.Accepts(itemKey)));
                toggle.OnToggle += () => ToggleItem(itemKey);
            }
        }
Ejemplo n.º 9
0
        public CategoryMenu(ChestData chestData, IItemDataManager itemDataManager, ITooltipManager tooltipManager)
        {
            ItemDataManager = itemDataManager;
            TooltipManager  = tooltipManager;
            ChestData       = chestData;

            Categories = itemDataManager.Categories.Keys.ToList();
            Categories.Sort();

            BuildWidgets();

            SetCategory(Index);
        }
Ejemplo n.º 10
0
 void UpdateDataForSafeReplace(int tileID, bool isReplaced)
 {
     if (isReplaced == false)
     {
         return;
     }
     if (tileID == tileNum)
     {
         hasSafe = true;
         ChestData data = transform.GetChild(0).GetComponent <SafePrefabData>().chestData;
         // safeType = data.safeType;
         safeID = data.chestID;
     }
 }
Ejemplo n.º 11
0
        public CategoryMenu(ChestData chestData, IItemDataManager itemDataManager, ITooltipManager tooltipManager)
        {
            ItemDataManager = itemDataManager;
            TooltipManager  = tooltipManager;

            ChestData = chestData;

            AvailableCategories = ItemDataManager.Categories.Keys.ToList();
            AvailableCategories.Sort();

            BuildWidgets();

            SetCategory(AvailableCategories.First());
        }
    /// <summary>
    /// Se ejecuta cuando un personaje coge un cofre
    /// </summary>
    /// <param name="character">Character que ha cogido el cofre.</param>
    /// <param name="chestCol">Collider del cofre.</param>
    public override void PickedChest(Character character, Collider2D chestCol)
    {
        chestCol.enabled = false;
        var chestId = chestCol.GetComponent <SpawnedObject>().Id;

        iTween.ScaleTo(chestCol.gameObject, iTween.Hash("scale", Vector3.zero, "time", 1f));
        Chests.Remove(chestId);
        Destroy(chestCol.gameObject, 1f);
        var chestRequest = new ChestData {
            chestId  = chestId,
            playerId = _playerId
        };

        _client.Send(chestRequest.ToJson(), TAPNet.DATAGRAM_RELIABLE);
    }
        void btnOK_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(tbName.Text))
            {
                MessageBox.Show("You must enter a name for the chest.");
                return;
            }

            if (cbTrap.Checked && string.IsNullOrEmpty(tbTrap.Text))
            {
                MessageBox.Show("You must supply a name for the trap on the chest.");
                return;
            }

            if (nudMaxGold.Value < nudMinGold.Value)
            {
                MessageBox.Show("Maximum gold in chest must be greater or equal to minimum gold.");
                return;
            }

            ChestData data = new ChestData();

            data.Name     = tbName.Text;
            data.IsLocked = cbLock.Checked;

            if (cbLock.Checked)
            {
                data.DifficultyLevel = (DifficultyLevel)cboDifficulty.SelectedIndex;
                data.KeyName         = tbKeyName.Text;
                data.KeyType         = tbKeyType.Text;
                data.KeysRequired    = (int)nudKeys.Value;
            }

            data.IsTrapped = cbTrap.Checked;

            if (cbTrap.Checked)
            {
                data.TrapName = tbTrap.Text;
            }

            data.MinGold = (int)nudMinGold.Value;
            data.MaxGold = (int)nudMaxGold.Value;

            chest = data;

            this.FormClosing -= FormChestDetails_FormClosing;
            this.Close();
        }
Ejemplo n.º 14
0
        private void RecreateItemToggles()
        {
            ToggleBag.RemoveChildren();

            var itemKeys = ItemDataManager.Categories[ActiveCategory]
                           .OrderBy(p => ItemDataManager.GetItem(p).DisplayName)
                           .Skip(Row * MaxItemColumns)
                           .Take(MaxItemsPage).ToList();

            foreach (var itemKey in itemKeys)
            {
                var item   = ItemDataManager.GetItem(itemKey);
                var toggle = ToggleBag.AddChild(new ItemToggle(TooltipManager, item, ChestData.Accepts(itemKey)));
                toggle.OnToggle += () => ToggleItem(itemKey);
            }
        }
Ejemplo n.º 15
0
    private void Awake()
    {
        string thisName = name.Split('e')[1];

        // nextTile = transform.parent.GetChild(transform.GetSiblingIndex() + 1).GetComponent<TileInfoHolder>();
        tileNum          = System.Convert.ToInt32(thisName);
        tileTextNum.text = tileNum.ToString();
        string nextName = "Tile" + (tileNum + 1).ToString();
        string prevName = "Tile" + (tileNum - 1).ToString();

        if (tileNum - 1 < 1)
        {
            prevName = "Tile1";
        }
        prevTile = GameObject.Find(prevName).GetComponent <TileInfoHolder>();
        if (GameObject.Find(nextName) == null)
        {
            Debug.Log("null: " + name + "    " + nextName);
        }
        else
        {
            nextTile = GameObject.Find(nextName).GetComponent <TileInfoHolder>();
        }

        //tileNum = transform.GetSiblingIndex() ;//start at 1
        thisTilePos       = GetComponent <RectTransform>().anchoredPosition;// + new Vector2(80, 0);
        thisTileMinAnchor = GetComponent <RectTransform>().anchorMin;
        thisTileMaxAnchor = GetComponent <RectTransform>().anchorMax;

        if (hasSafe == true)
        {
            ChestData data = transform.GetChild(0).GetComponent <SafePrefabData>().chestData;
            // safeType = data.safeType;
            safeID = data.chestID;
        }

        if (hasCoin == true)
        {
            coinAmount = transform.GetChild(0).GetComponent <PrefabCoinHolder>().CoinData.coinAmount;
        }

        SafePickup.OnSafePickupDone += OnSafePickedUp;
        SafePickup.OnSafeReplaced   += UpdateDataForSafeReplace;

        CoinCollection.OnPickedUpCoin += DeleteCoin;
        SafePickup.OnRestoreSafe      += OnSafeRestore;
    }
Ejemplo n.º 16
0
    public static ChestData LoadChest(string name)
    {
        string path = Application.persistentDataPath + "/temp_chests/chest_" + name + ".inv";

        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream      stream    = new FileStream(path, FileMode.Open);
            ChestData       d         = formatter.Deserialize(stream) as ChestData;
            stream.Close();
            return(d);
        }
        else
        {
            Debug.Log("Save file not found");
            return(null);
        }
    }
Ejemplo n.º 17
0
        private void LoadChestData(int chest)
        {
            ChestData chestData = chestDataList[chest];

            entityType.Text = StringUtil.AsStringHex2(chestData.type);

            if ((TileEntityType)chestData.type == TileEntityType.Chest || (TileEntityType)chestData.type == TileEntityType.BigChest)
            {
                entityId.Text             = StringUtil.AsStringHex2(chestData.chestId);
                itemName.SelectedItem     = (ItemType)chestData.itemId;
                kinstoneType.SelectedItem = (KinstoneType)chestData.itemSubNumber;
                itemAmount.Text           = chestData.itemSubNumber.ToString();

                ushort chestPos = chestData.chestLocation;
                int    yPos     = chestPos >> 6;
                int    xPos     = chestPos - (yPos << 6);
                xPosition.Text = xPos.Hex();
                yPosition.Text = yPos.Hex();
                ((MainWindow)Application.OpenForms[0]).HighlightChest(xPos, yPos);
                itemName.Enabled     = true;
                kinstoneType.Enabled = true;
                itemAmount.Enabled   = true;
                xPosition.Enabled    = true;
                yPosition.Enabled    = true;
                entityId.Enabled     = true;
                unknown.Text         = chestData.unknown.Hex();
            }
            else
            {
                entityId.Text             = "00";
                itemName.SelectedItem     = ItemType.Untyped;
                kinstoneType.SelectedItem = KinstoneType.UnTyped;
                itemAmount.Text           = "0";
                xPosition.Text            = "0";
                yPosition.Text            = "0";
                ((MainWindow)Application.OpenForms[0]).HighlightChest(-1, -1);
                itemName.Enabled     = false;
                kinstoneType.Enabled = false;
                itemAmount.Enabled   = false;
                xPosition.Enabled    = false;
                yPosition.Enabled    = false;
                entityId.Enabled     = false;
            }
        }
Ejemplo n.º 18
0
    public void AddChest()
    {
        int x = _roomData.X1 + Random.Range(1, _roomData.Width - 2);
        int y = _roomData.Y1 + Random.Range(1, _roomData.Height - 2);

        if (!script.Instances[y, x] && !script.Instances[y + 1, x] && !script.Instances[y - 1, x])
        {
            Transform o        = Instantiate(Chest, new Vector3(x, y, 0), Quaternion.identity, transform);
            ChestData chest    = ScriptableObject.CreateInstance <ChestData>();
            ChestData chestref = ChestDatas[Random.Range(0, ChestDatas.Length)];

            chest.Create(chestref);
            chest.Item = GamesItems[Random.Range(0, GamesItems.Length)];
            o.GetComponent <Chest>().Create(chest);

            script.AddToInstance(y, x, true, false);
            _roomData.ModifyGrid(y - _roomData.Y1, x - _roomData.X1, o);
        }
    }
Ejemplo n.º 19
0
    public static ChestData LoadChestData()
    {
        string path = Application.persistentDataPath + "/Chest.data";

        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream      stream    = new FileStream(path, FileMode.Open);

            ChestData data = formatter.Deserialize(stream) as ChestData;
            stream.Close();

            return(data);
        }
        else
        {
            Debug.Log("Save file not found in " + path);
            return(null);
        }
    }
Ejemplo n.º 20
0
    public static Chest SpawnReWardChest(ColorChest color, TypeChest type, Vector3 Position)
    {
        ChestData cdt = getDataChest(type, MAP_GamePlay.CodeMapcurent);

        if (cdt == null)
        {
            Debug.Log("Không tìm thấy ChestData type = " + type);
            return(null);
        }
        Chest cpf = getChestPrefab(color);

        if (cpf == null)
        {
            Debug.Log("Không tìm thấy Prefabs Chest Colortype = " + color);
            return(null);
        }
        Chest chest = GameObject.Instantiate(cpf, Position, Quaternion.identity);

        chest.SetUpData(cdt);
        return(chest);
    }
Ejemplo n.º 21
0
        private void AddChest(ChestData ChestData)
        {
            if (FormDetails.ItemManager.ChestData.ContainsKey(ChestData.Name))
            {
                DialogResult result = MessageBox.Show(
                    ChestData.Name + " already exists. Overwrite it?",
                    "Existing Chest",
                    MessageBoxButtons.YesNo);

                if (result == DialogResult.No)
                {
                    return;
                }

                itemManager.ChestData[ChestData.Name] = ChestData;
                FillListBox();
                return;
            }

            itemManager.ChestData.Add(ChestData.Name, ChestData);
            lbDetails.Items.Add(ChestData);
        }
Ejemplo n.º 22
0
    public void GachaSingle(ChestData _data)
    {
        m_goBackground.SetActive(true);
        m_goPanelOne.SetActive(true);

        m_prefChest.SetActive(false);

        GachaChest chest = PrefabManager.Instance.MakeScript <GachaChest>(m_prefChest, m_goPanelOne);

        chest.Initialize(_data.spr_chest, _data.spr_item, _data.rarity);
        m_btnCloseOne.onClick.RemoveAllListeners();
        m_btnCloseOne.interactable = false;
        chest.OnChestOpen.AddListener(() =>
        {
            m_btnCloseOne.interactable = true;
            m_btnCloseOne.onClick.RemoveAllListeners();
            m_btnCloseOne.onClick.AddListener(() =>
            {
                OnGachaFinished.Invoke();
            });
        });
    }
    void DisplayUIData(int winnerNum)
    {
        Debug.Log("ui:  " + playerNum);
        playerNum = PlayerMoveSync.localPlayerID;
        if (CoinCollection.playersCoin[playerNum] > 0)
        {
            coinAmount.enabled = true;
            coinImage.enabled  = true;
            coinAmount.text    = CoinCollection.playersCoin[playerNum].ToString();
            PlayerPrefs.SetInt("Coin", PlayerPrefs.GetInt("Coin") + CoinCollection.playersCoin[playerNum]);
        }
        if (playerNum != winnerNum)
        {
            return;
        }
        if (SafePickup.playerSafeID[playerNum] > 0)
        {
            safeImage.enabled = true;

            safeImage.sprite = chestCollection.chestCollection[SafePickup.playerSafeID[playerNum]].chestImage;
            if (chestSaver.ReturnChestNum() >= 4)
            {
                safeImage.color      = Color.gray;
                safeFullText.enabled = true;
                return;
            }
        }

        ChestData     cData    = chestCollection.chestCollection[SafePickup.playerSafeID[playerNum]];
        SaveableChest newChest = new SaveableChest(cData.chestID, ChestState.Closed, System.DateTime.Now, cData.openDuration, cData.chestType);

        if (playerNum == winnerNum && playerNum > 0 && cData.chestID > 0)
        {
            OnAddChest(newChest);
        }
    }
        private void LoadWorld()
        {
            RpgLibrary.WorldClasses.LevelData levelData =
                Game.Content.Load <RpgLibrary.WorldClasses.LevelData>(@"Game\Levels\Starting Level");

            RpgLibrary.WorldClasses.MapData mapData =
                Game.Content.Load <RpgLibrary.WorldClasses.MapData>(@"Game\Levels\Maps\" + levelData.MapName);


            string[] fileNames = Directory.GetFiles(
                Path.Combine("Content/Game/Items", "Armor"),
                "*.xnb");

            foreach (string a in fileNames)
            {
                string path = "Game/Items/Armor/" + Path.GetFileNameWithoutExtension(a);

                ArmorData armorData = Game.Content.Load <ArmorData>(path);
                ItemManager.AddArmor(new Armor(armorData));
            }

            fileNames = Directory.GetFiles(
                Path.Combine("Content/Game/Items", "Shield"),
                "*.xnb");

            foreach (string a in fileNames)
            {
                string path = "Game/Items/Shield/" + Path.GetFileNameWithoutExtension(a);

                ShieldData shieldData = Game.Content.Load <ShieldData>(path);
                ItemManager.AddShield(new Shield(shieldData));
            }

            fileNames = Directory.GetFiles(
                Path.Combine("Content/Game/Items", "Weapon"),
                "*.xnb");

            foreach (string a in fileNames)
            {
                string path = "Game/Items/Weapon/" + Path.GetFileNameWithoutExtension(a);

                WeaponData weaponData = Game.Content.Load <WeaponData>(path);
                ItemManager.AddWeapon(new Weapon(weaponData));
            }

            CharacterLayerData charData =
                Game.Content.Load <CharacterLayerData>(@"Game\Levels\Chars\Starting Level");
            CharacterLayer characterLayer = new CharacterLayer();

            TileMap map = TileMap.FromMapData(mapData, Game.Content);

            foreach (var c in charData.Characters)
            {
                Character character;

                if (c.Value is NonPlayerCharacterData)
                {
                    Entity entity = new Entity(c.Value.Name, c.Value.EntityData, c.Value.Gender, EntityType.NPC);

                    using (Stream stream = new FileStream(c.Value.TextureName, FileMode.Open, FileAccess.Read))
                    {
                        Texture2D      texture = Texture2D.FromStream(GraphicsDevice, stream);
                        AnimatedSprite sprite  = new AnimatedSprite(texture, AnimationManager.Instance.Animations)
                        {
                            Position = new Vector2(c.Key.X * Engine.TileWidth, c.Key.Y * Engine.TileHeight)
                        };

                        character = new NonPlayerCharacter(entity, sprite);

                        ((NonPlayerCharacter)character).SetConversation(
                            ((NonPlayerCharacterData)c.Value).CurrentConversation);
                    }

                    characterLayer.Characters.Add(c.Key, character);
                }
            }

            map.AddLayer(characterLayer);

            Level level = new Level(map);

            ChestData chestData = Game.Content.Load <ChestData>(@"Game\Chests\Plain Chest");

            Chest chest = new Chest(chestData);

            BaseSprite chestSprite = new BaseSprite(
                containers,
                new Rectangle(0, 0, 32, 32),
                new Point(10, 10));

            ItemSprite itemSprite = new ItemSprite(
                chest,
                chestSprite);

            level.Chests.Add(itemSprite);

            World world = new World(GameRef, GameRef.ScreenRectangle);

            world.Levels.Add(level);
            world.CurrentLevel = 0;

            AnimatedSprite s = new AnimatedSprite(
                GameRef.Content.Load <Texture2D>(@"SpriteSheets\Eliza"),
                AnimationManager.Instance.Animations);

            s.Position = new Vector2(0 * Engine.TileWidth, 5 * Engine.TileHeight);

            EntityData ed = new EntityData("Eliza", 1, 10, 10, 10, 10, 10, 10, "20|CON|12", "16|WIL|16",
                                           "0|0|0");

            Entity e = new Entity("Eliza", ed, EntityGender.Female, EntityType.NPC);

            NonPlayerCharacter npc = new NonPlayerCharacter(e, s);

            npc.SetConversation("eliza1");
            //world.Levels[world.CurrentLevel].Characters.Add(npc);

            s = new AnimatedSprite(
                GameRef.Content.Load <Texture2D>(@"SpriteSheets\Eliza"),
                AnimationManager.Instance.Animations);
            s.Position = new Vector2(10 * Engine.TileWidth, 0);

            ed = new EntityData("Barbra", 2, 10, 10, 10, 10, 10, 10, "20|CON|12", "16|WIL|16", "0|0|0");

            e = new Entity("Barbra", ed, EntityGender.Female, EntityType.Merchant);

            Merchant  m     = new Merchant(e, s);
            Texture2D items = Game.Content.Load <Texture2D>("ObjectSprites/roguelikeitems");

            m.Backpack.AddItem(new GameItem(ItemManager.GetWeapon("Long Sword"), items, new Rectangle(0, 0, 16, 16)));
            m.Backpack.AddItem(new GameItem(ItemManager.GetWeapon("Short Sword"), items, new Rectangle(16, 0, 16, 16)));

            world.Levels[world.CurrentLevel].Characters.Add(m);
            ((CharacterLayer)world.Levels[world.CurrentLevel].Map.Layers.Find(x => x is CharacterLayer)).Characters.Add(new Point(10, 0), m);
            GamePlayScreen.World = world;

            CreateConversation();

            // ((NonPlayerCharacter)world.Levels[world.CurrentLevel].Characters[0]).SetConversation("eliza1");
        }
Ejemplo n.º 25
0
        private void CreateWorld()
        {
            Texture2D tilesetTexture = Game.Content.Load <Texture2D>(@"Tilesets\tileset1");
            Tileset   tileset1       = new Tileset(tilesetTexture, 8, 8, 32, 32);

            tilesetTexture = Game.Content.Load <Texture2D>(@"Tilesets\tileset2");

            Tileset        tileset2 = new Tileset(tilesetTexture, 8, 8, 32, 32);
            List <Tileset> tilesets = new List <Tileset>();

            tilesets.Add(tileset1);
            tilesets.Add(tileset2);

            MapLayer layer = new MapLayer(100, 100);

            for (int y = 0; y < layer.Height; y++)
            {
                for (int x = 0; x < layer.Width; x++)
                {
                    Tile tile = new Tile(0, 0);
                    layer.SetTile(x, y, tile);
                }
            }

            MapLayer splatter = new MapLayer(100, 100);
            Random   random   = new Random();

            for (int i = 0; i < 100; i++)
            {
                int x     = random.Next(0, 100);
                int y     = random.Next(0, 100);
                int index = random.Next(2, 14);

                Tile tile = new Tile(index, 0);

                splatter.SetTile(x, y, tile);
            }

            splatter.SetTile(1, 0, new Tile(0, 1));
            splatter.SetTile(2, 0, new Tile(2, 1));
            splatter.SetTile(3, 0, new Tile(0, 1));

            List <MapLayer> mapLayers = new List <MapLayer>();

            mapLayers.Add(layer);
            mapLayers.Add(splatter);

            TileMap map = new TileMap(tilesets, mapLayers);

            Level level = new Level(map);

            ChestData chestData = Game.Content.Load <ChestData>(@"Game\Chests\Plain Chest");
            Chest     chest     = new Chest(chestData);

            BaseSprite chestSprite = new BaseSprite(
                containers,
                new Rectangle(0, 0, 32, 32),
                new Point(10, 10));

            ItemSprite itemSprite = new ItemSprite(
                chest,
                chestSprite);

            level.Chests.Add(itemSprite);

            World world = new World(GameRef, GameRef.ScreenRectangle);

            world.Levels.Add(level);
            world.CurrentLevel = 0;

            GamePlayScreen.World = world;
        }
Ejemplo n.º 26
0
 private void ToggleItem(ItemKey itemKey)
 {
     ChestData.Toggle(itemKey);
     SelectAllButton.Checked = AreAllSelected();
 }
Ejemplo n.º 27
0
 private void _chestGetItem(short id, int amount, byte weight, byte maxWeight, ChestData data)
 {
     World.Instance.MainPlayer.ActiveCharacter.UpdateInventoryItem(id, amount, weight, maxWeight);
     EOChestDialog.Instance.InitializeItems(data.Items);
     m_game.Hud.RefreshStats();
 }
Ejemplo n.º 28
0
        private void LoadWorld()
        {
            RpgLibrary.WorldClasses.LevelData levelData =
                Game.Content.Load <RpgLibrary.WorldClasses.LevelData>(@"Game\Levels\Starting Level");

            RpgLibrary.WorldClasses.MapData mapData =
                Game.Content.Load <RpgLibrary.WorldClasses.MapData>(@"Game\Levels\Maps\" + levelData.MapName);

            CharacterLayerData charData =
                Game.Content.Load <CharacterLayerData>(@"Game\Levels\Chars\Starting Level");
            CharacterLayer characterLayer = new CharacterLayer();
            MobLayer       mobLayer       = new MobLayer();

            TileMap map = TileMap.FromMapData(mapData, Game.Content);

            foreach (var c in charData.Characters)
            {
                Character character;

                if (c.Value is NonPlayerCharacterData data)
                {
                    Entity entity = new Entity(c.Value.Name, c.Value.EntityData, c.Value.Gender, EntityType.NPC);

                    using (Stream stream = new FileStream(c.Value.TextureName, FileMode.Open, FileAccess.Read))
                    {
                        Texture2D      texture = Texture2D.FromStream(GraphicsDevice, stream);
                        AnimatedSprite sprite  = new AnimatedSprite(texture, AnimationManager.Instance.Animations)
                        {
                            Position = new Vector2(c.Key.X * Engine.TileWidth, c.Key.Y * Engine.TileHeight)
                        };

                        character = new NonPlayerCharacter(entity, sprite);

                        ((NonPlayerCharacter)character).SetConversation(
                            data.CurrentConversation);
                    }

                    characterLayer.Characters.Add(c.Key, character);
                }
            }

            map.AddLayer(characterLayer);
            map.AddLayer(mobLayer);

            Level level = new Level(map);

            ChestData chestData = Game.Content.Load <ChestData>(@"Game\Chests\Plain Chest");

            Chest chest = new Chest(chestData);

            BaseSprite chestSprite = new BaseSprite(
                containers,
                new Rectangle(0, 0, 32, 32),
                new Point(10, 10));

            ItemSprite itemSprite = new ItemSprite(
                chest,
                chestSprite);

            level.Chests.Add(itemSprite);

            World world = new World(GameRef, GameRef.ScreenRectangle);

            world.Levels.Add(level);
            world.CurrentLevel = 0;

            AnimatedSprite s = new AnimatedSprite(
                GameRef.Content.Load <Texture2D>(@"SpriteSheets\Eliza"),
                AnimationManager.Instance.Animations)
            {
                Position = new Vector2(0 * Engine.TileWidth, 5 * Engine.TileHeight)
            };

            EntityData ed = new EntityData("Eliza", 1, 10, 10, 10, 10, 10, 10, "20|CON|12", "16|WIL|16",
                                           "0|0|0");

            Entity e = new Entity("Eliza", ed, EntityGender.Female, EntityType.NPC);

            NonPlayerCharacter npc = new NonPlayerCharacter(e, s);

            npc.SetConversation("eliza1");
            //world.Levels[world.CurrentLevel].Characters.Add(npc);

            s = new AnimatedSprite(
                GameRef.Content.Load <Texture2D>(@"SpriteSheets\Eliza"),
                AnimationManager.Instance.Animations)
            {
                Position = new Vector2(10 * Engine.TileWidth, 0)
            };

            ed = new EntityData("Barbra", 2, 10, 10, 10, 10, 10, 10, "20|CON|12", "16|WIL|16", "0|0|0");

            e = new Entity("Barbra", ed, EntityGender.Female, EntityType.Merchant);

            Merchant  m     = new Merchant(e, s);
            Texture2D items = Game.Content.Load <Texture2D>("ObjectSprites/roguelikeitems");

            m.Backpack.AddItem(GameItemManager.GetItem("Long Sword"));
            m.Backpack.AddItem(GameItemManager.GetItem("Short Sword"));
            m.Backpack.AddItem(GameItemManager.GetItem("Apprentice Staff"));
            m.Backpack.AddItem(GameItemManager.GetItem("Acolyte Staff"));
            m.Backpack.AddItem(GameItemManager.GetItem("Leather Armor"));
            m.Backpack.AddItem(GameItemManager.GetItem("Chain Mail"));
            m.Backpack.AddItem(GameItemManager.GetItem("Studded Leather Armor"));
            m.Backpack.AddItem(GameItemManager.GetItem("Light Robes"));
            m.Backpack.AddItem(GameItemManager.GetItem("Medium Robes"));
            world.Levels[world.CurrentLevel].Characters.Add(m);
            ((CharacterLayer)world.Levels[world.CurrentLevel].Map.Layers.Find(x => x is CharacterLayer)).Characters.Add(new Point(10, 0), m);
            GamePlayScreen.World = world;

            for (int i = 0; i < 25; i++)
            {
                ed = new EntityData("Bandit", 1, 10, 12, 12, 10, 10, 10, "20|CON|10", "12|WIL|12", "0|0|0");

                e = new Entity("Bandit", ed, EntityGender.Male, EntityType.Monster);

                s = new AnimatedSprite(
                    GameRef.Content.Load <Texture2D>(@"PlayerSprites/malerogue"),
                    AnimationManager.Instance.Animations);

                Mob mob = new Bandit(e, s);

                Rectangle r = new Rectangle(Mechanics.Random.Next(10, 20) * 32, Mechanics.Random.Next(10, 20) * 32, 32, 32);

                if (!mobLayer.Mobs.ContainsKey(r))
                {
                    mobLayer.Mobs.Add(r, mob);
                }

                mob.Entity.Equip(GameItemManager.GetItem("Short Sword"));
                mob.Drops.Add(GameItemManager.GetItem("Short Sword"));
                mob.Drops.Add(GameItemManager.GetItem("Minor Healing Potion"));
            }
        }
        public void CreateWorld()
        {
            Texture2D tileSetTextureGrass = Game.Content.Load<Texture2D>(@"TileSets/grassTileSet");
            Tileset tileSetGrass = new Tileset(tileSetTextureGrass, 8, 8, 32, 32);

            Texture2D tileSetTextureTown = Game.Content.Load<Texture2D>(@"TileSets/townTileSet");
            Tileset tileSetTown = new Tileset(tileSetTextureTown, 8, 8, 32, 32);

            List<Tileset> tileSets = new List<Tileset>();
            tileSets.Add(tileSetGrass);
            tileSets.Add(tileSetTown);

            MapLayer layer = new MapLayer(100,100);

            for (int y = 0; y < layer.Height; y++)
            {
                for (int x = 0; x < layer.Width; x++)
                {
                    Tile tile = new Tile(0,0);
                    layer.SetTile(x,y,tile);
                }
            }

            MapLayer splatter = new MapLayer(100, 100);

            Random random = new Random();

            for (int i = 0; i < 100; i++)
            {
                int x = random.Next(0,100);
                int y = random.Next(0, 100);
                int index = random.Next(2, 14);

                Tile tile = new Tile(index, 0);
                splatter.SetTile(x,y,tile);
            }

            splatter.SetTile(1,0,new Tile(0,1));
            splatter.SetTile(2,0,new Tile(2,1));
            splatter.SetTile(3,0,new Tile(0,1));

            List<MapLayer> mapLayers = new List<MapLayer>();
            mapLayers.Add(layer);
            mapLayers.Add(splatter);

            TileMap map = new TileMap(tileSets, mapLayers);
            Level level = new Level(map);

            ChestData chestData = new ChestData();
            chestData.Name = "Chest";
            chestData.MinGold = 10;
            chestData.MaxGold = 101;

            Chest chest = new Chest(chestData);

            BaseSprite chestSprite = new BaseSprite(containers, new Rectangle(0,0,32,32), new Point(10,10));

            ItemSprite itemSprite = new ItemSprite(chest, chestSprite);

            level.Chests.Add(itemSprite);

            World world = new World(gameRef, gameRef.ScreenRectangle);
            world.Levels.Add(level);
            world.CurrentLevel = 0;

            GamePlayScreen.World = world;
        }
        private void CreateWorld()
        {
            Texture2D tilesetTexture = Game.Content.Load <Texture2D>(@"Tilesets\tileset1");
            Tileset   tileset1       = new Tileset(tilesetTexture, 8, 8, 32, 32);

            tilesetTexture = Game.Content.Load <Texture2D>(@"Tilesets\tileset2");

            Tileset  tileset2 = new Tileset(tilesetTexture, 8, 8, 32, 32);
            MapLayer layer    = new MapLayer(100, 100);

            for (int y = 0; y < layer.Height; y++)
            {
                for (int x = 0; x < layer.Width; x++)
                {
                    Tile tile = new Tile(0, 0);
                    layer.SetTile(x, y, tile);
                }
            }

            MapLayer splatter = new MapLayer(100, 100);
            Random   random   = new Random();

            for (int i = 0; i < 100; i++)
            {
                int x     = random.Next(0, 100);
                int y     = random.Next(0, 100);
                int index = random.Next(2, 14);

                Tile tile = new Tile(index, 0);

                splatter.SetTile(x, y, tile);
            }

            splatter.SetTile(1, 0, new Tile(0, 1));
            splatter.SetTile(2, 0, new Tile(2, 1));
            splatter.SetTile(3, 0, new Tile(0, 1));

            TileMap map = new TileMap(tileset1, layer);

            map.AddTileset(tileset2);
            map.AddLayer(splatter);
            map.CollisionLayer.Collisions.Add(new Point(1, 0), CollisionType.Impassable);
            map.CollisionLayer.Collisions.Add(new Point(3, 0), CollisionType.Impassable);

            Level level = new Level(map);

            ChestData chestData = Game.Content.Load <ChestData>(@"Game\Chests\Plain Chest");
            Chest     chest     = new Chest(chestData);

            BaseSprite chestSprite = new BaseSprite(
                containers,
                new Rectangle(0, 0, 32, 32),
                new Point(10, 10));

            ItemSprite itemSprite = new ItemSprite(
                chest,
                chestSprite);

            level.Chests.Add(itemSprite);

            World world = new World(GameRef, GameRef.ScreenRectangle);

            world.Levels.Add(level);
            world.CurrentLevel = 0;

            AnimatedSprite s = new AnimatedSprite(
                GameRef.Content.Load <Texture2D>(@"SpriteSheets\Eliza"),
                AnimationManager.Instance.Animations);

            s.Position = new Vector2(5 * Engine.TileWidth, 5 * Engine.TileHeight);

            EntityData         ed  = new EntityData("Eliza", 10, 10, 10, 10, 10, 10, "20|CON|12", "16|WIL|16", "0 | 0 | 0");
            Entity             e   = new Entity("Eliza", ed, EntityGender.Female, EntityType.NPC);
            NonPlayerCharacter npc = new NonPlayerCharacter(e, s);

            world.Levels[world.CurrentLevel].Characters.Add(npc);

            GamePlayScreen.World = world;
        }
Ejemplo n.º 31
0
    public void Save(string saveGameName, string newLevelName)
    {
        CurrentSave = new SaveGame();

        //save player location
        CurrentSave.PlayerLocation    = new float[3];
        CurrentSave.PlayerLocation[0] = GameManager.Inst.PlayerControl.SelectedPC.transform.position.x;
        CurrentSave.PlayerLocation[1] = GameManager.Inst.PlayerControl.SelectedPC.transform.position.y;
        CurrentSave.PlayerLocation[2] = GameManager.Inst.PlayerControl.SelectedPC.transform.position.z;
        //save player status
        CurrentSave.PlayerStatus = GameManager.Inst.PlayerControl.SelectedPC.MyStatus.Data;
        //save player inventory
        CurrentSave.PlayerInventory              = new CharacterInventorySaveData();
        CurrentSave.PlayerInventory.ArmorSlot    = GameManager.Inst.PlayerControl.SelectedPC.Inventory.ArmorSlot;
        CurrentSave.PlayerInventory.HeadSlot     = GameManager.Inst.PlayerControl.SelectedPC.Inventory.HeadSlot;
        CurrentSave.PlayerInventory.RifleSlot    = GameManager.Inst.PlayerControl.SelectedPC.Inventory.RifleSlot;
        CurrentSave.PlayerInventory.SideArmSlot  = GameManager.Inst.PlayerControl.SelectedPC.Inventory.SideArmSlot;
        CurrentSave.PlayerInventory.ThrowSlot    = GameManager.Inst.PlayerControl.SelectedPC.Inventory.ThrowSlot;
        CurrentSave.PlayerInventory.ToolSlot     = GameManager.Inst.PlayerControl.SelectedPC.Inventory.ToolSlot;
        CurrentSave.PlayerInventory.BackpackCols = GameManager.Inst.PlayerControl.SelectedPC.Inventory.BackpackCols;
        CurrentSave.PlayerInventory.BackpackRows = GameManager.Inst.PlayerControl.SelectedPC.Inventory.BackpackRows;
        CurrentSave.PlayerInventory.Backpack     = new List <GridItemData>(GameManager.Inst.PlayerControl.SelectedPC.Inventory.Backpack);
        //save player boosts
        CurrentSave.PlayerBoosts     = GameManager.Inst.PlayerControl.Survival.GetStatBoosts();
        CurrentSave.PlayerFirstName  = GameManager.Inst.PlayerProgress.PlayerFirstName;
        CurrentSave.PlayerLastName   = GameManager.Inst.PlayerProgress.PlayerLastName;
        CurrentSave.DiscoveredTopics = new List <string>(GameManager.Inst.PlayerProgress.DiscoveredTopics);
        CurrentSave.JournalEntries   = new List <List <string> >(GameManager.Inst.PlayerProgress.JournalEntries);
        CurrentSave.IncompleteTasks  = new List <int>(GameManager.Inst.PlayerProgress.IncompleteTasks);
        CurrentSave.CompletedTasks   = new List <int>(GameManager.Inst.PlayerProgress.CompletedTasks);

        //save story conditions
        CurrentSave.ItemConditions    = new List <StoryConditionItem>();
        CurrentSave.TriggerConditions = new List <StoryConditionTrigger>();
        foreach (KeyValuePair <string, StoryCondition> storyCondition in GameManager.Inst.QuestManager.StoryConditions)
        {
            if (storyCondition.Value.Type == StoryConditionType.Item)
            {
                CurrentSave.ItemConditions.Add((StoryConditionItem)storyCondition.Value);
            }
            else if (storyCondition.Value.Type == StoryConditionType.Trigger)
            {
                CurrentSave.TriggerConditions.Add((StoryConditionTrigger)storyCondition.Value);
            }
        }

        //save story event handler
        LinkedList <StoryEventListener> [] storyListenerLists = StoryEventHandler.Instance.AllListenerLists;
        CurrentSave.StoryListenerLists = new List <StoryEventListener> [storyListenerLists.Length];
        for (int i = 0; i < storyListenerLists.Length; i++)
        {
            List <StoryEventListener> list = StoryEventHandler.Instance.ConvertLinkedListenerToList(storyListenerLists[i]);
            CurrentSave.StoryListenerLists[i] = list;
        }

        CurrentSave.StoryEventList     = StoryEventHandler.Instance.ConvertQueueStoryEventToList(StoryEventHandler.Instance.StoryEventQueue);
        CurrentSave.CurrentStoryEvent  = StoryEventHandler.Instance.CurrentStoryEvent;
        CurrentSave.IsCurrentEventDone = StoryEventHandler.Instance.IsCurrentEventDone;


        //create new level data after removing existing one
        List <Level> allLevelsCopy = new List <Level>(GameManager.Inst.WorldManager.AllLevels);

        foreach (Level level in allLevelsCopy)
        {
            if (level.Name == GameManager.Inst.WorldManager.CurrentLevel.Name)
            {
                GameManager.Inst.WorldManager.AllLevels.Remove(level);
            }
        }

        Debug.Log("how many levels in AllLevels? " + GameManager.Inst.WorldManager.AllLevels.Count);

        CurrentSave.CurrentDay         = GameManager.Inst.WorldManager.CurrentDay;
        CurrentSave.CurrentTime        = GameManager.Inst.WorldManager.CurrentTime;
        CurrentSave.CurrentWeather     = GameManager.Inst.WorldManager.CurrentWeather;
        CurrentSave.IsDayTime          = GameManager.Inst.WorldManager.IsDayTime;
        CurrentSave.DayNightTransition = GameManager.Inst.WorldManager.DayNightTransition;
        CurrentSave.NightDayTransition = GameManager.Inst.WorldManager.NightDayTransition;

        Level currentLevel = new Level();

        currentLevel.Name = GameManager.Inst.WorldManager.CurrentLevel.Name;


        //save pickup items in the scene
        //first remove all pickup items from list from current level
        List <PickupItemData> pickupDataList = new List <PickupItemData>();

        //now go through all pickup items in the scene and create pickup data list
        GameObject [] objects = GameObject.FindGameObjectsWithTag("PickupItem");
        foreach (GameObject o in objects)
        {
            PickupItem     pickup = o.GetComponent <PickupItem>();
            PickupItemData data   = new PickupItemData();
            data.ItemID      = pickup.Item.ID;
            data.Quantity    = pickup.Quantity;
            data.Durability  = pickup.Durability;
            data.Pos         = new SerVector3(pickup.transform.position);
            data.EulerAngles = new SerVector3(pickup.transform.localEulerAngles);

            pickupDataList.Add(data);
        }

        currentLevel.PickupItemDatas = pickupDataList;


        //save characters in this level
        currentLevel.Characters = new List <CharacterSaveData>();
        GameObject [] characters = GameObject.FindGameObjectsWithTag("NPC");
        foreach (GameObject o in characters)
        {
            //only save character who have household
            Character character = o.GetComponent <Character>();

            if (character.MyAI.Squad == null || character.MyAI.Squad.Household == null || character.MyAI.Squad.Household.CurrentSquad.Faction != character.Faction)
            {
                continue;
            }

            CharacterSaveData saveData = new CharacterSaveData();
            saveData.GoapID        = character.GoapID;
            saveData.CharacterID   = character.CharacterID;
            saveData.Name          = character.Name;
            saveData.Title         = character.Title;
            saveData.GOName        = character.name;
            saveData.CharacterType = character.CharacterType;
            saveData.SquadID       = character.MyAI.Squad.Household.CurrentSquad.ID;
            saveData.Faction       = character.Faction;
            saveData.IsCommander   = character.IsCommander;
            saveData.IsEssential   = character.IsEssential;
            saveData.StatusData    = character.MyStatus.Data;
            saveData.Jobs          = character.MyJobs;
            saveData.Pos           = new SerVector3(character.transform.position);
            saveData.Angles        = new SerVector3(character.transform.localEulerAngles);

            saveData.Inventory              = new CharacterInventorySaveData();
            saveData.Inventory.ArmorSlot    = character.Inventory.HeadSlot;
            saveData.Inventory.HeadSlot     = character.Inventory.HeadSlot;
            saveData.Inventory.RifleSlot    = character.Inventory.RifleSlot;
            saveData.Inventory.SideArmSlot  = character.Inventory.SideArmSlot;
            saveData.Inventory.ThrowSlot    = character.Inventory.ThrowSlot;
            saveData.Inventory.ToolSlot     = character.Inventory.ToolSlot;
            saveData.Inventory.BackpackCols = character.Inventory.BackpackCols;
            saveData.Inventory.BackpackRows = character.Inventory.BackpackRows;
            saveData.Inventory.Backpack     = new List <GridItemData>(character.Inventory.Backpack);

            currentLevel.Characters.Add(saveData);
        }


        //save traders for current level
        List <TraderData> traders = new List <TraderData>();

        foreach (HumanCharacter character in GameManager.Inst.NPCManager.HumansInScene)
        {
            Trader trader = character.GetComponent <Trader>();

            if (trader != null)
            {
                TraderData traderData = new TraderData();
                traderData.CharacterID      = character.CharacterID;
                traderData.Cash             = trader.Cash;
                traderData.Tier             = trader.Tier;
                traderData.TraderInventory  = trader.TraderInventory;
                traderData.SupplyRenewTimer = trader.SupplyRenewTimer;
                traders.Add(traderData);
            }
        }

        currentLevel.Traders = traders;

        //save chests
        //first remove all chests from list from current level
        List <ChestData> chestDataList = new List <ChestData>();


        //now go through all chests in the scene and create pickup data list
        GameObject [] chests = GameObject.FindGameObjectsWithTag("Chest");
        foreach (GameObject o in chests)
        {
            Chest     chest = o.GetComponent <Chest>();
            ChestData data  = new ChestData();
            data.ChestID  = chest.ChestID;
            data.ColSize  = chest.ColSize;
            data.RowSize  = chest.RowSize;
            data.Items    = chest.Items;
            data.IsLocked = chest.IsLocked;
            data.KeyID    = chest.KeyID;

            chestDataList.Add(data);
        }

        currentLevel.ChestDatas = chestDataList;

        //save households
        currentLevel.Households = new List <HouseholdSaveData>();
        Household [] households = (Household[])GameObject.FindObjectsOfType <Household>();
        foreach (Household household in households)
        {
            HouseholdSaveData saveData = new HouseholdSaveData();
            saveData.HouseholdName = household.name;
            if (household.CurrentSquad != null)
            {
                saveData.CurrentSquadID   = household.CurrentSquad.ID;
                saveData.CurrentSquadTier = household.CurrentSquad.Tier;
                saveData.OwningFaction    = household.CurrentSquad.Faction;
            }
            else
            {
                saveData.CurrentSquadID   = "";
                saveData.CurrentSquadTier = 1;
            }

            saveData.IsRefilledToday      = household.IsRefilledToday;
            saveData.Expedition1SentToday = household.Expedition1SentToday;
            saveData.Expedition2SentToday = household.Expedition2SentToday;
            saveData.ExpeditionTime1      = household.ExpeditionTime1;
            saveData.ExpeditionTime2      = household.ExpeditionTime2;

            currentLevel.Households.Add(saveData);
        }

        //save doors
        currentLevel.Doors = new List <DoorSaveData>();
        GameObject [] doors = GameObject.FindGameObjectsWithTag("Door");
        foreach (GameObject o in doors)
        {
            Door         door     = o.GetComponent <Door>();
            DoorSaveData saveData = new DoorSaveData();
            saveData.ID       = door.ID;
            saveData.IsLocked = door.IsLocked;
            if (door.ID == "zsk_blockadedoor")
            {
                Debug.Log(door.ID + " is locked? " + saveData.IsLocked);
            }
            saveData.IsOpen = door.IsOpen;

            currentLevel.Doors.Add(saveData);
        }


        GameManager.Inst.WorldManager.AllLevels.Add(currentLevel);
        CurrentSave.Levels = new List <Level>(GameManager.Inst.WorldManager.AllLevels);
        CurrentSave.CurrentEnvironmentName = GameManager.Inst.WorldManager.CurrentEnvironment.Name;

        //save factions
        CurrentSave.Factions = new List <KeyValuePair <Faction, FactionData> >();
        foreach (KeyValuePair <Faction, FactionData> factionData in GameManager.Inst.NPCManager.AllFactions)
        {
            factionData.Value.PrepareSave();
            CurrentSave.Factions.Add(factionData);
        }


        //build the save file
        if (!String.IsNullOrEmpty(newLevelName))
        {
            CurrentSave.LevelToLoad = newLevelName;
            saveGameName            = "Autosave - " + newLevelName;
        }
        else
        {
            CurrentSave.LevelToLoad = GameManager.Inst.WorldManager.CurrentLevelName;
        }

        string fullPath = Application.persistentDataPath + "/" + saveGameName + ".dat";

        BinaryFormatter bf = new BinaryFormatter();
        FileStream      file;

        if (File.Exists(fullPath))
        {
            file = File.Open(fullPath, FileMode.Open);
        }
        else
        {
            file = File.Create(fullPath);
        }

        bf.Serialize(file, CurrentSave);

        Debug.Log(saveGameName + " has been saved");
        GameManager.Inst.UIManager.SetConsoleText("Game saved.");
    }