示例#1
0
            public bool TryActivateObjectByPhase(ref PhaseEnabler phaseEnabler, ref ActivatableObject activatableObject)
            {
                int  phase   = phaseConfig.phase;
                bool enabled = phase == phaseEnabler.enabledPhase;

                if (activatableObject.linkedObjectActive == enabled)
                {
                    return(false);
                }

                activatableObject.linkedObjectActive = enabled;
                activatableObject.synchronized       = false;
                return(true);
            }
    void Awake()
    {
        _sourceAndTarget = GetComponent <ActivatableObjectSource>() != null;

        _sources = new List <ActivatableObjectSource>();

        _activatableObject = GetComponent <ActivatableObject>();

        GameObject[] sourceArr = GameObject.FindGameObjectsWithTag("AO");

        if (AO_ID <= 0)
        {
            return;
        }

        //Get all the targets that have the same ID
        foreach (GameObject source in sourceArr)
        {
            ActivatableObjectSource[] aosource = source.GetComponents <ActivatableObjectSource>();

            foreach (ActivatableObjectSource aos in aosource)
            {
                if (aos.AO_ID == AO_ID)
                {
                    _sources.Add(aos);
                }
            }
        }

        //Flip delegate calls if inverse
        if (inverse)
        {
            Activate = DeactivateObject;
        }
        else
        {
            Activate = ActivateObject;
        }

        if (inverse)
        {
            Deactivate = ActivateObject;
        }
        else
        {
            Deactivate = DeactivateObject;
        }
    }
        protected override void OnUpdate()
        {
            EntityManager.GetAllUniqueSharedComponentData(m_UniqueTypes);

            for (int sharedIndex = 0, numShared = m_UniqueTypes.Count; sharedIndex < numShared; ++sharedIndex)
            {
                ActivatableObject activatableObject = m_UniqueTypes[sharedIndex];
                m_MainGroup.SetFilter(activatableObject);
                if (m_MainGroup.CalculateLength() == 0)
                {
                    continue;
                }

                UpdateGameObjectActive(ref activatableObject);
            }
        }
        private static void UpdateGameObjectActive(ref ActivatableObject activatableObject)
        {
            if (activatableObject.synchronized)
            {
                return;
            }

            GameObject linkedObject = activatableObject.linkedObject;

            if (linkedObject == null)
            {
                return;
            }

            activatableObject.synchronized = true;
            linkedObject.SetActive(activatableObject.linkedObjectActive);
        }
示例#5
0
            public void ExecuteEach(EntityManager entityManager, ComponentGroup phaseEnablerGroup)
            {
                NativeArray <Entity> entities = phaseEnablerGroup.ToEntityArray(Allocator.TempJob);

                for (int entityIndex = 0, numEntities = entities.Length; entityIndex < numEntities; ++entityIndex)
                {
                    Entity            entity            = entities[entityIndex];
                    PhaseEnabler      phaseEnabler      = entityManager.GetComponentData <PhaseEnabler>(entity);
                    ActivatableObject activatableObject = entityManager.GetSharedComponentData <ActivatableObject>(entity);
                    if (!TryActivateObjectByPhase(ref phaseEnabler, ref activatableObject))
                    {
                        continue;
                    }

                    entityManager.SetSharedComponentData <ActivatableObject>(entity, activatableObject);
                }
                entities.Dispose();
            }
示例#6
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButton("Tap"))
        {
            //RaycastHit hit;
            //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            /*if (Physics.Raycast(ray, out hit))
            {
                Transform objectHit = hit.transform;
                this.GetComponent<Renderer>().material = mat2;*/

            Debug.DrawLine(Camera.main.transform.position, Camera.main.transform.forward * 100);

            //Check if there is an object directly ahead and that it has the activate script.
            RaycastHit hitInfo;

            Physics.Raycast(transform.position, transform.forward, out hitInfo, 1000);

            if (Physics.Raycast(transform.position, transform.forward, out hitInfo, 1000) && hitInfo.transform.gameObject.GetComponent<ActivatableObject>() != null)
            {
                if (hitInfo.transform.gameObject != activatedObject && activatedObject != null)
                {
                    activatedObject.Deactivate();
                }

                hitInfo.transform.gameObject.GetComponent<ActivatableObject>().Activate();
                activatedObject = hitInfo.transform.gameObject.GetComponent<ActivatableObject>();
            }

            /*else if (activatedObject != null)
            {
                activatedObject.Deactivate();
                activatedObject = null;
            }*/
        }

        else if (activatedObject != null)
        {
            activatedObject.Deactivate();
            activatedObject = null;
        }
    }
 public ActivatableObjectTests()
 {
     Obj = new ActivatableObject <TestParams>();
 }