Example #1
0
        /// <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))
            {
            }
        }
Example #2
0
        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);
        }
Example #3
0
        public static string Dump(HexFlags value)
        {
            var assistant = new AssistantDumper();

            Dump(assistant, value);
            return(assistant.ToString());
        }
Example #4
0
        /// <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);
        }
Example #5
0
        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);
        }
Example #6
0
        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();
        }