コード例 #1
0
        /// <summary>
        /// Load all tilesets
        /// </summary>
        internal static void LoadAllTilesets()
        {
            // TODO: FIXME with new WarFile resource loading strategy

            WarResource     tileset  = ((RawResource)WarFile.GetResourceByName("Barrens 1")).Resource;
            WarResource     tiles    = ((RawResource)WarFile.GetResourceByName("Barrens 2")).Resource;
            PaletteResource tilesPAL = WarFile.GetResourceByName("Barrens 3") as PaletteResource;
            MapTileset      swamp    = new MapTileset(Tileset.Swamp, tileset, tiles, tilesPAL);

            knownTilesets.Add(swamp);

            tileset  = ((RawResource)WarFile.GetResourceByName("Summer 1")).Resource;
            tiles    = ((RawResource)WarFile.GetResourceByName("Summer 2")).Resource;
            tilesPAL = WarFile.GetResourceByName("Summer 3") as PaletteResource;
            MapTileset summer = new MapTileset(Tileset.Summer, tileset, tiles, tilesPAL);

            knownTilesets.Add(summer);

            if (WarFile.IsDemo == false)
            {
                tileset  = ((RawResource)WarFile.GetResourceByName("Dungeon 1")).Resource;
                tiles    = ((RawResource)WarFile.GetResourceByName("Dungeon 2")).Resource;
                tilesPAL = WarFile.GetResourceByName("Dungeon 3") as PaletteResource;
                MapTileset dungeon = new MapTileset(Tileset.Dungeon, tileset, tiles, tilesPAL);
                knownTilesets.Add(dungeon);
            }
        }
コード例 #2
0
ファイル: IngameMenuWindow.cs プロジェクト: ryancheung/WinWar
        internal IngameMenuWindow(Race setRace)
        {
            curRace = setRace;
            LevelGameScreen.Game.GamePaused = true;

            BackgroundColor = new Microsoft.Xna.Framework.Color(0.3f, 0.0f, 0.0f, 0.5f);

            //Width = background.Width;
            //Height = background.Height;

            UIResource res = WarFile.GetUIResource(setRace == Race.Humans ? 368 : 369);

            background = new UIImage(WWTexture.FromImageResource(WarFile.GetImageResource(res.BackgroundImageResourceIndex)));
            background.InitWithUIResource(res);
            AddComponent(background);

            background.X = 120;
            background.Y = 20;

            continueButton = (UIButton)background.Components [6];
            continueButton.OnMouseUpInside += closeButton_OnMouseUpInside;

            quitButton = (UIButton)background.Components [5];
            quitButton.OnMouseUpInside += quitButton_OnMouseUpInside;

            MouseCursor.State = MouseCursorState.Pointer;
        }
コード例 #3
0
        public Entity(Map currentMap)
        {
            Performance.Push("Entity ctor");
            VisibleRange = 0;

            IconIndex = 0;

            currentTarget  = null;
            PreviousTarget = null;

            CurrentMap = currentMap;

            Performance.Push("Create base sprite");
            sprite = new Sprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Human Peasant")));
            Performance.Pop();

            Performance.Push("new HateList");
            HateList = new HateList();
            Performance.Pop();

            Performance.Push("new StateMachine");
            StateMachine = new StateMachine(this);
            Performance.Pop();

            Performance.Push("StateMachine.ChangeState");
            StateMachine.ChangeState(new StateIdle(this));
            Performance.Pop();

            Performance.Pop();
        }
コード例 #4
0
ファイル: MouseCursor.cs プロジェクト: ryancheung/WinWar
        private static void LoadResources()
        {
            if (didLoadResources || WarFile.AreResoucesLoaded == false)
            {
                return;
            }

            cursorResources = new Cursor[Enum.GetValues(typeof(MouseCursorState)).Length];

            cursorResources[(int)MouseCursorState.Pointer]           = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Normal Pointer")));
            cursorResources[(int)MouseCursorState.NotAllowed]        = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Not allowed")));
            cursorResources[(int)MouseCursorState.CrosshairOrange]   = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Crosshair Orange")));
            cursorResources[(int)MouseCursorState.CrosshairRed]      = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Crosshair Red")));
            cursorResources[(int)MouseCursorState.CrosshairOrange2]  = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Crosshair Orange 2")));
            cursorResources[(int)MouseCursorState.Magnifier]         = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Magnifier")));
            cursorResources[(int)MouseCursorState.CrosshairGreen]    = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Crosshair Green")));
            cursorResources[(int)MouseCursorState.Loading]           = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Loading...")));
            cursorResources[(int)MouseCursorState.ScrollTop]         = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Top")));
            cursorResources[(int)MouseCursorState.ScrollTopright]    = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Topright")));
            cursorResources[(int)MouseCursorState.ScrollRight]       = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Right")));
            cursorResources[(int)MouseCursorState.ScrollBottomright] = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Bottomright")));
            cursorResources[(int)MouseCursorState.ScrollBottom]      = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Bottom")));
            cursorResources[(int)MouseCursorState.ScrollBottomleft]  = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Bottomleft")));
            cursorResources[(int)MouseCursorState.ScrollLeft]        = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Left")));
            cursorResources[(int)MouseCursorState.ScrollTopleft]     = new Cursor(WarFile.GetCursorResource(WarFile.KnowledgeBase.IndexByName("Scroll Topleft")));

            didLoadResources = true;
        }
コード例 #5
0
ファイル: MainPage.xaml.cs プロジェクト: s-melnikov/WinWar
        private void PopulateListBox()
        {
            if (WarFile.AreResoucesLoaded == false)
            {
                listBox.Items.Clear();
                return;
            }

            int resCnt = WarFile.Count;

            ObservableCollection <ListEntry> coll = new ObservableCollection <ListEntry>();

            for (int i = 0; i < resCnt; i++)
            {
                ListEntry entry = new ListEntry();
                entry.Resource = WarFile.GetResource(i);
                entry.Index    = i;
                entry.Name     = WarFile.KnowledgeBase[i].text;
                entry.Type     = entry.Resource != null ? entry.Resource.Type : ContentFileType.FileUnknown;
                coll.Add(entry);
            }

            ListEntryHeader header = new ListEntryHeader();

            header.IndexDesc = "Index";
            header.NameDesc  = "Name";
            header.TypeDesc  = "Type";

            listBox.Header      = header;
            listBox.ItemsSource = coll;
        }
コード例 #6
0
ファイル: UIButton.cs プロジェクト: ryancheung/WinWar
        private void AutoSetButtonImage(int releaseButtonResourceIndex, int pressedButtonResourceIndex)
        {
            backgroundNotClicked = WWTexture.FromImageResource(WarFile.GetImageResource(releaseButtonResourceIndex));
            backgroundClicked    = WWTexture.FromImageResource(WarFile.GetImageResource(pressedButtonResourceIndex));

            Width  = (int)(backgroundNotClicked.Width);
            Height = (int)(backgroundNotClicked.Height);
        }
コード例 #7
0
ファイル: MainPage.xaml.cs プロジェクト: s-melnikov/WinWar
        private void closeButton_Click(object sender, RoutedEventArgs e)
        {
            listBox.Visibility    = Visibility.Collapsed;
            closeButton.IsEnabled = false;

            WarFile.Unload();

            UpdateStatusText();
        }
コード例 #8
0
ファイル: UIEntityControl.cs プロジェクト: ryancheung/WinWar
        private void ShowMultiUI()
        {
            // Fail-safe
            if (currentEntities.Length <= 1 || currentEntities.Length > 4)
            {
                return;
            }

            SpriteResource res = WarFile.GetSpriteResource(race == Race.Humans ? 360 : 359);
        }
コード例 #9
0
ファイル: MainGame.cs プロジェクト: ryancheung/WinWar
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override async void Initialize()
        {
            base.Initialize();

            WinWarCS.Util.Log.Write(Util.LogType.Generic, Util.LogSeverity.Status, "WinWarCS -- Version: " + Version);

            bool result = await ValidateDataWar();

            if (result == false)
            {
                await Platform.UI.ShowMessageDialog("DATA.WAR not found at expected location '" + AssetProvider.ExpectedDataDirectory +
                                                    "'. Please copy the DATA.WAR from the demo or the full version to that location.\r\nIf you have the full version, " +
                                                    "please also copy all the other .WAR files from the data directory.");

                return;
            }

            Exception loadingException = null;

            try
            {
                Entity.LoadDefaultValues(AssetProvider);
                WarFile.LoadResources(AssetProvider);
                MapTileset.LoadAllTilesets();
            } catch (Exception ex)
            {
                loadingException = ex;
            }

            soundManager = new SoundManager();
            musicManager = new MusicManager();

            if (loadingException != null)
            {
                await Platform.UI.ShowMessageDialog("An error occured during loading of DATA.WAR (" + loadingException + ").");

                return;
            }

            if (WarFile.IsDemo)
            {
                SetNextGameScreen(new MenuGameScreen(false));
            }
            else
            {
                // Play demo
                SetNextGameScreen(new IntroGameScreen(
                                      delegate(bool wasCancelled) {
                    SetNextGameScreen(new MenuGameScreen(!wasCancelled));
                }));
            }
        }
コード例 #10
0
ファイル: Texture.cs プロジェクト: ryancheung/WinWar
        internal static WWTexture FromImageResource(string name)
        {
            int idx = WarFile.KnowledgeBase.IndexByName(name);

            if (idx == -1)
            {
                return(null);
            }

            ImageResource ir = WarFile.GetImageResource(idx);

            return(FromImageResource(ir));
        }
コード例 #11
0
ファイル: UIBaseComponent.cs プロジェクト: ryancheung/WinWar
        internal void InitWithUIResource(string name)
        {
            int idx = WarFile.KnowledgeBase.IndexByName(name);

            if (idx == -1)
            {
                return;
            }

            UIResource tr = WarFile.GetUIResource(idx);

            InitWithUIResource(tr);
        }
コード例 #12
0
ファイル: UIBaseComponent.cs プロジェクト: ryancheung/WinWar
        internal static UIWindow FromUIResource(string name)
        {
            int idx = WarFile.KnowledgeBase.IndexByName(name);

            if (idx == -1)
            {
                return(null);
            }

            UIResource tr = WarFile.GetUIResource(idx);

            return(FromUIResource(tr));
        }
コード例 #13
0
ファイル: UIEntityControl.cs プロジェクト: ryancheung/WinWar
        private void ShowSingleUI()
        {
            // Fail-safe
            if (currentEntities.Length != 1)
            {
                return;
            }

            SpriteResource res     = WarFile.GetSpriteResource(race == Race.Humans ? 360 : 359);
            SpriteResource resUnit = WarFile.GetSpriteResource(361);

            Entity ent = currentEntities[0];

            UISpriteImage unitFrame = new UISpriteImage(new Sprite(res));

            unitFrame.FixedSpriteFrame = ent.Mana > 0 ? 1 : 0;
            unitFrame.X = 0;
            unitFrame.Y = 0;
            AddComponent(unitFrame);

            UISpriteImage unitIcon = new UISpriteImage(new Sprite(resUnit));

            unitIcon.FixedSpriteFrame = ent.IconIndex;
            unitIcon.X = 4;
            unitIcon.Y = 4;
            unitFrame.AddComponent(unitIcon);

            UILabel nameLabel = new UILabel(currentEntities[0].Name);

            nameLabel.TextAlign = TextAlignHorizontal.Left;
            nameLabel.X         = 4;
            nameLabel.Y         = unitIcon.Y + unitIcon.Height + 2;
            unitFrame.AddComponent(nameLabel);

            UIImage img = new UIImage(null);

            img.X               = 35;
            img.Y               = 20;
            img.Height          = 3;
            img.BackgroundColor = new Color(0.0f, 1.0f, 0.0f, 1.0f);
            SetHealthbar(img, ent);
            unitFrame.AddComponent(img);

            healthBars.Add(ent, img);
        }
コード例 #14
0
ファイル: UIMapControl.cs プロジェクト: ryancheung/WinWar
        internal void LoadCampaignLevel(Race race, int level)
        {
            string basenameInfo = race + " " + level;

            LevelInfoResource     levelInfo     = WarFile.GetResourceByName(basenameInfo) as LevelInfoResource;
            LevelPassableResource levelPassable = WarFile.GetResource(levelInfo.PassableResourceIndex) as LevelPassableResource;
            LevelVisualResource   levelVisual   = WarFile.GetResource(levelInfo.VisualResourceIndex) as LevelVisualResource;

            if (InputHandler != null)
            {
                InputHandler.SetMapUnitOrder(MapUnitOrder.None);
            }

            CurrentMap = new Map(levelInfo, levelVisual, levelPassable);
            SetCameraOffset(levelInfo.StartCameraX * CurrentMap.TileWidth, levelInfo.StartCameraY * CurrentMap.TileHeight);

            CurrentMap.OnSelectedEntitiesChanged += HandleOnSelectedEntitiesChanged;
        }
コード例 #15
0
        internal IngameQuitMenuWindow(Race setRace)
        {
            UIResource res = WarFile.GetUIResource(setRace == Race.Humans ? 391 : 392);

            background = new UIImage(WWTexture.FromImageResource(WarFile.GetImageResource(res.BackgroundImageResourceIndex)));
            background.InitWithUIResource(res);
            AddComponent(background);

            background.CenterOnScreen();

            cancelButton = (UIButton)background.Components [3];
            cancelButton.OnMouseUpInside += cancelButton_OnMouseUpInside;

            menuButton = (UIButton)background.Components [2];
            menuButton.OnMouseUpInside += menuButton_OnMouseUpInside;

            quitButton = (UIButton)background.Components [1];
            quitButton.OnMouseUpInside += quitButton_OnMouseUpInside;

            MouseCursor.State = MouseCursorState.Pointer;
        }
コード例 #16
0
ファイル: MainPage.xaml.cs プロジェクト: s-melnikov/WinWar
        private async void openButton_Click(object sender, RoutedEventArgs e)
        {
            FileOpenPicker picker = new FileOpenPicker();

            picker.ViewMode = PickerViewMode.List;
            picker.FileTypeFilter.Add(".WAR");

            StorageFile file = await picker.PickSingleFileAsync();

            if (file != null)
            {
                var stream = await file.OpenAsync(FileAccessMode.Read);

                WarFile.LoadResourcesFromStream(stream.AsStreamForRead());
            }

            UpdateStatusText();
            PopulateListBox();

            listBox.Visibility    = Visibility.Visible;
            closeButton.IsEnabled = true;
        }
コード例 #17
0
ファイル: SoundManager.cs プロジェクト: ryancheung/WinWar
        public bool LoadSound(int resIndex)
        {
            if (effectCache.ContainsKey(resIndex) || WarFile.AreResoucesLoaded == false)
            {
                return(false);
            }

            RawResource res = WarFile.GetResource(resIndex) as RawResource;

            if (res == null ||
                res.Type != ContentFileType.FileWave)
            {
                return(false);
            }

            using (MemoryStream memStream = new MemoryStream(res.Resource.data))
            {
                SoundEffect eff = SoundEffect.FromStream(memStream);
                effectCache.Add(resIndex, eff);
            }

            return(true);
        }
コード例 #18
0
ファイル: UIEntityControl.cs プロジェクト: ryancheung/WinWar
        private void ShowBuildSubMenu()
        {
            // Remove all old components
            ClearComponents();

            isInSubmenu = true;

            healthBars.Clear();

            // No entities? Then just exit
            if (currentEntities == null || currentEntities.Length == 0)
            {
                return;
            }

            if (currentEntities.Length == 1)
            {
                ShowSingleUI();
            }
            else
            {
                ShowMultiUI();
            }

            int buttonIndex = 0;

            if (ShowCancel)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Cancel");
                btn.OnMouseUpInside += (position) => { RebuildUI(); };
                SetButtonPosition(btn, 5);
                AddComponent(btn);

                buttonIndex++;
            }
        }
コード例 #19
0
 public HumanBarracks(Map currentMap)
     : base(currentMap)
 {
     sprite = new Sprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Human Barracks")));
 }
コード例 #20
0
 public OrcSpearman(Map currentMap)
     : base(currentMap)
 {
     sprite = new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Orc Axethrower")));
 }
コード例 #21
0
 public OrcTownhall(Map currentMap)
     : base(currentMap)
 {
     sprite = new Sprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Orc Base")));
 }
コード例 #22
0
ファイル: HumanFootman.cs プロジェクト: ryancheung/WinWar
 public HumanFootman(Map currentMap)
     : base(currentMap)
 {
     sprite = new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Human Warrior")));
 }
コード例 #23
0
        internal static UISpriteImage FromSpriteResource(string name)
        {
            UISpriteImage res = new UISpriteImage(new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName(name))));

            return(res);
        }
コード例 #24
0
ファイル: Corpse.cs プロジェクト: bmjoy/WinWar
 public Corpse(Map currentMap)
     : base(currentMap)
 {
     sprite = new Sprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Corpse")));
 }
コード例 #25
0
ファイル: HumanArcher.cs プロジェクト: ryancheung/WinWar
 public HumanArcher(Map currentMap)
     : base(currentMap)
 {
     sprite = new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Human Bowman")));
 }
コード例 #26
0
ファイル: OrcGrunt.cs プロジェクト: ryancheung/WinWar
 public OrcGrunt(Map currentMap)
     : base(currentMap)
 {
     sprite = new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Orc Grunt")));
 }
コード例 #27
0
ファイル: UIEntityControl.cs プロジェクト: ryancheung/WinWar
        private void RebuildUI()
        {
            // Remove all old components
            ClearComponents();

            isInSubmenu = false;

            healthBars.Clear();

            // No entities? Then just exit
            if (currentEntities == null || currentEntities.Length == 0)
            {
                return;
            }

            if (currentEntities.Length == 1)
            {
                ShowSingleUI();
            }
            else
            {
                ShowMultiUI();
            }

            int buttonIndex = 0;

            if (ShowMove)
            {
                UISpriteButton moveBtn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Move" + race);
                moveBtn.OnMouseUpInside += (position) => { SetMapUnitOrder(MapUnitOrder.Move); };
                SetButtonPosition(moveBtn, buttonIndex);
                AddComponent(moveBtn);

                buttonIndex++;
            }
            if (ShowStop)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Shield1" + (race == Race.Humans ? "" : "Orcs"));
                btn.OnMouseUpInside += (position) => { Stop(); };
                SetButtonPosition(btn, buttonIndex);
                AddComponent(btn);

                buttonIndex++;
            }
            if (ShowAttack)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Sword1");
                btn.OnMouseUpInside += (position) => { SetMapUnitOrder(MapUnitOrder.Attack); };
                SetButtonPosition(btn, buttonIndex);
                AddComponent(btn);

                buttonIndex++;
            }
            if (ShowRepair)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Repair");
                btn.OnMouseUpInside += (position) => { SetMapUnitOrder(MapUnitOrder.Repair); };
                SetButtonPosition(btn, buttonIndex);
                AddComponent(btn);

                buttonIndex++;
            }
            if (ShowHarvest)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Harvest");
                btn.OnMouseUpInside += (position) => { SetMapUnitOrder(MapUnitOrder.Harvest); };
                SetButtonPosition(btn, buttonIndex);
                AddComponent(btn);

                buttonIndex++;
            }
            if (ShowBuild)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Build");
                btn.OnMouseUpInside += (position) => { ShowBuildSubMenu(); };
                SetButtonPosition(btn, buttonIndex);
                AddComponent(btn);

                buttonIndex++;
            }
            if (ShowCancel)
            {
                UISpriteButton btn = new UISpriteButton(new Sprite(WarFile.GetSpriteResource(361)), "Cancel");
                btn.OnMouseUpInside += (position) => { RebuildUI(); };
                SetButtonPosition(btn, 6);
                AddComponent(btn);

                buttonIndex++;
            }

            if (currentEntities.Length == 1)
            {
                currentEntities[0].AddCustomUI(this);
            }
        }
コード例 #28
0
 public HumanStormwind(Map currentMap)
     : base(currentMap)
 {
     sprite = new Sprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Stormwind")));
 }
コード例 #29
0
ファイル: HumanConjurer.cs プロジェクト: ryancheung/WinWar
 public HumanConjurer(Map currentMap)
     : base(currentMap)
 {
     sprite = new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Human Wizard")));
 }
コード例 #30
0
 public HumanCatapult(Map currentMap)
     : base(currentMap)
 {
     sprite = new UnitSprite(WarFile.GetSpriteResource(WarFile.KnowledgeBase.IndexByName("Human Catapult")));
 }