rust/lib-hwengine-future/src/ai/mod.rs
author unC0Rr
Fri, 22 Nov 2024 17:29:30 +0100
branchtransitional_engine
changeset 16040 6c5b3c576fc6
parent 16039 a236360669cc
child 16049 db18f1a30b0c
permissions -rw-r--r--
Add some progress on rust AI
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16040
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
     1
mod action;
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
     2
16039
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
     3
use std::collections::HashMap;
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
     4
use integral_geometry::Point;
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
     5
use crate::GameField;
16040
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
     6
use action::*;
16039
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
     7
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
     8
pub struct Target {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
     9
    point: Point,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    10
    health: i32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    11
    radius: u32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    12
    density: f32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    13
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    14
}
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    15
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    16
pub struct Hedgehog {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    17
    pub(crate) x: f32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    18
    pub(crate) y: f32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    19
}
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    20
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    21
pub struct AI<'a> {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    22
    game_field: &'a GameField,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    23
    targets: Vec<Target>,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    24
    team: Vec<Hedgehog>,
16040
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    25
    planned_actions: Option<Actions>,
16039
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    26
}
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    27
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    28
#[derive(Clone)]
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    29
struct Waypoint {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    30
    x: f32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    31
    y: f32,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    32
    ticks: usize,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    33
    damage: usize,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    34
    previous_point: Option<(usize, Action)>,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    35
}
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    36
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    37
#[derive(Default)]
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    38
pub struct Waypoints {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    39
    key_points: Vec<Waypoint>,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    40
    points: HashMap<Point, Waypoint>,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    41
}
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    42
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    43
impl Waypoints {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    44
    fn add_keypoint(&mut self, waypoint: Waypoint) {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    45
        let [x, y] = [waypoint.x, waypoint.y].map(|i| i as i32);
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    46
        let point = Point::new(x, y);
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    47
        self.key_points.push(waypoint.clone());
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    48
        self.points.insert(point, waypoint);
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    49
    }
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    50
}
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    51
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    52
impl<'a> AI<'a> {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    53
    pub fn new(game_field: &'a GameField) -> AI<'a> {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    54
        Self {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    55
            game_field,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    56
            targets: vec![],
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    57
            team: vec![],
16040
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    58
            planned_actions: None,
16039
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    59
        }
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    60
    }
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    61
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    62
    pub fn get_team_mut(&mut self) -> &mut Vec<Hedgehog> {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    63
        &mut self.team
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    64
    }
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    65
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    66
    pub fn walk(hedgehog: &Hedgehog) {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    67
        let mut stack = Vec::<usize>::new();
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    68
        let mut waypoints = Waypoints::default();
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    69
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    70
        waypoints.add_keypoint(Waypoint{
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    71
            x: hedgehog.x,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    72
            y: hedgehog.y,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    73
            ticks: 0,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    74
            damage: 0,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    75
            previous_point: None,
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    76
        });
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    77
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    78
        while let Some(wp) = stack.pop() {
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    79
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    80
        }
a236360669cc Start on AI implementation in rust
unC0Rr
parents:
diff changeset
    81
    }
16040
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    82
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    83
    pub fn have_plan(&self) -> bool {
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    84
        self.planned_actions.is_some()
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    85
    }
6c5b3c576fc6 Add some progress on rust AI
unC0Rr
parents: 16039
diff changeset
    86
}