mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 12:42:22 -04:00
Make LevelPicker class more extensible
This commit is contained in:
parent
9ead72b356
commit
abfdcdf076
@ -21,29 +21,58 @@ using System.Threading;
|
|||||||
|
|
||||||
namespace MCGalaxy.Games
|
namespace MCGalaxy.Games
|
||||||
{
|
{
|
||||||
public class LevelPicker
|
public abstract class LevelPicker
|
||||||
{
|
{
|
||||||
public string QueuedMap;
|
public string QueuedMap;
|
||||||
public List<string> RecentMaps = new List<string>();
|
public List<string> RecentMaps = new List<string>();
|
||||||
public int VoteTime = 20;
|
|
||||||
public bool Voting;
|
public bool Voting;
|
||||||
|
|
||||||
internal string Candidate1 = "", Candidate2 = "", Candidate3 = "";
|
public abstract List<string> GetCandidateMaps(RoundsGame game);
|
||||||
internal int Votes1, Votes2, Votes3;
|
|
||||||
const int MIN_MAPS = 3;
|
public virtual string GetRandomMap(Random r, List<string> maps) {
|
||||||
|
int i = r.Next(0, maps.Count);
|
||||||
public void AddRecentMap(string map) {
|
string map = maps[i];
|
||||||
|
maps.RemoveAt(i);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public abstract string ChooseNextLevel(RoundsGame game);
|
||||||
|
|
||||||
|
|
||||||
|
public virtual void AddRecentMap(string map) {
|
||||||
if (RecentMaps.Count >= 20)
|
if (RecentMaps.Count >= 20)
|
||||||
RecentMaps.RemoveAt(0);
|
RecentMaps.RemoveAt(0);
|
||||||
RecentMaps.Add(map);
|
RecentMaps.Add(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clear() {
|
public virtual void Clear() {
|
||||||
QueuedMap = null;
|
QueuedMap = null;
|
||||||
RecentMaps.Clear();
|
RecentMaps.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public abstract bool HandlesMessage(Player p, string message);
|
||||||
|
|
||||||
|
public abstract void SendVoteMessage(Player p);
|
||||||
|
|
||||||
|
public abstract void ResetVoteMessage(Player p);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SimpleLevelPicker : LevelPicker
|
||||||
|
{
|
||||||
|
public int VoteTime = 20;
|
||||||
|
|
||||||
public string ChooseNextLevel(RoundsGame game) {
|
internal string Candidate1 = "", Candidate2 = "", Candidate3 = "";
|
||||||
|
internal int Votes1, Votes2, Votes3;
|
||||||
|
const int MIN_MAPS = 3;
|
||||||
|
|
||||||
|
public override List<string> GetCandidateMaps(RoundsGame game) {
|
||||||
|
return new List<string>(game.GetConfig().Maps);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public override string ChooseNextLevel(RoundsGame game) {
|
||||||
if (QueuedMap != null) return QueuedMap;
|
if (QueuedMap != null) return QueuedMap;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -90,7 +119,8 @@ namespace MCGalaxy.Games
|
|||||||
void DoLevelVote(IGame game) {
|
void DoLevelVote(IGame game) {
|
||||||
Voting = true;
|
Voting = true;
|
||||||
Player[] players = PlayerInfo.Online.Items;
|
Player[] players = PlayerInfo.Online.Items;
|
||||||
foreach (Player pl in players) {
|
foreach (Player pl in players)
|
||||||
|
{
|
||||||
if (pl.level != game.Map) continue;
|
if (pl.level != game.Map) continue;
|
||||||
SendVoteMessage(pl);
|
SendVoteMessage(pl);
|
||||||
}
|
}
|
||||||
@ -141,18 +171,17 @@ namespace MCGalaxy.Games
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static string GetRandomMap(Random r, List<string> maps) {
|
|
||||||
int i = r.Next(0, maps.Count);
|
public override bool HandlesMessage(Player p, string message) {
|
||||||
string map = maps[i];
|
if (!Voting) return false;
|
||||||
maps.RemoveAt(i);
|
|
||||||
return map;
|
return
|
||||||
|
Player.CheckVote(message, p, "1", "one", ref Votes1) ||
|
||||||
|
Player.CheckVote(message, p, "2", "two", ref Votes2) ||
|
||||||
|
Player.CheckVote(message, p, "3", "three", ref Votes3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual List<string> GetCandidateMaps(RoundsGame game) {
|
public override void SendVoteMessage(Player p) {
|
||||||
return new List<string>(game.GetConfig().Maps);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendVoteMessage(Player p) {
|
|
||||||
const string line1 = "&eLevel vote - type &a1&e, &b2&e or &c3";
|
const string line1 = "&eLevel vote - type &a1&e, &b2&e or &c3";
|
||||||
string line2 = "&a" + Candidate1 + "&e, &b" + Candidate2 + "&e, &c" + Candidate3;
|
string line2 = "&a" + Candidate1 + "&e, &b" + Candidate2 + "&e, &c" + Candidate3;
|
||||||
|
|
||||||
@ -165,19 +194,10 @@ namespace MCGalaxy.Games
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetVoteMessage(Player p) {
|
public override void ResetVoteMessage(Player p) {
|
||||||
p.SendCpeMessage(CpeMessageType.BottomRight3, "");
|
p.SendCpeMessage(CpeMessageType.BottomRight3, "");
|
||||||
p.SendCpeMessage(CpeMessageType.BottomRight2, "");
|
p.SendCpeMessage(CpeMessageType.BottomRight2, "");
|
||||||
p.SendCpeMessage(CpeMessageType.BottomRight1, "");
|
p.SendCpeMessage(CpeMessageType.BottomRight1, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HandlesMessage(Player p, string message) {
|
|
||||||
if (!Voting) return false;
|
|
||||||
|
|
||||||
return
|
|
||||||
Player.CheckVote(message, p, "1", "one", ref Votes1) ||
|
|
||||||
Player.CheckVote(message, p, "2", "two", ref Votes2) ||
|
|
||||||
Player.CheckVote(message, p, "3", "three", ref Votes3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ namespace MCGalaxy.Games
|
|||||||
List<string> maps = Picker.GetCandidateMaps(this);
|
List<string> maps = Picker.GetCandidateMaps(this);
|
||||||
|
|
||||||
if (maps == null || maps.Count == 0) return null;
|
if (maps == null || maps.Count == 0) return null;
|
||||||
return LevelPicker.GetRandomMap(new Random(), maps);
|
return Picker.GetRandomMap(new Random(), maps);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunGame() {
|
void RunGame() {
|
||||||
|
@ -61,7 +61,7 @@ namespace MCGalaxy.Modules.Games.CTF
|
|||||||
CtfTeam Blue = new CtfTeam("Blue", Colors.blue);
|
CtfTeam Blue = new CtfTeam("Blue", Colors.blue);
|
||||||
|
|
||||||
public static CTFGame Instance = new CTFGame();
|
public static CTFGame Instance = new CTFGame();
|
||||||
public CTFGame() { Picker = new LevelPicker(); }
|
public CTFGame() { Picker = new SimpleLevelPicker(); }
|
||||||
|
|
||||||
protected override string WelcomeMessage {
|
protected override string WelcomeMessage {
|
||||||
get { return "&9Capture the Flag &Sis running! Type &T/CTF go &Sto join"; }
|
get { return "&9Capture the Flag &Sis running! Type &T/CTF go &Sto join"; }
|
||||||
|
@ -46,7 +46,7 @@ namespace MCGalaxy.Modules.Games.Countdown
|
|||||||
public CountdownSpeed SpeedType;
|
public CountdownSpeed SpeedType;
|
||||||
|
|
||||||
public static CountdownGame Instance = new CountdownGame();
|
public static CountdownGame Instance = new CountdownGame();
|
||||||
public CountdownGame() { Picker = new LevelPicker(); }
|
public CountdownGame() { Picker = new SimpleLevelPicker(); }
|
||||||
|
|
||||||
public override void UpdateMapConfig() { }
|
public override void UpdateMapConfig() { }
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ namespace MCGalaxy.Modules.Games.LS
|
|||||||
static bool hooked;
|
static bool hooked;
|
||||||
|
|
||||||
public static LSGame Instance = new LSGame();
|
public static LSGame Instance = new LSGame();
|
||||||
public LSGame() { Picker = new LevelPicker(); }
|
public LSGame() { Picker = new SimpleLevelPicker(); }
|
||||||
|
|
||||||
public static LSData Get(Player p) {
|
public static LSData Get(Player p) {
|
||||||
object data;
|
object data;
|
||||||
|
@ -95,7 +95,7 @@ namespace MCGalaxy.Modules.Games.TW
|
|||||||
TNTImmuneFilter tntImmuneFilter;
|
TNTImmuneFilter tntImmuneFilter;
|
||||||
|
|
||||||
public static TWGame Instance = new TWGame();
|
public static TWGame Instance = new TWGame();
|
||||||
public TWGame() { Picker = new LevelPicker(); }
|
public TWGame() { Picker = new SimpleLevelPicker(); }
|
||||||
|
|
||||||
const string twExtrasKey = "MCG_TW_DATA";
|
const string twExtrasKey = "MCG_TW_DATA";
|
||||||
static TWData Get(Player p) {
|
static TWData Get(Player p) {
|
||||||
|
@ -77,7 +77,7 @@ namespace MCGalaxy.Modules.Games.ZS
|
|||||||
public override RoundsGameConfig GetConfig() { return Config; }
|
public override RoundsGameConfig GetConfig() { return Config; }
|
||||||
|
|
||||||
public static ZSGame Instance = new ZSGame();
|
public static ZSGame Instance = new ZSGame();
|
||||||
public ZSGame() { Picker = new LevelPicker(); }
|
public ZSGame() { Picker = new SimpleLevelPicker(); }
|
||||||
|
|
||||||
protected override string WelcomeMessage {
|
protected override string WelcomeMessage {
|
||||||
get { return "&2Zombie Survival &Sis running! Type &T/ZS go &Sto join"; }
|
get { return "&2Zombie Survival &Sis running! Type &T/ZS go &Sto join"; }
|
||||||
|
@ -77,9 +77,9 @@ namespace MCGalaxy.Modules.Warps
|
|||||||
|
|
||||||
if (p.level.name.CaselessEq(warp.Level)) {
|
if (p.level.name.CaselessEq(warp.Level)) {
|
||||||
p.SendPosition(warp.Pos, new Orientation(warp.Yaw, warp.Pitch));
|
p.SendPosition(warp.Pos, new Orientation(warp.Yaw, warp.Pitch));
|
||||||
p.Message("Sent you to waypoint/warp");
|
p.Message("Sent you to waypoint/warp {0}", warp.Name);
|
||||||
} else {
|
} else {
|
||||||
p.Message("Unable to send you to the warp as the map it is on is not loaded.");
|
p.Message("&WUnable to send you to the warp as the map it is on is not loaded.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ namespace MCGalaxy.Modules.Warps
|
|||||||
string line;
|
string line;
|
||||||
while ((line = r.ReadLine()) != null) {
|
while ((line = r.ReadLine()) != null) {
|
||||||
line = line.Trim();
|
line = line.Trim();
|
||||||
if (line.StartsWith("#") || !line.Contains(":")) continue;
|
if (line.IsCommentLine()) continue;
|
||||||
|
|
||||||
string[] parts = line.Split(':');
|
string[] parts = line.Split(':');
|
||||||
Warp warp = new Warp();
|
Warp warp = new Warp();
|
||||||
@ -116,7 +116,7 @@ namespace MCGalaxy.Modules.Warps
|
|||||||
warp.Pitch = byte.Parse(parts[6]);
|
warp.Pitch = byte.Parse(parts[6]);
|
||||||
warps.Add(warp);
|
warps.Add(warp);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Logger.LogError("Error loading warp from " + Filename, ex);
|
Logger.LogError("Error loading warp " + line + " from " + Filename, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,8 +126,9 @@ namespace MCGalaxy.Modules.Warps
|
|||||||
|
|
||||||
public void Save() {
|
public void Save() {
|
||||||
using (StreamWriter w = new StreamWriter(Filename)) {
|
using (StreamWriter w = new StreamWriter(Filename)) {
|
||||||
foreach (Warp warp in Items) {
|
foreach (Warp warp in Items)
|
||||||
w.WriteLine(warp.Name + ":" + warp.Level + ":" + warp.Pos.X + ":" +
|
{
|
||||||
|
w.WriteLine(warp.Name + ":" + warp.Level + ":" + warp.Pos.X + ":" +
|
||||||
warp.Pos.Y + ":" + warp.Pos.Z + ":" + warp.Yaw + ":" + warp.Pitch);
|
warp.Pos.Y + ":" + warp.Pos.Z + ":" + warp.Yaw + ":" + warp.Pitch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user