Beispiel #1
0
            [TestCase] public void InfiniteFeedIllegal()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.A].Feeds(TestStatus.A);
                Assert.Throws <InvalidDataException>(() => checkedRules.CreateStatusTracker(testObj));
            }
Beispiel #2
0
 [SetUp] public void Initialize()
 {
     StatusConverter <TestStatus, int> .Convert = x => (int)x;
     rules   = new StatusSystem <TestObj, TestStatus>();
     testObj = new TestObj();
     tracker = rules.CreateStatusTracker(testObj);
 }
Beispiel #3
0
            [TestCase] public void ParserConditions()
            {
                var           pRules     = new StatusSystem <TestObj, TestStatus>();
                List <string> ruleTextAB = new List <string> {
                    "a==1 feeds b",
                    "a!=1 feeds b",
                    "a>=1 feeds b",
                    "a<=1 feeds b",
                    "a>1 feeds b",
                    "a<1 feeds b"
                };
                List <string> ruleTextCD = new List <string> {
                    "c==5 feeds d 3",
                    "c>=5 feeds d 3",
                    "c>5 feeds d 3",
                };

                pRules.ParseRulesText(ruleTextAB);                 // Works.
                pRules.ParseRulesText(ruleTextCD);                 // Works.
                //These all throw because they try to feed 3 even when c is 0:
                Assert.Throws <InvalidDataException>(() => pRules.ParseRulesText(new List <string> {
                    "c!=5 feeds d 3"
                }));
                Assert.Throws <InvalidDataException>(() => pRules.ParseRulesText(new List <string> {
                    "c<=5 feeds d 3"
                }));
                Assert.Throws <InvalidDataException>(() => pRules.ParseRulesText(new List <string> {
                    "c<5 feeds d 3"
                }));
            }
Beispiel #4
0
            [TestCase] public void SuppressionCycleIllegal()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.A].Suppresses(TestStatus.B);
                checkedRules[TestStatus.B].Suppresses(TestStatus.C);
                checkedRules[TestStatus.C].Suppresses(TestStatus.A);
                Assert.Throws <InvalidDataException>(() => checkedRules.CreateStatusTracker(testObj));
            }
Beispiel #5
0
            [TestCase] public void OverlappingEnumValueWarning()
            {
                StatusConverter <OverlapOne, int> .Convert = i => (int)i;
                StatusConverter <OverlapTwo, int> .Convert = i => (int)i;
                var checkedRules = new StatusSystem <TestObj, OverlapOne, OverlapTwo>();
                var errors       = checkedRules.GetRuleErrorsAndWarnings();

                Assert.AreEqual(1, errors.Count);                 // Just one warning: Shared value (4).
                Assert.IsTrue(errors[0].StartsWith("WARNING"));
                checkedRules.CreateStatusTracker(testObj);        // No exception.
            }
            [TestCase] public void SingleStatusParserOperations()
            {
                var baseRules = new StatusSystem <TestObj, RGB>();

                baseRules.ParseRulesText(rgb1);
                var baseTracker = baseRules.CreateStatusTracker(testObj);

                baseTracker.Add(RGB.Green, 3);
                baseTracker.Add(RGB.Red);
                baseTracker.Add(RGB.Green, 4);
                Assert.AreEqual(3, baseTracker[RGB.Blue]);                 // 1 from red, 2 from green.
            }
Beispiel #7
0
            [TestCase] public void InconsistentAggregatorWarning()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.B].Extends(TestStatus.A);
                checkedRules[TestStatus.A].Aggregator = checkedRules.MaximumOrZero;
                var errors = checkedRules.GetRuleErrorsAndWarnings();

                Assert.AreEqual(1, errors.Count);                 // Just one warning.
                Assert.IsTrue(errors[0].StartsWith("WARNING"));
                checkedRules.CreateStatusTracker(testObj);        // No exception.
            }
Beispiel #8
0
            [TestCase] public void MutualSuppressionWarning()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.A].Suppresses(TestStatus.B);
                checkedRules[TestStatus.B].Suppresses(TestStatus.A);
                var errors = checkedRules.GetRuleErrorsAndWarnings();

                Assert.AreEqual(1, errors.Count);                 // Just one warning.
                Assert.IsTrue(errors[0].StartsWith("WARNING"));
                checkedRules.CreateStatusTracker(testObj);        // No exception.
            }
Beispiel #9
0
            [TestCase] public void ReversedSuppressionCycleDetected()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.A].Prevents(TestStatus.B);
                checkedRules[TestStatus.B].Prevents(TestStatus.C);                 // One cycle in one direction.
                checkedRules[TestStatus.C].Prevents(TestStatus.A);
                checkedRules[TestStatus.A].Cancels(TestStatus.C);
                checkedRules[TestStatus.B].Cancels(TestStatus.A);                  // Another in the opposite direction.
                checkedRules[TestStatus.C].Cancels(TestStatus.B);
                Assert.AreEqual(2, checkedRules.GetRuleErrorsAndWarnings().Count); // One warning for each.
                checkedRules.CreateStatusTracker(testObj);                         // No exception.
            }
Beispiel #10
0
            [TestCase] public void BrokenSuppressionCycleOkay()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.A].Suppresses(TestStatus.B);
                checkedRules[TestStatus.B].Suppresses(TestStatus.C);
                checkedRules[TestStatus.C].Suppresses(TestStatus.A);
                checkedRules[TestStatus.C].Cancels(TestStatus.A);
                var errors = checkedRules.GetRuleErrorsAndWarnings();

                Assert.AreEqual(1, errors.Count);                 // Just one warning.
                Assert.IsTrue(errors[0].StartsWith("OKAY"));
                checkedRules.CreateStatusTracker(testObj);        // No exception.
            }
Beispiel #11
0
            [TestCase] public void BasicParserOperations()
            {
                Assert.Throws <System.IO.InvalidDataException>(() => new StatusSystem <TestObj>().ParseRulesText(rps1));
                StatusConverter <RPS, int> .Convert = i => (int)i;
                StatusConverter <RGB, int> .Convert = i => (int)i;
                var pRules = new StatusSystem <TestObj, RPS, RGB>();

                pRules.ParseRulesText(rps1.Concat(rgb1).Concat(rps_rgb1));
                var pTracker = pRules.CreateStatusTracker(testObj);

                pTracker.Add(RPS.Rock);
                pTracker.Add(RGB.Red);
                Assert.AreEqual(0, pTracker[RPS.Rock]);                 // Red fed Paper which cancelled Rock.
            }
Beispiel #12
0
            [TestCase] public void SingleErrorForLargeSuppressionCycle()
            {
                var checkedRules = new StatusSystem <TestObj, TestStatus>();

                checkedRules[TestStatus.A].Suppresses(TestStatus.B);
                checkedRules[TestStatus.B].Suppresses(TestStatus.C);
                checkedRules[TestStatus.C].Suppresses(TestStatus.D);
                checkedRules[TestStatus.D].Extends(TestStatus.E);
                checkedRules[TestStatus.E].Suppresses(TestStatus.F);                 // 5 suppressions in 7 links.
                checkedRules[TestStatus.F].Feeds((TestStatus)55);
                checkedRules[55].Suppresses(TestStatus.A);
                var errors = checkedRules.GetRuleErrorsAndWarnings();

                Assert.AreEqual(1, errors.Count);                 // Just one error.
            }
Beispiel #13
0
            [TestCase] public void LoneStatusSetBasedOnModes()
            {
                var           pRules   = new StatusSystem <TestObj, TestStatus>();
                List <string> ruleText = new List <string> {
                    "a; b; c",
                    "d",
                    "bool:",
                    "e; f",
                    "a"
                };

                pRules.ParseRulesText(ruleText);
                Assert.AreSame(pRules.Bool, pRules[TestStatus.E].Aggregator);
                Assert.AreSame(pRules.Bool, pRules[TestStatus.F].Aggregator);
                Assert.AreSame(pRules.Bool, pRules[TestStatus.A].Aggregator); // All 3 set to bool.
                pRules.CreateStatusTracker(testObj);                          // No exception.
            }
Beispiel #14
0
            public enum OtherStatus { One = 8, Two };             // (Carefully) start at 8 because TestStatus ends at 7.
            [TestCase] public void BasicMultipleEnumOperations()
            {
                StatusConverter <OtherStatus, int> .Convert = x => (int)x;
                var mRules = new StatusSystem <TestObj, OtherStatus, TestStatus>();                // Int base. Using OtherStatus and TestStatus.

                mRules[TestStatus.A].SingleSource = true;
                mRules[OtherStatus.One].Cancels(TestStatus.A);
                mRules[TestStatus.F].Feeds(OtherStatus.One);
                mRules[OtherStatus.Two].Feeds(3, TestStatus.F);
                var mTracker = mRules.CreateStatusTracker(testObj);

                mTracker[TestStatus.A] = 22;
                Assert.AreEqual(22, mTracker[TestStatus.A]);
                mTracker.Add(OtherStatus.Two, 5);
                Assert.AreEqual(5, mTracker[OtherStatus.Two]);
                Assert.AreEqual(3, mTracker[TestStatus.F]);
                Assert.AreEqual(3, mTracker[OtherStatus.One]);
                Assert.AreEqual(0, mTracker[TestStatus.A]);
            }
Beispiel #15
0
        private static void OnProcessExit(object sender, EventArgs e)
        {
            if (!StatusSystem.noActivityChanging)
            {
                StatusSystem.ForceStatus(ActivityType.Playing, "Offline", UserStatus.AFK, true);
            }

            if (MemorySystem.canSave)
            {
                Task.Run(async() => {
                    var task = (instance?.systems?.FirstOrDefault(s => s?.GetType() == typeof(MemorySystem)) as MemorySystem)?.Save();

                    if (task != null)
                    {
                        await task;
                    }
                }).Wait();
            }

            Console.WriteLine("Tried saving on quit.");
        }
Beispiel #16
0
        public override int GetHashCode()
        {
            var hashCode = 175354043;

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(ExamID);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(ExamName);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Context);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(ContextType);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Subject);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(BeginDate);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(DueDate);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(TimeFrom);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(TimeTo);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Grade);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(GradeDescription);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(InstructorString);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(Status);

            hashCode = hashCode * -1521134295 + StatusSystem.GetHashCode();
            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(SemesterID);

            hashCode = hashCode * -1521134295 + EqualityComparer <string> .Default.GetHashCode(SemesterName);

            return(hashCode);
        }
        public IStateSpace UpdateSpace(GameTime gameTime, ContentManager content, GraphicsDeviceManager graphics, KeyboardState prevKeyboardState, MouseState prevMouseState, GamePadState prevGamepadState, Camera camera, ref GameSettings gameSettings)
        {
            IStateSpace nextStateSpace = this;


            //Check to see if the player has died
            if (stateSpaceComponents.Entities.Where(x => (x.ComponentFlags & ComponentMasks.Player) == ComponentMasks.Player).Count() == 0)
            {
                //Game End, High Score, and Save Data handling
            }
            else
            {//Check to see if the next level needs to be loaded
                if (stateSpaceComponents.PlayerComponent.GoToNextFloor || Keyboard.GetState().IsKeyDown(Keys.LeftShift))
                {
                    nextStateSpace = new RandomlyGeneratedStateSpace(new CaveGeneration(), 75, 125);
                    PlayerComponent player = stateSpaceComponents.PlayerComponent;
                    player.GoToNextFloor    = false;
                    player.PlayerJustLoaded = true;
                    stateSpaceComponents.PlayerComponent = player;
                    LevelChangeSystem.RetainPlayerStatistics(stateComponents, stateSpaceComponents);
                    LevelChangeSystem.RetainNecessaryComponents(stateComponents, stateSpaceComponents);
                }
                //Toggle Inventory Menu
                if (Keyboard.GetState().IsKeyDown(Keys.I) && prevKeyboardState.IsKeyUp(Keys.I) && !showObserver)
                {
                    showInventory = !showInventory;
                }
                else if (Keyboard.GetState().IsKeyDown(Keys.Enter) && prevKeyboardState.IsKeyUp(Keys.Enter) && !showInventory)
                {
                    //If observer exists, remove it and add input component to player(s), otherwise, remove input component from all players and create an observer.
                    if (ObserverSystem.CreateOrDestroyObserver(stateSpaceComponents))
                    {
                        showObserver = true;
                    }
                    else
                    {
                        showObserver = false;
                    }
                }

                //Actions to complete if the inventory is open
                if (showInventory)
                {
                    //Deletion and Cleanup
                    if (stateSpaceComponents.EntitiesToDelete.Count > 0)
                    {
                        foreach (Guid entity in stateSpaceComponents.EntitiesToDelete)
                        {
                            stateSpaceComponents.DestroyEntity(entity);
                        }
                        stateSpaceComponents.EntitiesToDelete.Clear();
                    }
                    showInventory = InventorySystem.HandleInventoryInput(stateSpaceComponents, gameTime, prevKeyboardState, Keyboard.GetState());
                }
                //Actions to complete if inventory is not open
                if (showObserver)
                {
                    ObserverComponent observer = stateSpaceComponents.ObserverComponent;
                    observer.Observed = new List <Guid>();
                    stateSpaceComponents.ObserverComponent = observer;
                    InputMovementSystem.HandleDungeonMovement(stateSpaceComponents, graphics, gameTime, prevKeyboardState, prevMouseState, prevGamepadState, camera, dungeonGrid, dungeonDimensions);
                    CameraSystem.UpdateCamera(camera, gameTime, stateSpaceComponents, DevConstants.Grid.CellSize, prevKeyboardState);
                    ObserverSystem.HandleObserverFindings(stateSpaceComponents, Keyboard.GetState(), prevKeyboardState, dungeonGrid);
                    stateSpaceComponents.InvokeDelayedActions();
                }
                else if (!showInventory && !showObserver)
                {
                    //Deletion and Cleanup
                    DestructionSystem.UpdateDestructionTimes(stateSpaceComponents, gameTime);

                    //Non-turn-based
                    AnimationSystem.UpdateFovColors(stateSpaceComponents, gameTime);
                    AnimationSystem.UpdateOutlineColors(stateSpaceComponents, gameTime);
                    MovementSystem.UpdateMovingEntities(stateSpaceComponents, gameTime);
                    MovementSystem.UpdateIndefinitelyMovingEntities(stateSpaceComponents, gameTime);

                    //Movement and Reaction
                    InputMovementSystem.HandleDungeonMovement(stateSpaceComponents, graphics, gameTime, prevKeyboardState, prevMouseState, prevGamepadState, camera, dungeonGrid, dungeonDimensions);
                    CameraSystem.UpdateCamera(camera, gameTime, stateSpaceComponents, DevConstants.Grid.CellSize, prevKeyboardState);
                    TileSystem.RevealTiles(ref dungeonGrid, dungeonDimensions, stateSpaceComponents);
                    TileSystem.IncreaseTileOpacity(ref dungeonGrid, dungeonDimensions, gameTime, stateSpaceComponents);
                    MessageDisplaySystem.ScrollMessage(prevKeyboardState, Keyboard.GetState(), stateSpaceComponents);
                    DungeonMappingSystem.ShouldPlayerMapRecalc(stateSpaceComponents, dungeonGrid, dungeonDimensions, ref mapToPlayer);

                    //AI and Combat
                    AISystem.AICheckDetection(stateSpaceComponents);
                    AISystem.AIMovement(stateSpaceComponents, dungeonGrid, dungeonDimensions, mapToPlayer);
                    InventorySystem.TryPickupItems(stateSpaceComponents, dungeonGrid);
                    AISystem.AIUpdateVision(stateSpaceComponents, dungeonGrid, dungeonDimensions);
                    CombatSystem.HandleMeleeCombat(stateSpaceComponents, DevConstants.Grid.CellSize);
                    AISystem.AICheckFleeing(stateSpaceComponents);

                    //End-Of-Turn Status Effects
                    StatusSystem.RegenerateHealth(stateSpaceComponents);
                    StatusSystem.ApplyBurnDamage(stateSpaceComponents, dungeonGrid);
                    TileSystem.SpreadFire(ref dungeonGrid, dungeonDimensions, stateSpaceComponents);

                    //Resetting Systems
                    if (stateSpaceComponents.PlayerComponent.PlayerJustLoaded || stateSpaceComponents.PlayerComponent.PlayerTookTurn)
                    {
                        PlayerComponent player = stateSpaceComponents.PlayerComponent;
                        player.PlayerJustLoaded = false;
                        player.PlayerTookTurn   = false;
                        stateSpaceComponents.PlayerComponent = player;
                    }
                    CollisionSystem.ResetCollision(stateSpaceComponents);
                    if (stateSpaceComponents.EntitiesToDelete.Count > 0)
                    {
                        foreach (Guid entity in stateSpaceComponents.EntitiesToDelete)
                        {
                            stateSpaceComponents.DestroyEntity(entity);
                        }
                        stateSpaceComponents.EntitiesToDelete.Clear();
                    }
                    stateSpaceComponents.InvokeDelayedActions();
                }
            }

            return(nextStateSpace);
        }
Beispiel #18
0
 /// <summary>
 /// Extracts status information from the server's response.
 /// </summary>
 /// <param name='status'>
 /// The structure to be dissected.
 /// </param>
 internal Status(System.Collections.Generic.IDictionary<string, object> status)
 {
     this.Process = new StatusProcess((System.Collections.Generic.IDictionary<string, object>)status["process"]);
     this.System = new StatusSystem((System.Collections.Generic.IDictionary<string, object>)status["system"]);
 }