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
use std::io::Result as Res;

use endio::Serialize;
use endio_bit::BEBitWriter;
use lu_packets_derive::{BitVariantTests, ReplicaSerde};

use crate::common::LVec;
use crate::world::Vector3;
use crate::world::gm::client::RebuildChallengeState;
use super::{ComponentConstruction, ComponentProtocol, ComponentSerialization};
use super::scripted_activity::ActivityUserInfo;

#[derive(Debug, PartialEq, ReplicaSerde)]
pub struct QuickbuildConstructionInfo {
	pub current_state: RebuildChallengeState,
	pub show_reset_effect: bool,
	pub has_activator: bool,
	pub duration_timer: f32,
	pub total_incomplete_time: f32,
	pub unknown: Option<u32>,
	pub activator_position: Vector3,
	pub reposition_player: bool,
}

#[derive(BitVariantTests, Debug, PartialEq, ReplicaSerde)]
pub struct QuickbuildConstruction {
	pub activity_user_infos: Option<LVec<u32, ActivityUserInfo>>,
	pub quickbuild_construction_info: Option<QuickbuildConstructionInfo>,
}

impl ComponentConstruction for QuickbuildConstruction {
	fn ser(&self, writer: &mut BEBitWriter<Vec<u8>>) -> Res<()> {
		self.serialize(writer)
	}
}

#[derive(Debug, PartialEq, ReplicaSerde)]
pub struct QuickbuildSerializationInfo {
	pub current_state: RebuildChallengeState,
	pub show_reset_effect: bool,
	pub has_activator: bool,
	pub duration_timer: f32,
	pub total_incomplete_time: f32,
}

#[derive(BitVariantTests, Debug, PartialEq, ReplicaSerde)]
pub struct QuickbuildSerialization {
	pub activity_user_infos: Option<LVec<u32, ActivityUserInfo>>,
	pub quickbuild_serialization_info: Option<QuickbuildSerializationInfo>,
}

impl ComponentSerialization for QuickbuildSerialization {
	fn ser(&self, writer: &mut BEBitWriter<Vec<u8>>) -> Res<()> {
		self.serialize(writer)
	}
}

pub struct QuickbuildProtocol;

impl ComponentProtocol for QuickbuildProtocol {
	type Construction = QuickbuildConstruction;
	type Serialization = QuickbuildSerialization;
}