예제 #1
0
 public void UseCompanionPower(ECompanionSlot inSlot)
 {
     if (CompanionSlotOccupied(inSlot) && _companions[inSlot].CanUseCompanionPower())
     {
         _companions[inSlot].UseCompanionPower();
     }
 }
예제 #2
0
 public void RequestCompanionDialogue(ECompanionSlot inSlot)
 {
     if (CompanionSlotOccupied(inSlot))
     {
         _companions[inSlot].RequestDialogue();
     }
 }
예제 #3
0
 public void ClearCompanion(ECompanionSlot inSlot)
 {
     if (CompanionSlotOccupied(inSlot))
     {
         _companions[inSlot].ClearLeader();
         _companions[inSlot] = null;
     }
 }
예제 #4
0
        public void RequestCompanionDialogue_RequestDialogueCalledOnCompanion()
        {
            const ECompanionSlot slot = ECompanionSlot.Primary;

            _set.SetCompanion(_companion, slot);
            _set.RequestCompanionDialogue(slot);

            Assert.IsTrue(_companion.RequestDialogueCalled);
        }
예제 #5
0
        // ICompanionSetInterface
        public void SetCompanion(ICompanionInterface inCompanion, ECompanionSlot inSlot)
        {
            if (inCompanion != null && !_companions.ContainsValue(inCompanion))
            {
                ClearCompanion(inSlot);

                _companions[inSlot] = inCompanion;
                inCompanion.SetLeader(gameObject);
            }
        }
예제 #6
0
        public void UseCompanionPower_CanUse_UsePowerCalledOnCompanion()
        {
            const ECompanionSlot slot = ECompanionSlot.Primary;

            _companion.CanUseCompanionPowerResult = true;
            _set.SetCompanion(_companion, slot);
            _set.UseCompanionPower(slot);

            Assert.IsTrue(_companion.UseCompanionPowerCalled);
        }
예제 #7
0
        private bool UpdateEntry(ECompanionSlot inSlot, PriorCompanionSlotState inPriorState)
        {
            var entryChanged = false;

            var currentCompanion = _companions[inSlot];

            if (currentCompanion != inPriorState.PriorCompanion)
            {
                entryChanged = true;

                inPriorState.PriorCompanion = currentCompanion;
                if (currentCompanion != null)
                {
                    inPriorState.PriorActive = currentCompanion.CanUseCompanionPower();
                    inPriorState.ConvertDataToState(currentCompanion.GetCompanionData());
                }
            }
            else
            {
                if (currentCompanion != null)
                {
                    var newData = currentCompanion.GetCompanionData();

                    if (Math.Abs(newData.PowerCooldown - inPriorState.PriorCooldown) > 0.04f)
                    {
                        entryChanged = true;
                        inPriorState.PriorCooldown = newData.PowerCooldown;
                    }

                    if (newData.PowerUseCount != inPriorState.PriorUseCount)
                    {
                        entryChanged = true;
                        inPriorState.PriorUseCount = newData.PowerUseCount;
                    }

                    if (newData.Image != inPriorState.PriorUIIcon)
                    {
                        entryChanged             = true;
                        inPriorState.PriorUIIcon = newData.Image;
                    }

                    var newActive = currentCompanion.CanUseCompanionPower();

                    if (newActive != inPriorState.PriorActive)
                    {
                        entryChanged             = true;
                        inPriorState.PriorActive = newActive;
                    }
                }
            }

            return(entryChanged);
        }
예제 #8
0
        private EInputHandlerResult OnDialogueInput(ECompanionSlot slot, bool isPressed)
        {
            if (_companionSet != null)
            {
                if (isPressed)
                {
                    _companionSet.RequestCompanionDialogue(slot);
                }

                return(EInputHandlerResult.Handled);
            }

            return(EInputHandlerResult.Unhandled);
        }
예제 #9
0
        private EInputHandlerResult OnPowerInput(ECompanionSlot slot, bool isPressed)
        {
            if (_companionSet != null)
            {
                if (isPressed)
                {
                    _companionSet.UseCompanionPower(slot);
                }

                return(EInputHandlerResult.Handled);
            }

            return(EInputHandlerResult.Unhandled);
        }
예제 #10
0
        public void Update_CompanionChanges_UpdateMessageSent()
        {
            const ECompanionSlot slot = ECompanionSlot.Primary;
            var messageSpy            = new UnityTestMessageHandleResponseObject <CompanionSlotsUpdatedMessage>();

            var handle =
                UnityMessageEventFunctions.RegisterActionWithDispatcher <CompanionSlotsUpdatedMessage>(_set.gameObject,
                                                                                                       messageSpy.OnResponse);

            _set.SetCompanion(_companion, slot);
            _set.TestUpdate();

            Assert.IsTrue(messageSpy.ActionCalled);
            Assert.AreEqual(_companion, messageSpy.MessagePayload.Updates[slot].PriorCompanion);
            Assert.AreEqual(_companion.CanUseCompanionPowerResult, messageSpy.MessagePayload.Updates[slot].PriorActive);
            Assert.AreEqual(_companion.GetCompanionDataResult.PowerCooldown, messageSpy.MessagePayload.Updates[slot].PriorCooldown);
            Assert.AreSame(_companion.GetCompanionDataResult.Image, messageSpy.MessagePayload.Updates[slot].PriorUIIcon);
            Assert.AreEqual(_companion.GetCompanionDataResult.PowerUseCount, messageSpy.MessagePayload.Updates[slot].PriorUseCount);

            UnityMessageEventFunctions.UnregisterActionWithDispatcher(_set.gameObject, handle);
        }
예제 #11
0
        // ~ICompanionSetInterface

        private bool CompanionSlotOccupied(ECompanionSlot inSlot)
        {
            return(_companions.ContainsKey(inSlot) && _companions[inSlot] != null);
        }
예제 #12
0
 public void RequestCompanionDialogue(ECompanionSlot inSlot)
 {
     RequestCompanionDialogueSlotResult = inSlot;
 }
예제 #13
0
 public void UseCompanionPower(ECompanionSlot inSlot)
 {
     UseCompanionPowerSlotResult = inSlot;
 }
예제 #14
0
 public void ClearCompanion(ECompanionSlot inSlot)
 {
     ClearCompanionSlotResult = inSlot;
 }
예제 #15
0
 public void SetCompanion(ICompanionInterface inCompanion, ECompanionSlot inSlot)
 {
     SetCompanionResult     = inCompanion;
     SetCompanionSlotResult = inSlot;
 }