예제 #1
0
        public override bool Check(ChangeCondition changeCondition, OutputChange outputChange, Agent agent,
                                   Entity target, Mapping mapping, float actualAmount)
        {
            int index = -1;

            if (changeCondition.valueType == ChangeCondition.ValueType.Selector)
            {
                index = (int)changeCondition.selector.GetFloatValue(agent, mapping);
            }
            else if (changeCondition.valueType == ChangeCondition.ValueType.IntValue)
            {
                index = changeCondition.intValue;
            }

            OutputChange targetOutputChange;

            if (index == -1)
            {
                targetOutputChange = outputChange.Previous(mapping.mappingType);
            }
            else
            {
                targetOutputChange = mapping.mappingType.outputChanges[index];
            }

            // Find this one in history to see it has run and if so what result was
            // TODO: Reliance on History is bad - Add a structure in Decider?  Or DeciderType?
            // Dictionary<(Mapping, OutputChange), Status> - reset it when new plan starts
            HistoryType.OutputChangeLog outputChangeLog = agent.historyType.GetOutputChangeLog(agent, mapping, targetOutputChange);

            if (outputChangeLog == null)
            {
                Debug.LogError(agent.name + ": PreviousOCStatusCCT - unable to find OC status in HistoryType OutputChangeLog.");
                return(false);
            }

            if (outputChangeLog.succeeded == changeCondition.boolValue)
            {
                return(true);
            }
            return(false);
        }
예제 #2
0
        public override bool MakeChange(Agent agent, Entity target, OutputChange outputChange, Mapping mapping, float actualAmount, out bool forceStop)
        {
            forceStop = false;

            Entity projectileEntity;

            if (outputChange.valueType == OutputChange.ValueType.None)
            {
                OutputChange previousOutputChange = outputChange.Previous(mapping.mappingType);
                projectileEntity = agent.inventoryType.GetFirstEntityofEntityType(agent, previousOutputChange.entityType);
            }
            else
            {
                projectileEntity = mapping.inventoryTargets[(int)outputChange.floatValue];
            }

            // Remove projectile from shooter's inventory
            InventoryType.Item projectileItem = agent.inventoryType.Remove(agent, projectileEntity);
            if (projectileItem == null)
            {
                Debug.LogError(agent.name + ": ThrowProjectileOCT - No projectile WorldObject - " + projectileEntity.name);
                return(false);
            }

            // TODO: This is strange here - Need a Throw method in InventoryType to handle this?
            projectileItem.entity.transform.parent  = null;
            projectileItem.entity.inEntityInventory = null;

            // Throw it
            Projectile projectile = projectileItem.entity.GetComponent <Projectile>();

            if (projectile == null)
            {
                Debug.LogError(agent.name + ": ThrowProjectileOCT - No Projectile Component on the projectile WorldObject " + projectileEntity.name);
                return(false);
            }
            projectile.target = target.gameObject;

            return(true);
        }
예제 #3
0
        public override bool MakeChange(Agent agent, Entity target, OutputChange outputChange, Mapping mapping, float actualAmount, out bool forceStop)
        {
            forceStop = false;

            OutputChange previousOutputChange = outputChange.Previous(mapping.mappingType);

            HistoryType.OutputChangeLog outputChangeLog = agent.historyType.GetOutputChangeLog(agent, mapping, previousOutputChange);

            if (outputChangeLog == null)
            {
                Debug.LogError(agent.name + ": PlaySoundFromATMOCT - unable to find OC status in HistoryType OutputChangeLog.");
                return(false);
            }

            int tagEnumIndex;

            if (outputChangeLog.succeeded)
            {
                tagEnumIndex = 1;
            }
            else
            {
                tagEnumIndex = 2;
            }

            // This uses mapping.target since target will be the agent if TargetType is ToSelf
            ActionType otherActionType = null;

            if (mapping.target is Agent targetAgent && targetAgent.decider.CurrentMapping != null)
            {
                otherActionType = targetAgent.decider.CurrentMapping.mappingType.actionType;
            }

            Entity           inventoryTarget = mapping.inventoryTargets[outputChange.inventoryTypeGroupMatchIndex];
            List <AudioClip> audioClips      = agent.inventoryType.GetItemSoundEffects(agent, mapping.mappingType.actionType, otherActionType,
                                                                                       ItemCondition.ModifierType.Used, false, tagEnumIndex);

            if (audioClips == null || audioClips.Count == 0)
            {
                Debug.Log(agent.name + ": MappingType: " + mapping.mappingType.name + " - PlaySoundFromATMOCT: No Audio Clips found.");
                return(false);
            }

            AudioClip audioClip = audioClips[Random.Range(0, audioClips.Count)];

            if (audioClip == null)
            {
                Debug.LogError(agent.name + ": MappingType: " + mapping.mappingType.name + " - PlaySoundFromATMOCT: Audio Clip is null.");
                return(false);
            }

            AudioSource audioSource = target.GetSFXGameObject((int)outputChange.floatValue).GetComponent <AudioSource>();

            if (audioSource == null)
            {
                if (mapping != null)
                {
                    Debug.LogError(agent.name + ": MappingType: " + mapping.mappingType.name + " - PlaySoundFromATMOCT: target " +
                                   target.name + " has no AudioSource Component.");
                }
                else
                {
                    Debug.LogError(agent.name + ": PlaySoundFromATMOCT: target " + target.name + " has no AudioSource Component.");
                }
                return(false);
            }

            if (!audioSource.isPlaying || !outputChange.boolValue)
            {
                audioSource.clip = audioClip;
                audioSource.loop = false;
                audioSource.Play();
            }

            return(true);
        }