summaryrefslogtreecommitdiff
path: root/src/purgatory.rs
blob: 27db35a8bd4f66814cd72290f1d44dc346b4c80c (plain)
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
77
78
79
80
81
82
83
84
85
86
87
88
89


use serde_json::json;
use specs::{
	DispatcherBuilder
};

use crate::{
	RoomId,
	Encyclopedia,
	room::Room,
	roomtemplate::RoomTemplate,
	systems::{
		Move,
		ControlInput,
		UpdateCooldowns,
		ControlAI,
	}
};

pub fn purgatory_id() -> RoomId {
	RoomId{name: String::from("+")}
}

pub fn create_purgatory<'a, 'b>(encyclopedia: &Encyclopedia) -> Room<'a, 'b> {
	let dispatcher = DispatcherBuilder::new()
		.with(UpdateCooldowns, "cool_down", &[])
		.with(ControlInput, "controlinput", &["cool_down"])
		.with(ControlAI, "controlai", &["cool_down"])
		.with(Move, "move", &["controlinput", "controlai"])
		.build();
	let mut room = Room::new(purgatory_id(), encyclopedia.clone(), Some(dispatcher));
	room.load_from_template(&RoomTemplate::from_json(&json!({
		"width": 15,
		"height": 20,
		"spawn": [7, 9],
		"field": [
			" YOU HAVE DIED ",
			"               ",
			"               ",
			"      +++      ",
			"    +++++++    ",
			"   +++++++++   ",
			"   +++++++++   ",
			"  +++++++++++  ",
			"  +++++++++++  ",
			"  +++++++++++  ",
			"   +++++++++   ",
			"   +++++++++   ",
			"    +++++++    ",
			"      +++      ",
			"               ",
			"               ",
			" RESTART CLIENT",
			"   TO RESPAWN  "
		],
		"mapping": {
			" ": [],
			"+": ["floor"],
			"A": [{"type": "letter", "args": ["A"]}],
			"B": [{"type": "letter", "args": ["B"]}],
			"C": [{"type": "letter", "args": ["C"]}],
			"D": [{"type": "letter", "args": ["D"]}],
			"E": [{"type": "letter", "args": ["E"]}],
			"F": [{"type": "letter", "args": ["F"]}],
			"G": [{"type": "letter", "args": ["G"]}],
			"H": [{"type": "letter", "args": ["H"]}],
			"I": [{"type": "letter", "args": ["I"]}],
			"J": [{"type": "letter", "args": ["J"]}],
			"K": [{"type": "letter", "args": ["K"]}],
			"L": [{"type": "letter", "args": ["L"]}],
			"M": [{"type": "letter", "args": ["M"]}],
			"N": [{"type": "letter", "args": ["N"]}],
			"O": [{"type": "letter", "args": ["O"]}],
			"P": [{"type": "letter", "args": ["P"]}],
			"Q": [{"type": "letter", "args": ["Q"]}],
			"R": [{"type": "letter", "args": ["R"]}],
			"S": [{"type": "letter", "args": ["S"]}],
			"T": [{"type": "letter", "args": ["T"]}],
			"U": [{"type": "letter", "args": ["U"]}],
			"V": [{"type": "letter", "args": ["V"]}],
			"W": [{"type": "letter", "args": ["W"]}],
			"X": [{"type": "letter", "args": ["X"]}],
			"Y": [{"type": "letter", "args": ["Y"]}],
			"Z": [{"type": "letter", "args": ["Z"]}]
		}
	})).unwrap()).unwrap();
	room
}