Some random small projects i made using https://github.com/willmexe/Game-Engine-CS
at main 6.4 kB view raw
1using Proj.Modules.Input; 2using Proj.Modules.Ui; 3using Proj.Modules.Debug; 4using Proj.Modules.Graphics; 5using SDL2; 6using System; 7using System.Linq; 8using System.Collections.Generic; 9 10namespace Proj.Game { 11 public class text_editor : scene { 12 13 List<String> text = new List<string>(); 14 15 int current_line = 0; 16 int current_char = 0; 17 18 IntPtr line_texture; 19 SDL.SDL_Rect line_rect, letter_rect; 20 21 SDL.SDL_Rect header; 22 23 string font = "FiraCode"; 24 25 public text_editor() { 26 27 text.Add(""); 28 29 header.x = header.y = 0; 30 header.w = 1280; 31 header.h = 25; 32 } 33 34 public override void on_load() 35 { 36 game_manager.set_asset_pack("text_editor"); 37 38 font_handler.load_font("FiraCode", "FiraCode", 22); 39 font_handler.get_text_and_rect(game_manager.renderer, "a", font, out line_texture, out letter_rect, 0, 0); 40 } 41 42 public override void update() { 43 if(input.get_any_key_just_pressed() != -1) { 44 if(input.get_key_just_pressed(input.key_backspace, "general")) { 45 if(text[current_line].Length > 0) { 46 if(!input.get_key_pressed(input.key_lctrl)) { 47 var edit_text = text[current_line].Substring(0, current_char); 48 var remainder_text = text[current_line].Substring(current_char, text[current_line].Length - current_char); 49 50 if(edit_text.Length > 0) { 51 edit_text = edit_text.Substring(0, edit_text.Length - 1); 52 } 53 54 text[current_line] = edit_text + remainder_text; 55 current_char -= current_char > 0 ? 1 : 0; 56 } else { 57 var edit_text = text[current_line].Substring(0, current_char); 58 var remainder_text = text[current_line].Substring(current_char, text[current_line].Length - current_char); 59 60 var text_arr = edit_text.Split(" "); 61 text_arr = text_arr.SkipLast(1).ToArray(); 62 edit_text = string.Join(" ", text_arr); 63 64 text[current_line] = edit_text + remainder_text; 65 current_char = text[current_line].Length; 66 } 67 } 68 } else if(input.get_key_just_pressed(input.key_space, "general")) { 69 text[current_line] += " "; 70 current_char += 1; 71 } else if(input.get_key_just_pressed(input.key_return, "general")) { 72 text.Add(""); 73 current_line += 1; 74 current_char = text[current_line].Length; 75 } else if(input.get_key_just_pressed(input.key_tab, "general")) { 76 text[current_line] += " "; 77 } else if(input.get_key_just_pressed(input.key_up, "general")) { 78 if(current_line > 0) { 79 current_line -= 1; 80 current_char = text[current_line].Length; 81 } 82 } else if(input.get_key_just_pressed(input.key_down, "general")) { 83 if(current_line < text.Count - 1) { 84 current_line += 1; 85 current_char = text[current_line].Length; 86 } 87 } else if(input.get_key_just_pressed(input.key_left, "general")) { 88 if(current_char > 0) { 89 current_char -= 1; 90 } else { 91 if(current_line > 0) { 92 current_line -= 1; 93 current_char = text[current_line].Length; 94 } 95 } 96 } else if(input.get_key_just_pressed(input.key_right, "general")) { 97 current_char += current_char < text[current_line].Length ? 1 : 0; 98 } else { 99 if(input.input_state == "general") 100 if(input.get_key(input.get_any_key_just_pressed()).Length == 1) 101 text[current_line] += input.get_key(input.get_any_key_just_pressed()); 102 current_char += 1; 103 } 104 } 105 } 106 107 public override void render() { 108 109 draw.rect(game_manager.renderer, header, 100, 100, 100, 255, true); 110 111 int i = 0; 112 foreach(string line in text) { 113 114 font_handler.get_text_and_rect(game_manager.renderer, line, font, out line_texture, out line_rect, 0, 0, 110, 219, 115, 255); 115 SDL.SDL_Rect dest; 116 dest.x = 5; 117 dest.y = line_rect.h * i - i * 5 + 30; 118 dest.w = line_rect.w; 119 dest.h = line_rect.h; 120 SDL.SDL_RenderCopy(game_manager.renderer, line_texture, ref line_rect, ref dest); 121 122 if(i == current_line) { 123 var length = ""; 124 if(current_char < text[current_line].Length + 1) { 125 length = text[current_line].Substring(0, current_char); 126 } 127 font_handler.get_text_and_rect(game_manager.renderer, length, font, out line_texture, out line_rect, 0, 0, 110, 219, 115, 255); 128 129 SDL.SDL_Rect marker; 130 marker.x = line_rect.w + 7; 131 marker.y = dest.y + dest.h / 6; 132 marker.w = 2; 133 marker.h = dest.h - dest.h / 3; 134 draw.rect(game_manager.renderer, marker, 255, 255, 255, 255, true); 135 } 136 i++; 137 } 138 139 IntPtr header_texture; 140 SDL.SDL_Rect header_src, header_dest; 141 var header_text = "*unsaved*"; 142 font_handler.get_text_and_rect(game_manager.renderer, header_text, font, out header_texture, out header_src, 0, 0, 0, 0, 0, 255); 143 header_dest.x = 5; 144 header_dest.y = 0; 145 header_dest.w = header_src.w; 146 header_dest.h = header_src.h; 147 SDL.SDL_RenderCopy(game_manager.renderer, header_texture, ref header_src, ref header_dest); 148 } 149 } 150}