Example #1
0
File: Game.cs Project: bilwis/SH2RL
        public bool HandleInput(TCODKey key)
        {
            #region "Player Input"
            //tar_y = player.Y;
            //tar_x = player.X;
            //tar_z = player.Z;
            tar_x = 0;
            tar_y = 0;
            tar_z = 0;

            switch (key.KeyCode)
            {
                //MOVEMENT
                case TCODKeyCode.KeypadEight:
                    tar_y = - 1;
                    return true;
                case TCODKeyCode.KeypadSix:
                    tar_x =  1;
                    return true;
                case TCODKeyCode.KeypadTwo:
                    tar_y = 1;
                    return true;
                case TCODKeyCode.KeypadFour:
                    tar_x = - 1;
                    return true;
                case TCODKeyCode.KeypadNine:
                    tar_y =  - 1;
                    tar_x =  + 1;
                    return true;
                case TCODKeyCode.KeypadThree:
                    tar_y =  + 1;
                    tar_x =  + 1;
                    return true;
                case TCODKeyCode.KeypadOne:
                    tar_y =  + 1;
                    tar_x =  - 1;
                    return true;
                case TCODKeyCode.KeypadSeven:
                    tar_y =  - 1;
                    tar_x =  - 1;
                    return true;
                case TCODKeyCode.KeypadFive:
                    return true;

                //SELECTION
                case TCODKeyCode.KeypadAdd:
                    menu_selection++;
                    return true;
                case TCODKeyCode.KeypadSubtract:
                    menu_selection--;
                    return true;
                case TCODKeyCode.KeypadEnter:
                    lock_cursor = true;
                    return true;

            }

            switch (key.Character)
            {
                case '<':
                    tar_z = player.Z - 1;
                    return true;
                case '>':
                    tar_z = player.Z + 1;
                    return true;

                case 't':
                    player_pickup = true;
                    return true;
                case 'e':
                    if (mdm == MainDisplayMode.Inventory)
                    {
                        player_equip = true;
                        return true;
                    }
                    return false;
                case 'u':
                    if (mdm == MainDisplayMode.Inventory)
                    {
                        player_unequip = true;
                        return true;
                    }
                    return false;
                case 'a':
                    if (mdm == MainDisplayMode.Game)
                    {
                        player_attack_ranged = true;
                    }
                    return true;
            }

            #endregion

            if (key.Character == 'i')
            {
                mdm = MainDisplayMode.Inventory;
                menu_selection = 0;
                return true;
            }

            if (key.Character == 'c')
            {
                Item i = (Item)Select(SelectionMode.Item);
                //Creature c = (Creature)Select(SelectionMode.Creature);
                return false;
            }

            if (key.Character == 'q')
            {
                mdm = MainDisplayMode.Game;
                CancelDialog();
            }

            if (key.KeyCode == TCODKeyCode.F1)
            {
                tar_x = 1300;
                tar_y = 1300;
                tar_z = map.DropObject(1300, 1300, 49);
                return true;
            }

            if (key.KeyCode == TCODKeyCode.F2)
            {
                tar_x = 1300;
                tar_y = 1300;
                tar_z = map.DropObject(1300, 1300, 31);
                return true;
            }

            if (key.KeyCode == TCODKeyCode.F4)
            {
                map.AddItem((Item)player.Body.SeverRandomBodyPart());
            }

            if (key.KeyCode == TCODKeyCode.F5)
            {
                //DisplayDialog("This is a test message.Dabei wird in Deutschland die Maßeinheit cm zugrunde gelegt, während in Amerika und England die Maßeinheit inch (1 inch = 2,54 cm) für die Hemdgrößen von Herren verwendet wird. Zusätzlich wird die Ärmellänge im Handel gegebenenfalls mit Kurzarm oder Langarm angegeben, jedoch kann dabei die genaue Länge je nach Hersteller unterschiedlich ausfallen. Meist haben dann bei den Herrenhemden zwei aufeinander folgende Hemdgrößen (z.B. 39/40) den gleichen Schnitt des Oberkörpers.");
                SortedDictionary<char, string> test = new SortedDictionary<char, string>();
                test.Add('a', "Test item A");
                test.Add('b', "Test item B");
                test.Add('c', "Test item C");
                Out.SendDebugMessage("Response: " + DisplayInputDialog("Choose one test item. Press q to abort.", test));
            }

            if (key.KeyCode == TCODKeyCode.F6)
            {
                DisplayDialog(player.Body.MakeDescription());
            }

            if (key.KeyCode == TCODKeyCode.F9)
            {
                DisplayDialog(map.ComposeLookAt(player.X, player.Y, player.Z));
            }

            if (key.Character == 'l')
            {
                map.TEST_CIE = map.TEST_CIE ? false : true;
            }

            if (key.KeyCode == TCODKeyCode.F11)
            {
                List<LightSource> templ = new List<LightSource>();

                foreach (Item i in map.ItemList.GetValues())
                {
                    if (i.GetType() == typeof(LightSource))
                    {
                        LightSource l = (LightSource)i;
                        //l.SetPosition(l.X, l.Y, l.Z);
                        //l.SetLevel((byte)(l.LightRadius - 1));
                        l.SetRecalculate(true);
                        templ.Add(l);
                    }

                }

                foreach (LightSource ls in templ)
                {
                    map.ItemList.Remove(ls.GUID);
                    map.ItemList.Add(ls);
                }
            }

            if (key.KeyCode == TCODKeyCode.F12)
            {
                GC.Collect();
                return true;
            }

            if (key.KeyCode == TCODKeyCode.Escape)
            {
                endGame = true;
                return true;
            }
            if (key.KeyCode != TCODKeyCode.NoKey)
            {
                TCODConsole.root.print(0, 0, key.Character.ToString());
                TCODConsole.root.print(0, 1, key.KeyCode.ToString());
                return false;
            }

            return false;
        }
Example #2
0
File: Game.cs Project: bilwis/SH2RL
        public Object Select(SelectionMode mode, int abs_cur_x = 0, int abs_cur_y = 0)
        {
            mdm = MainDisplayMode.Cursor;
            cur_rel_x = WINDOW_WIDTH / 2;
            cur_rel_y = MAIN_HEIGHT / 2;
            lock_cursor = false;

            bool redraw = true;

            //Cursor position
            while (!lock_cursor)
            {
                var key = TCODConsole.checkForKeypress(1);

                if (key.KeyCode != TCODKeyCode.NoKey)
                {
                    if (HandleInput(key))
                    {
                        if (mdm == MainDisplayMode.Cursor)
                        {
                            moveCursor(tar_x, tar_y);
                        }

                        redraw = true;
                        turn++;
                    }
                }

                if (redraw)
                {
                    RenderAll();
                    redraw = false;
                }
                //if (effects_timer.ElapsedMilliseconds >= EFFECT_RATE_MS)
                //{
                //    //if (emit.abs_z == player.Z)
                //    //    emit.Tick((int)effects_timer.ElapsedMilliseconds);

                //    //RenderEffects();
                //    effects_timer.Restart();
                //}
            }

            mdm = MainDisplayMode.Game;

            int cur_abs_x, cur_abs_y;

            cur_abs_x = player.X - (WINDOW_WIDTH / 2) + cur_rel_x;
            cur_abs_y = player.Y - (MAIN_HEIGHT / 2) + cur_rel_y;

            int ch_int = 97;

            switch (mode)
            {
                case SelectionMode.Creature:
                    List<Creature> c_list = new List<Creature>();
                    c_list = map.ComposeCreatures(cur_abs_x, cur_abs_y, player.Z);
                    if (c_list.Count == 0)
                        return null;
                    if (c_list.Count == 1)
                        return c_list[0];

                    SortedDictionary<char, string> sel = new SortedDictionary<char, string>();
                    for (int i = 0; i < c_list.Count; i++)
                    {
                        sel.Add((char)(ch_int+i), c_list[i].Name);
                    }
                    int resp = DisplayInputDialog("Select creature: ", sel);
                    return c_list[resp];

                case SelectionMode.Item:
                    List<Item> i_list = new List<Item>();
                    i_list = map.ComposeItems(cur_abs_x, cur_abs_y, player.Z);
                    if (i_list.Count == 0)
                        return null;
                    if (i_list.Count == 1)
                        return i_list[0];

                    SortedDictionary<char, string> sel_i = new SortedDictionary<char, string>();
                    for (int i = 0; i < i_list.Count; i++)
                    {
                        sel_i.Add((char)(ch_int+i), i_list[i].Name);
                    }
                    int resp_i = DisplayInputDialog("Select item: ", sel_i);
                    return i_list[resp_i];
            }

            return null;
        }