diff options
| author | metamuffin <metamuffin@disroot.org> | 2024-07-18 15:42:11 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2024-07-18 15:42:11 +0200 | 
| commit | 5f883c80e7fc63c97910d003c44aea814ab8a5d6 (patch) | |
| tree | b73a8c8f78db103671128e686136f08aa276923a /server/src/customer/pathfinding.rs | |
| parent | efc29c03f7be043ae8d037a93efce8cfa7c384cc (diff) | |
| download | hurrycurry-5f883c80e7fc63c97910d003c44aea814ab8a5d6.tar hurrycurry-5f883c80e7fc63c97910d003c44aea814ab8a5d6.tar.bz2 hurrycurry-5f883c80e7fc63c97910d003c44aea814ab8a5d6.tar.zst | |
reimplement customers as entity
Diffstat (limited to 'server/src/customer/pathfinding.rs')
| -rw-r--r-- | server/src/customer/pathfinding.rs | 109 | 
1 files changed, 0 insertions, 109 deletions
| diff --git a/server/src/customer/pathfinding.rs b/server/src/customer/pathfinding.rs deleted file mode 100644 index d1e1e997..00000000 --- a/server/src/customer/pathfinding.rs +++ /dev/null @@ -1,109 +0,0 @@ -/* -    Hurry Curry! - a game about cooking -    Copyright 2024 metamuffin - -    This program is free software: you can redistribute it and/or modify -    it under the terms of the GNU Affero General Public License as published by -    the Free Software Foundation, version 3 of the License only. - -    This program is distributed in the hope that it will be useful, -    but WITHOUT ANY WARRANTY; without even the implied warranty of -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -    GNU Affero General Public License for more details. - -    You should have received a copy of the GNU Affero General Public License -    along with this program.  If not, see <https://www.gnu.org/licenses/>. - -*/ -use hurrycurry_protocol::{ -    glam::{IVec2, Vec2}, movement::MovementBase, PacketS -}; -use log::trace; -use std::{ -    cmp::Ordering, -    collections::{BinaryHeap, HashMap, HashSet}, -}; - -pub struct Path(Vec<Vec2>); - -impl Path { -    pub fn execute_tick( -        &mut self, -        player: &mut MovementBase, -        walkable: &HashSet<IVec2>, -        dt: f32, -    ) -> PacketS { -        if let Some(next) = self.0.last().copied() { -            trace!("next {next}"); -            if next.distance(player.position) < if self.0.len() == 1 { 0.1 } else { 0.6 } { -                self.0.pop(); -            } -            player.update( -                &walkable, -                (next - player.position).normalize_or_zero() * 0.5, -                false, -                dt, -            ) -        } else { -            player.update(&walkable, Vec2::ZERO, false, dt) -        } -    } -    pub fn is_done(&self) -> bool { -        self.0.is_empty() -    } -} - -pub fn find_path(walkable: &HashSet<IVec2>, from: IVec2, to: IVec2) -> Option<Path> { -    #[derive(Debug, PartialEq, Eq)] -    struct Open(i32, IVec2, IVec2, i32); -    impl PartialOrd for Open { -        fn partial_cmp(&self, other: &Self) -> Option<Ordering> { -            self.0.partial_cmp(&other.0) -        } -    } -    impl Ord for Open { -        fn cmp(&self, other: &Self) -> Ordering { -            self.0.cmp(&other.0) -        } -    } - -    let mut visited = HashMap::new(); -    let mut open = BinaryHeap::new(); -    open.push(Open(1, from, from, 0)); - -    loop { -        let Some(Open(_, pos, f, distance)) = open.pop() else { -            return None; -        }; -        if visited.contains_key(&pos) { -            continue; -        } -        visited.insert(pos, f); -        if pos == to { -            break; -        } -        for dir in [IVec2::NEG_X, IVec2::NEG_Y, IVec2::X, IVec2::Y] { -            let next = pos + dir; -            if walkable.contains(&next) { -                open.push(Open( -                    -(distance + next.distance_squared(to).isqrt()), -                    next, -                    pos, -                    distance + 1, -                )); -            } -        } -    } - -    let mut path = Vec::new(); -    let mut c = to; -    loop { -        path.push(c.as_vec2() + 0.5); -        let cn = visited[&c]; -        if cn == c { -            break; -        } -        c = cn -    } -    Some(Path(path)) -} | 
