/// <summary> /// Updates the level. /// </summary> /// <param name="player">The index of the player.</param> /// <param name="pos">The new position of the player.</param> public void Update(int player, HexPoint pos) { // Update Positions Players[player].LastPosition = Players[player].Position; Players[player].Position = pos; HexGrid <Hex> nextGrid = Level.Grid.Copy(); for (int i = 0; i < Level.Grid.Count; i++) { Hex hex = Level.Grid.Values.ElementAt(i); UpdateHex(hex, player, ref nextGrid); } Level.Grid = nextGrid; HexFlags flags = Level.Grid[Players[player].Position].Value.GetFlags(Level.Data); // If player is on a deadly or solid tile, reset if (flags.HasFlag(HexFlags.Deadly) || flags.HasFlag(HexFlags.Solid)) { Players[player].IsDead = true; } if (flags.HasFlag(HexFlags.Goal)) { } }
public int FromBytes(byte[] bytes, int startIndex) { int count = 0; ID = bytes[startIndex + count]; count += 1; HexFlags = (HexFlags)bytes[startIndex + count]; count += 1; RenderFlags = (RenderFlags)bytes[startIndex + count]; count += 1; Texture = bytes[startIndex + count]; count += 1; AnimationLength = bytes[startIndex + count]; count += 1; AnimationSpeed = bytes[startIndex + count]; count += 1; AnimationPhase = bytes[startIndex + count]; count += 1; int changes = bytes[startIndex + count]; count += 1; Changes = new List <HexAction>(); for (int i = 0; i < changes; i++) { HexAction change = new HexAction(); count += change.FromBytes(bytes, startIndex + count); Changes.Add(change); } return(count); }
public static string Dump(HexFlags value) { var assistant = new AssistantDumper(); Dump(assistant, value); return(assistant.ToString()); }
/// <summary> /// The combined HexFlags of the types. /// </summary> public HexFlags GetFlags(HexData[] data) { HexFlags flags = 0; foreach (HexData hexData in GetTypes(data)) { flags |= hexData.HexFlags; } return(flags); }
private List <List <HexPoint> > Solve(List <HexPoint> moves, Level level, int movesLeft, List <HexPoint> prevMoves) { List <List <HexPoint> > results = new List <List <HexPoint> >(); if (logMoves) { possibleMoves[movesLeft - 1]++; } foreach (var move in moves) { Level copy = level;//.Copy(); Engine e = new Engine(copy); e.Update(0, move); HexFlags flags = copy.Grid[move].Value.GetFlags(level.Data); if (flags.HasFlag(HexFlags.Deadly) || flags.HasFlag(HexFlags.Solid)) { continue; } if (flags.HasFlag(HexFlags.Goal)) { results.Add(prevMoves.Append(move).ToList()); } if (movesLeft == 1) { continue; } List <List <HexPoint> > result = Solve(e.GetPossibleMoves(move), copy, movesLeft - 1, prevMoves.Append(move).ToList()); if (result != null) { results.AddRange(result); } } return(results); }
static internal void Dump(AssistantDumper assistant, HexFlags value, bool withSeparator = false) { assistant.IncrementDepth(); if (assistant.MaximumDepthExceeded()) { return; } assistant.AddStartObject(); assistant.AddType("Dogen.TestModels.CSharpModel.HexFlags", true /*withSeparator*/); string valueAsString = "Unsupported Value"; switch (value) { case HexFlags.None: valueAsString = "None"; break; case HexFlags.Top: valueAsString = "Top"; break; case HexFlags.Bottom: valueAsString = "Bottom"; break; case HexFlags.Left: valueAsString = "Left"; break; case HexFlags.Right: valueAsString = "Right"; break; } assistant.Add("value", valueAsString); assistant.AddEndObject(); assistant.DecrementDepth(); }