コード例 #1
0
ファイル: Game.cs プロジェクト: Kawa-oneechan/Kafe
        protected override void LoadContent()
        {
            Console.WriteLine("Loading game content...");
            SpriteBatch = new SpriteBatch(GraphicsDevice);
            rawScreen   = new RenderTarget2D(GraphicsDevice, ScreenWidth, ScreenHeight);

            ClutEffect       = GetEffect("clut");
            TransitionEffect = GetEffect("transition");
            transitionImage  = Mix.GetTexture("transition");
            RetrowaveEffect  = GetEffect("shaderwave");

            Console.WriteLine("Enumerating characters and locations...");
            var fighterFiles = Mix.GetFilesWithPattern("fighters\\*.char.json");
            var fighters     = new List <string>();

            foreach (var f in fighterFiles)
            {
                fighters.Add(f.Substring(f.IndexOf('\\') + 1));
            }
            var arenaFiles = Mix.GetFilesWithPattern("locales\\*.bg.json");
            var arenas     = new List <string>();

            foreach (var a in arenaFiles)
            {
                arenas.Add(a.Substring(a.IndexOf('\\') + 1));
            }

            if (Args.Length >= 3 && Args[0] == "/edit")
            {
                Console.WriteLine("|c3|Edit mode requested.");
                LoadingScreen.Start(() =>
                {
                    Components.Add(new Editor("locales\\" + Args[1] + ".bg.json", Args[2] + ".char.json"));
                });
            }
            else if (Args.Length > 0 && Args[0] == "/quick")
            {
                Console.WriteLine("|c3|Quick battle requested.");
                var names  = new string[2];
                var colors = new int[2];
                var rand   = new Random();
                for (var i = 0; i < 2; i++)
                {
                    names[i] = fighters[rand.Next(fighters.Count)];
                }
                var numNames = (Args.Length > 2) ? 2 : 1;
                for (var i = 0; i < numNames; i++)
                {
                    names[i]  = Args[i + 1].ToLowerInvariant();
                    colors[i] = 1;
                    if (names[i].Contains(","))
                    {
                        colors[i] = int.Parse(names[i].Substring(names[i].IndexOf(',') + 1));
                        names[i]  = names[i].Remove(names[i].IndexOf(','));
                    }
                    if (!names[i].EndsWith(".char.json"))
                    {
                        names[i] += ".char.json";
                    }
                }
                //Ensure mirror matches have distinct colors
                if (names[0] == names[1] && colors[0] == colors[1])
                {
                    colors[1]++;
                }
                var arena = "locales\\" + ((Args.Length > 3) ? Args[3] + ".bg.json" : arenas[rand.Next(arenas.Count)]);
                LoadingScreen.Start(() =>
                {
                    var left  = new Character(names[0], colors[0]);
                    var right = new Character(names[1], colors[1]);
                    Components.Add(new Arena(arena, left, right));
                });
            }
            else
            {
                Console.WriteLine("|c3|Regular gameplay requested.");
                LoadingScreen.Start(() =>
                {
                    var fighterList = new List <Character>();
                    foreach (var f in fighters)
                    {
                        fighterList.Add(new Character(f, 0));
                    }
                    Kafe.Characters = fighterList.ToArray();
                    Components.Add(new TitleBackground());
                    Components.Add(new TitleScreen(false));
                });
            }
        }
コード例 #2
0
ファイル: CharacterSelect.cs プロジェクト: Kawa-oneechan/Kafe
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            for (var i = 0; i < numPlayers; i++)
            {
                if (locked[i])
                {
                    continue;
                }
                var control   = Input.Controls[i];
                var oldCursor = cursor[i];
                if (control.TrgLeft)
                {
                    cursor[i]--;
                    if (cursor[i] < 0)
                    {
                        cursor[i] = Kafe.Characters.Length - 1;
                    }
                }
                else if (control.TrgRight)
                {
                    cursor[i]++;
                    if (cursor[i] >= Kafe.Characters.Length)
                    {
                        cursor[i] = 0;
                    }
                }
                else if (control.TrgUp)
                {
                    cursor[i] -= 5;
                    if (cursor[i] < 0)
                    {
                        cursor[i] = Kafe.Characters.Length - 1;
                    }
                }
                else if (control.TrgDown)
                {
                    cursor[i] += 5;
                    if (cursor[i] >= Kafe.Characters.Length)
                    {
                        cursor[i] = 0;
                    }
                }
                else if (control.TrgA || control.TrgB || control.TrgC || control.TrgD || control.TrgE || control.TrgF)
                {
                    locked[i] = true;
                    if (control.TrgA)
                    {
                        selection[i].ColorSwap = 1;
                    }
                    else if (control.TrgB)
                    {
                        selection[i].ColorSwap = 2;
                    }
                    else if (control.TrgC)
                    {
                        selection[i].ColorSwap = 3;
                    }
                    else if (control.TrgD)
                    {
                        selection[i].ColorSwap = 4;
                    }
                    else if (control.TrgE)
                    {
                        selection[i].ColorSwap = 5;
                    }
                    else if (control.TrgF)
                    {
                        selection[i].ColorSwap = 6;
                    }
                    selection[i].SwitchTo(StandardAnims.Select);

                    //For single-player games, select another character at random for now.
                    if (numPlayers == 1)
                    {
                        var j    = i ^ 1;
                        var rand = new Random();
                        while (cursor[j] == cursor[i])
                        {
                            cursor[j] = rand.Next(Kafe.Characters.Length);
                        }
                        selection[j]           = Kafe.Characters[cursor[j]];
                        selection[j].ColorSwap = 0;
                        selection[j].SwitchTo(StandardAnims.Select);
                        //selection[j].Computer = true;
                        locked[j] = true;
                        showTwo   = true;
                    }
                }
                if (numPlayers > 1 && cursor[i] == cursor[i ^ 1])
                {
                    cursor[i] = oldCursor;
                }
                else
                {
                    selection[i] = Kafe.Characters[cursor[i]];
                }
            }
            if (Input.WasJustReleased(Keys.Escape))
            {
                Kafe.DoTransition(false, () =>
                {
                    Kafe.Me.Components.Remove(this);
                    LoadingScreen.Start(() =>
                    {
                        var title = new TitleScreen(true)
                        {
                            Enabled = false
                        };
                        Kafe.Me.Components.Add(title);
                        Kafe.DoTransition(true, () => { title.Enabled = true; });
                    });
                });
            }
            if (lockTimer == -1)
            {
                if (locked[0] && locked[1])
                {
                    lockTimer = 1000;
                }
            }
            else
            {
                lockTimer -= gameTime.ElapsedGameTime.Milliseconds;
                if (lockTimer <= 0)
                {
                    this.Enabled = false;
                    Kafe.DoTransition(false, () =>
                    {
                        Kafe.Me.Components.Remove(this);
                        for (var i = 0; i < Kafe.Me.Components.Count; i++)
                        {
                            if (Kafe.Me.Components[i] is TitleBackground)
                            {
                                Kafe.Me.Components.RemoveAt(i);
                                break;
                            }
                        }
                        LoadingScreen.Start(() =>
                        {
                            //TODO: base this on the other character.
                            var arena = new Arena("locales\\mci_corridor.bg.json", selection[0], selection[1])
                            {
                                Enabled = false
                            };
                            Kafe.Me.Components.Add(arena);
                            Kafe.DoTransition(true, () => { arena.Enabled = true; });
                        });
                    });
                }
            }
        }