~starkingdoms/starkingdoms

ref: ba254ec74e51495678ac09f06342403ab08434a2 starkingdoms/crates/client/src/networking/mod.rs -rw-r--r-- 3.6 KiB
ba254ec7 — ghostly_zsh sync, i guess 8 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
use std::collections::HashMap;

use bevy_ecs::{entity::Entity, event::Events, query::With, world::World};
use starkingdoms_common::{packet::Packet, PartType, PlanetType};

use crate::ecs::{Camera, Planet, Player, RecvPacket, Rotation, Scale, SendPacket, Shear, SpriteBundle, SpriteTexture, Translation};

#[cfg(target_arch = "wasm32")]
#[path = "ws_wasm.rs"]
pub mod ws;
#[cfg(not(target_arch = "wasm32"))]
#[path = "ws_native.rs"]
pub mod ws;

pub fn process_packets(
    world: &mut World,
    send_packet_events: &mut Events<SendPacket>,
    recv_packet_events: &mut Events<RecvPacket>,
    planet_types: &mut HashMap<PlanetType, (Entity, u32)>,
) {
    use Packet::*;
    let mut recv_cursor = recv_packet_events.get_cursor();
    for recv in recv_cursor.read(&recv_packet_events) {
        match &recv.0 {
            PartPositions { parts } => {
                for (id, part) in parts {
                    if part.part_type == PartType::Hearty {
                        let mut player_query = world.query_filtered::<(&mut Translation, &mut Rotation), With<Player>>();
                        let mut camera = world.resource_mut::<Camera>();
                        camera.x = part.transform.x;
                        camera.y = part.transform.y;
                        tracing::info!("camera real {:?}", camera);
                        for (mut translation, mut rotation) in player_query.iter_mut(world) {
                            translation.x = part.transform.x;
                            translation.y = part.transform.y;
                            rotation.radians = part.transform.rot;
                            tracing::info!("part real {:?}", translation);
                        }
                        tracing::info!("part {:?}", part.transform);
                    }
                }
            }
            PlanetPositions { planets } => {
                for (server_id, planet) in planets {
                    let mut planet_query = world.query_filtered::<(&mut Translation, &mut Rotation), With<Planet>>();
                    if !planet_types.contains_key(&planet.planet_type) {
                        let entity = world.spawn(SpriteBundle {
                            position: Translation { x: planet.transform.x, y: planet.transform.y },
                            shear: Shear { x: 0.0, y: 0.0 },
                            rotation: Rotation { radians: planet.transform.rot },
                            scale: Scale { width: planet.radius, height: planet.radius },
                            texture: SpriteTexture {
                                texture: match planet.planet_type {
                                    PlanetType::Sun => "sun",
                                    PlanetType::Mercury => "mercury",
                                    PlanetType::Venus => "venus",
                                    PlanetType::Earth => "earth",
                                    PlanetType::Moon => "moon",
                                    PlanetType::Mars => "mars",
                                    PlanetType::Jupiter => "jupiter",
                                    PlanetType::Saturn => "saturn",
                                    PlanetType::Uranus => "uranus",
                                    PlanetType::Neptune => "neptune",
                                    PlanetType::Pluto => "pluto",
                                }.to_string()
                            },
                        });
                        planet_types.insert(planet.planet_type, (entity.id(), *server_id));
                        tracing::info!("{:?}", planet.transform);
                    }
                }
            }
            _ => {}
        }
    }
}