コード例 #1
0
        public static EntityBase ParseInteractiveObject(string[] inputs)
        {
            EntityBase            entity          = null;
            InteractiveObjectType interactiveType = InteractiveObjectType.NONE;

            string entityType = inputs[0]; // BUSH, from wood1 it can also be SPAWN
            int    x          = int.Parse(inputs[1]);
            int    y          = int.Parse(inputs[2]);
            int    radius     = int.Parse(inputs[3]);

            if (Enum.TryParse(entityType, out interactiveType))
            {
                switch (interactiveType)
                {
                case InteractiveObjectType.BUSH:
                    entity = new Bush(x, y, radius);
                    break;

                case InteractiveObjectType.SPAWN:
                    entity = new Spawn(x, y);
                    break;
                }
            }

            return(entity);
        }
コード例 #2
0
        public void Init()
        {
            this.PuzzleEventsManager = GameObject.FindObjectOfType<PuzzleEventsManager>();
            var puzzleCOnfigurationmanager = GameObject.FindObjectOfType<PuzzleGameConfigurationManager>();
            var NPCAIManagerContainer = GameObject.FindObjectOfType<NPCAIManagerContainer>();
            NPCAIManagerContainer.OnNPCAiManagerCreated(this);
            var interactiveObjectContainer = GameObject.FindObjectOfType<InteractiveObjectContainer>();
            var playerManagerDataRetriever = GameObject.FindObjectOfType<PlayerManagerDataRetriever>();
            var coreConfigurationManager = GameObject.FindObjectOfType<CoreConfigurationManager>();
            var aiPositionsManager = GameObject.FindObjectOfType<AIPositionsManager>();
            var animationConfiguration = coreConfigurationManager.AnimationConfiguration();

            var rigidBody = GetComponent<Rigidbody>();
            var animator = GetComponentInChildren<Animator>();
            this.objectCollider = GetComponent<Collider>();
            this.interactiveObjectSharedData = GetComponent<InteractiveObjectSharedDataType>();

            this.NPCAIDestinationContext = new NPCAIDestinationContext();

            agent = GetComponent<NavMeshAgent>();
            agent.updatePosition = false;
            agent.updateRotation = false;

            var aiBehaviorInherentData = puzzleCOnfigurationmanager.AIComponentsConfiguration()[AiID];
            var PuzzleEventsManager = GameObject.FindObjectOfType<PuzzleEventsManager>();

            NpcFOVRingManager = new NpcInteractionRingManager(this);

            AIDestinationMoveManager = new NPCAIDestinationMoveManager(interactiveObjectSharedData.InteractiveObjectSharedDataTypeInherentData.TransformMoveManagerComponent, agent, this.SendOnDestinationReachedEvent);
            NPCSpeedAdjusterManager = new NPCSpeedAdjusterManager(agent);

            this.puzzleAIBehavior = this.GetComponent<GenericPuzzleAIBehavior>();
            var aIBheaviorBuildInputData = new AIBheaviorBuildInputData(agent, aiBehaviorInherentData.AIComponents, OnFOVChange, PuzzleEventsManager, playerManagerDataRetriever, interactiveObjectContainer, this.AiID, this.objectCollider, this.ForceTickAI, aiPositionsManager);
            ((GenericPuzzleAIBehavior)this.puzzleAIBehavior).Init(agent, (GenericPuzzleAIComponents)aIBheaviorBuildInputData.aIComponents, aIBheaviorBuildInputData.OnFOVChange, aIBheaviorBuildInputData.ForceUpdateAIBehavior,
                    aIBheaviorBuildInputData.PuzzleEventsManager, aIBheaviorBuildInputData.InteractiveObjectContainer, aIBheaviorBuildInputData.aiID, aIBheaviorBuildInputData.aiCollider, aIBheaviorBuildInputData.PlayerManagerDataRetriever, interactiveObjectSharedData.InteractiveObjectSharedDataTypeInherentData.TransformMoveManagerComponent, aIBheaviorBuildInputData.AIPositionsManager);
            ContextMarkVisualFeedbackManager = new ContextMarkVisualFeedbackManager(this, NpcFOVRingManager, puzzleCOnfigurationmanager);
            AnimationVisualFeedbackManager = new AnimationVisualFeedbackManager(animator, animationConfiguration);
            LineVisualFeedbackManager = new LineVisualFeedbackManager(this);
            NPCAIAnimationManager = new NPCAIAnimationManager(animator, animationConfiguration);

            this.GetComponent<InRangeColliderTracker>().IfNotNull((InRangeColliderTracker) => InRangeColliderTracker.Init());

            //Sight listeners
            this.GetComponent<InteractiveObjectType>().IfNotNull((InteractiveObjectType) => InteractiveObjectType.GetEnabledOrDisabledModule<ObjectSightModule>().IfNotNull((ObjectSightModule) => ObjectSightModule.RegisterSightTrackingListener(this)));

            //Intiialize with 0 time
            this.TickWhenTimeFlows(0, 0);
        }