add: assets, some changes
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
Binary file not shown.
+42
-6
@@ -17,6 +17,7 @@ pub fn main() -> Result<(), String> {
|
|||||||
.window("rust-sdl2 demo: Video", 1024, 600)
|
.window("rust-sdl2 demo: Video", 1024, 600)
|
||||||
.position_centered()
|
.position_centered()
|
||||||
.opengl()
|
.opengl()
|
||||||
|
.fullscreen()
|
||||||
.build()
|
.build()
|
||||||
.map_err(|e| e.to_string())?;
|
.map_err(|e| e.to_string())?;
|
||||||
|
|
||||||
@@ -195,6 +196,12 @@ pub fn main() -> Result<(), String> {
|
|||||||
.load_texture_bytes(include_bytes!("../assets/dog.png"))
|
.load_texture_bytes(include_bytes!("../assets/dog.png"))
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
|
textures.insert(
|
||||||
|
"heart",
|
||||||
|
texture_creator
|
||||||
|
.load_texture_bytes(include_bytes!("../assets/heart.png"))
|
||||||
|
.unwrap(),
|
||||||
|
);
|
||||||
|
|
||||||
let opts: Vec<&str> = textures.keys().map(|s| *s).collect();
|
let opts: Vec<&str> = textures.keys().map(|s| *s).collect();
|
||||||
|
|
||||||
@@ -251,26 +258,41 @@ pub fn main() -> Result<(), String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Find the most-exact match to show
|
||||||
let mut matches = vec![];
|
let mut matches = vec![];
|
||||||
let mut skip_chars = 0;
|
|
||||||
let mut chars = line.chars();
|
let mut chars = line.chars();
|
||||||
for i in 0..line.len() {
|
for i in 0..line.len() {
|
||||||
let part_line = find_matches(chars.as_str(), &opts);
|
let part_line = find_matches(chars.as_str(), &opts);
|
||||||
for part in part_line {
|
for part in part_line {
|
||||||
matches.push((i, part));
|
matches.push((i, part));
|
||||||
}
|
}
|
||||||
if matches.len() == 0 {
|
|
||||||
// Advance the line so we don't leak chars
|
|
||||||
skip_chars = i;
|
|
||||||
}
|
|
||||||
chars.next();
|
chars.next();
|
||||||
}
|
}
|
||||||
let matches: Vec<&str> = matches.into_iter().map(|(_, s)| s).collect();
|
let matches: Vec<&str> = matches.into_iter().map(|(_, s)| s).collect();
|
||||||
let show = if matches.len() > 0 { matches[0] } else { "" };
|
let show = if matches.len() > 0 { matches[0] } else { "" };
|
||||||
// Discard extra characters from line
|
|
||||||
|
// Discard extra characters from line; find any lines that could match
|
||||||
|
// and discard up to there
|
||||||
|
let mut skip_chars = 0;
|
||||||
|
let mut chars = line.chars();
|
||||||
|
for i in 0..line.len() {
|
||||||
|
let part_line = find_could_match(chars.as_str(), &opts);
|
||||||
|
if part_line.len() == 0 {
|
||||||
|
// Advance the line so we don't leak chars
|
||||||
|
skip_chars = i;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
chars.next();
|
||||||
|
}
|
||||||
let (_, tline) = line.split_at(skip_chars);
|
let (_, tline) = line.split_at(skip_chars);
|
||||||
line = String::from(tline);
|
line = String::from(tline);
|
||||||
|
|
||||||
|
|
||||||
|
//println!("Show {show}");
|
||||||
|
//println!("Matches {:?}", matches);
|
||||||
|
//println!("Line {line}");
|
||||||
|
|
||||||
canvas.clear();
|
canvas.clear();
|
||||||
if let Some(tex) = textures.get(show) {
|
if let Some(tex) = textures.get(show) {
|
||||||
canvas.copy(tex, None, None).unwrap();
|
canvas.copy(tex, None, None).unwrap();
|
||||||
@@ -295,3 +317,17 @@ fn find_matches<'a, 'b>(word: &'b str, opts: &'a [&'a str]) -> Vec<&'a str> {
|
|||||||
}
|
}
|
||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn find_could_match<'a, 'b>(word: &'b str, opts: &'a [&'a str]) -> Vec<&'a str> {
|
||||||
|
if word.len() == 0 {
|
||||||
|
return vec![];
|
||||||
|
}
|
||||||
|
let mut ret = vec![];
|
||||||
|
for opt in opts {
|
||||||
|
if opt.starts_with(word) {
|
||||||
|
ret.push(*opt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user