Some random small projects i made using https://github.com/willmexe/Game-Engine-CS
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}