Inheritance: MonoBehaviour
    // Update is called once per frame. It is the main workhorse function for frame updates.
    void Update()
    {
        if(Input.GetButtonDown("Fire3"))
        {
            //Rigidbody bulletInstance = Instantiate(m_BulletPrefab, m_BulletSpawnPoint.position, m_BulletSpawnPoint.rotation) as Rigidbody;
            //bulletInstance.velocity = m_BulletVelocity * m_BulletSpawnPoint.up; //(up = y-axis)

            // Get a bullet and initialize it before activating it.
            //m_Bullet = GameManager.instance.m_BulletPool.Pop();
            m_Bullet = m_BulletPool.Pop();
            Rigidbody rigidbody = m_Bullet.GetComponent<Rigidbody>();
            m_Bullet.transform.position = m_BulletSpawnPoint.position;
            m_Bullet.transform.rotation = m_BulletSpawnPoint.rotation;
            rigidbody.velocity = m_BulletVelocity * m_BulletSpawnPoint.up; //(up: y-axis)
            m_Bullet.gameObject.SetActive(true);

            //Invoke("Repool", m_BulletLife);
            //StartCoroutine(Repool(m_Bullet, m_BulletLife));

            // Change the clip to the firing clip and play it.
            //m_ShootingAudio.clip = m_ShootClip;
            m_ShootingAudio.Play();
            //SoundManager.instance.PlaySingle(m_ShootClip);
        }
    }
Exemple #2
0
 public void ReturnLight(Poolable instance)
 {
     if (!instance.exists) {
         throw new Exception("Returning the non-existent object to pool!");
     }
     instance.exists = false;
     lightPool.Add(instance);
 }
    // Play the system, then recycle it when over.
    void OnEnable()
    {
        m_explosionPS.Play();
        m_explosionAudio.Play();

        // Get Poolable component here. GObject won't have it on Awake!
        m_Poolable = GetComponent<Poolable>();
        Invoke("PoolItem", m_explosionPS.startLifetime);
    }
    private void GoToSleep()
    {
        if (poolable == null) {
            poolable = GetComponent<Poolable>();
        }

        if (poolable != null) {
            poolable.PoolBack();
        } else {
            Destroy(gameObject);
        }
    }
Exemple #5
0
 public void Return(Poolable instance)
 {
     if (instance.gameObject == sample) {
         Debug.LogError("Sample returning to pool!");
     }
     if (!instance.exists) {
         throw new Exception("Returning the non-existent object to pool!");
     }
     instance.exists = false;
     Disappear(instance);
     pool.Add(instance);
 }
    public static void Enqueue(Poolable sender)
    {
        if (sender == null || sender.isPooled || !pools.ContainsKey(sender.key))
            return;

        PoolData data = pools[sender.key];
        if (data.pool.Count >= data.maxCount)
        {
            GameObject.Destroy(sender.gameObject);
            return;
        }

        data.pool.Enqueue(sender);
        sender.isPooled = true;
        sender.transform.SetParent(Instance.transform);
        sender.gameObject.SetActive(false);
    }
    // Pool and deactivate an item for reuse, or destroy it if pool is full.
    public void Push(Poolable obj)
    {
        if(obj == null || obj.isPooled)
            return;

        // Pool is full! Destroy the object.
        if(m_Pool.Count >= m_MaxCount)
        {
            GameObject.Destroy(obj.gameObject);
            return;
        }

        // Pool the object for reuse.
        m_Pool.Add(obj);
        obj.isPooled = true;
        //obj.transform.SetParent(Instance.transform);
        obj.gameObject.SetActive(false);
    }
Exemple #8
0
    private IEnumerable <IPoolable> InstantiateRay(InteractiveData interactiveData)
    {
        var ray = Instantiate(rayPrefab, transform.position, transform.rotation);

        ray.name = "Lazer Ray";

        var rayComponent = ray.GetComponent <LazerRay>();

        rayComponent.SetData(interactiveData);

        ray.GetComponent <ILinkWithShower>().EffectShower = EffectShower;

        var poolable = new Poolable(ray);

        poolable.OnFloated.Subscribe
        (
            () =>
        {
            ray.transform.position = transform.position;
            ray.transform.rotation = transform.rotation;

            float y            = movingObject.Speed.y;
            movingObject.Speed = movingObject.Speed.Change(y: 0);
            movingObject.UpdateSpeedAndDelta();

            rayComponent.StartCoroutine(CoroutineT.Single
                                        (
                                            () =>
            {
                ray.SetActive(false);
                movingObject.Speed = movingObject.Speed.Change(y: y);
                movingObject.UpdateSpeedAndDelta();
            },
                                            rayLivingTime
                                        ));
        }
        );

        yield return(poolable);
    }
Exemple #9
0
    /// <summary>
    /// Update this instance.
    /// </summary>
    void FixedUpdate()
    {
        if (target == null)
        {
            return;
        }

        counter += Time.fixedDeltaTime;
        if (counter >= lifeTime)
        {
            counter = 0;
            Poolable.TryPool(gameObject);
        }
        // Add acceleration
        speed += Time.fixedDeltaTime * speedUpOverTime;
        if (target != null)
        {
            aimPoint = GetPenetrationPoint(target.position);
        }
        // Calculate distance from firepoint to aim
        Vector2 originDistance = aimPoint - originPoint;
        // Calculate remaining distance
        Vector2 distanceToAim = aimPoint - (Vector2)myVirtualPosition;

        // Move towards aim
        myVirtualPosition = Vector2.Lerp(originPoint, aimPoint, counter * speed / originDistance.magnitude);
        // Add ballistic offset to trajectory
        transform.position = AddBallisticOffset(originDistance.magnitude, distanceToAim.magnitude);
        // Rotate bullet towards trajectory
        LookAtDirection2D((Vector2)transform.position - myPreviousPosition);
        myPreviousPosition = transform.position;
        sprite.enabled     = true;
        // Close enough to hit
        if (distanceToAim.magnitude <= hitDistance)
        {
            // Destroy bullet
            //Destroy(gameObject);
            Poolable.TryPool(gameObject);
        }
    }
    public void PoolElement(GameObject toPool)
    {
        Poolable poolable = toPool.GetComponent <Poolable>();

        if (poolable != null)
        {
            if (m_AllPools.ContainsKey(poolable.keyPrefab))
            {
                m_AllPools[poolable.keyPrefab].SetAvailable(toPool);
            }
            else
            {
                Debug.LogWarning("Try To Pool No Prefab Key available => Destroy !");
                Destroy(toPool);
            }
        }
        else
        {
            Debug.LogWarning("Try To Pool but no Poolable !");
            Destroy(toPool);
        }
    }
Exemple #11
0
        /// <summary>
        /// Spawn our effect
        /// </summary>
        protected virtual void OnFired()
        {
            if (effectPrefab != null)
            {
                m_SpawnedEffect = Poolable.TryGetPoolable(effectPrefab);
                m_SpawnedEffect.transform.parent   = null;
                m_SpawnedEffect.transform.position = followTransform.position;
                m_SpawnedEffect.transform.rotation = followTransform.rotation;

                // Make sure to disable timer if it's on initially, so it doesn't destroy this object
                m_DestroyTimer = m_SpawnedEffect.GetComponent <SelfDestroyTimer>();
                if (m_DestroyTimer != null)
                {
                    m_DestroyTimer.enabled = false;
                }
                m_Resetter = m_SpawnedEffect.GetComponent <PoolableEffect>();
                if (m_Resetter != null)
                {
                    m_Resetter.TurnOnAllSystems();
                }
            }
        }
Exemple #12
0
    private Transform GetPlane()
    {
        Transform planeClone = null;

        if (currentPlane.GetComponent <AircraftThatWorksWithWeapon>())
        {
            //Debug.Log("1");
            planeClone = Poolable.Get <AircraftThatWorksWithWeapon>(() => Poolable.CreateObj <AircraftThatWorksWithWeapon>(currentPlane.gameObject), aircraftSpawnPoint.position, transform.rotation, null).transform;
        }
        else if (currentPlane.GetComponent <StrikeFighterThatWorksWithWeapon>())
        {
            //Debug.Log("2");
            planeClone = Poolable.Get <StrikeFighterThatWorksWithWeapon>(() => Poolable.CreateObj <StrikeFighterThatWorksWithWeapon>(currentPlane.gameObject), aircraftSpawnPoint.position, transform.rotation, null).transform;
        }
        else if (currentPlane.GetComponent <StrategicBomberThatWorksWithWeapon>())
        {
            //Debug.Log("3");
            planeClone = Poolable.Get <StrategicBomberThatWorksWithWeapon>(() => Poolable.CreateObj <StrategicBomberThatWorksWithWeapon>(currentPlane.gameObject), aircraftSpawnPoint.position, transform.rotation, null).transform;
        }

        return(planeClone);
    }
Exemple #13
0
    private void Start()
    {
        for (int a = 0; a < 60; a++)
        {
            Poolable poolable = ObjectPool.Instance.Aquire <Poolable>(gameObject: this._prefab);

            Debug.Log($"Pool InstanceId: {poolable.Pool.InstanceId}");
            Debug.Log($"GameObject InstanceId: {poolable.GameObject.GetInstanceID()}");

            ObjectPool.Instance.Release(poolable: poolable);
        }

        for (int a = 0; a < 30; a++)
        {
            Poolable poolable = ObjectPool.Instance.Aquire <Poolable>(gameObject: this._prefab);

            Debug.Log($"Pool InstanceId: {poolable.Pool.InstanceId}");
            Debug.Log($"GameObject InstanceId: {poolable.GameObject.GetInstanceID()}");

            poolable.GameObject.transform.position = new Vector3(x: 235.3f, y: 0.0f, z: 32.3f);
        }
    }
    private IEnumerable <IPoolable <Vector2> > InstansiateHittingEffect()
    {
        var hittingEffect = Instantiate(hittingEffectPrefab);

        hittingEffect.name = "HittingEffect";

        var particle = hittingEffect.GetComponent <ParticleSystem>();
        var poolable = new Poolable <Vector2>(hittingEffect);

        poolable.OnFloated.Subscribe
        (
            position =>
        {
            hittingEffect.transform.position = position;
            float angle = Mathf.Rad2Deg * Mathf.Atan2(distanceToPlayer.y, distanceToPlayer.x);
            hittingEffect.transform.eulerAngles = hittingEffect.transform.eulerAngles.Change(x: -angle);
            particle.Play();
        }
        );

        yield return(poolable);
    }
Exemple #15
0
    private void Start()
    {
        targPos = transform.position;
        if (!gm && FindObjectOfType <GameMaster>())
        {
            gm = FindObjectOfType <GameMaster>();
        }
        if (!anim)
        {
            anim = GetComponent <Animator>();
        }
        if (!rb)
        {
            rb = GetComponent <Rigidbody2D>();
        }
        if (!firePos)
        {
            firePos = transform.Find("FirePoint").transform;
        }

        arrowPool = arrowPref.GetComponent <Poolable>();
    }
Exemple #16
0
    public Poolable GetObject(System.Action <Poolable> initialize = null, Transform parent = null, bool instantiateInWorldSpace = true)
    {
        Poolable poolable = null;

        if (freeObjects.Count <= 0)
        {
            poolable = Spawn(parent, instantiateInWorldSpace);
        }
        else
        {
            while (freeObjects.Count > 0 && poolable == null)
            {
                poolable = freeObjects.Dequeue();
            }

            if (freeObjects.Count <= 0 && poolable == null)
            {
                return(GetObject(initialize));
            }
        }

#if UNITY_EDITOR
        Debug.Assert(!freeObjects.Contains(poolable));
#endif

        usedObjects.Add(poolable);

        foreach (IResettable resettable in poolable.gameObject.GetComponentsInChildren(typeof(IResettable)))
        {
            resettable.OnReset();
        }

        initialize?.Invoke(poolable);
        poolable.transform.parent = parent;
        poolable.gameObject.SetActive(true);

        return(poolable);
    }
Exemple #17
0
    public override FireState Fire()
    {
        if (target)
        {
            if (!target.gameObject.activeInHierarchy)
            {
                target = null;
                return(FireState.Failed);
            }

            if (Time.time > fireTimer)
            {
                Transform missileClone = Poolable.Get <GuidedSSMissile>(() => Poolable.CreateObj <GuidedSSMissile>(projectilePrefab.gameObject), new Vector3(spawnLocation.position.x + Random.Range(-0.2f, 0.2f), spawnLocation.position.y, spawnLocation.position.z), Quaternion.identity).transform;
                int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
                missileClone.gameObject.layer = layerValue;
                TrailRenderer projTrail = missileClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                projTrail.Clear();
                GuidedSSMissile missile = missileClone.GetComponent <GuidedSSMissile>();
                missile.target       = target;
                missile.whatIsTarget = whatIsTarget;
                missile.BoostStage();
                fireTimer = delayBetweenFire + Time.time;
                fireSound.Play();
                //soundMngr.PlayEnviroSound(spawnLocation.gameObject, "missile1", 10f);

                return(FireState.Fired);
            }
            else
            {
                return(FireState.OnDelay);
            }
        }
        else
        {
            return(FireState.Failed);
        }
    }
Exemple #18
0
    public override FireState Fire()
    {
        bool isTargVisual = CheckIfLookingAtTarget(lookCheckRange);

        if (isTargVisual)
        {
            if (Time.time > fireTimer)
            {
                Transform missileClone = Poolable.Get <GuidedAAMissile>(() => Poolable.CreateObj <GuidedAAMissile>(projectilePrefab.gameObject), spawnLocation.position, owner.rotation).transform;
                int       layerValue   = whatAreOurProjectiles.layermask_to_layer();
                missileClone.gameObject.layer = layerValue;
                GuidedAAMissile missile = missileClone.GetComponent <GuidedAAMissile>();
                missile.whatIsTarget = whatIsTarget;
                missile.target       = target;
                TrailRenderer projTrail = missileClone.GetComponent <TrailRenderer>();
                projTrail.material = layerValue == 8 ? t1Mat : t2Mat;
                projTrail.enabled  = true;
                fireTimer          = delayBetweenFire + Time.time + Random.Range(-delayBetweenFire / 5f, delayBetweenFire / 3.4f);
                fireSound.Play();

                return(FireState.Fired);
            }
            else
            {
                if (!target.gameObject.activeInHierarchy)
                {
                    target = null;
                    return(FireState.Failed);
                }

                return(FireState.OnDelay);
            }
        }
        else
        {
            return(FireState.Failed);
        }
    }
    // Called when hit by a bullet trigger collider.
    void OnTriggerEnter(Collider other)
    {
        // other = Bullet. Inactivate it until it repools itself.
        other.gameObject.SetActive(false);

        if (gameObject.CompareTag("AsteroidBig"))
        {
            // Split the big asteroid into 2 smaller ones.
            for (int i = 0; i < 2; i++)
            {
                //GameObject a1 = Instantiate(m_SmallAsteroidPrefab);
                Poolable          small     = GameManager.instance.m_AsteroidSmallPool.Pop();
                AsteroidBehaviour behaviour = small.GetComponent <AsteroidBehaviour>();
                small.transform.position = gameObject.transform.position;
                small.gameObject.SetActive(true);
                behaviour.SetRandomForces();
            }

            // Recycle this (big) asteroid.
            GameManager.instance.m_AsteroidBigPool.Push(m_Poolable);
        }
        else // "AsteroidSmall"
        {
            // Recycle this (small) asteroid.
            GameManager.instance.m_AsteroidSmallPool.Push(m_Poolable);
        }

        // Play the explosion sound clip via SM (because object will be destroyed).
        // Could also use  AudioSource.PlayClipAtPoint()
        //SoundManager.instance.PlaySingle(m_ExplosionClip);

        // Activate an explosion.
        SpawnExplosion();
        //Poolable explosion = GameManager.instance.m_ExplosionPool.Pop();
        //explosion.transform.position = transform.position;
        //explosion.transform.Rotate(new Vector3(0f, 0f, 360f * Random.value));
        //explosion.gameObject.SetActive(true);
    }
Exemple #20
0
        public void TestDefragment61()
        {
            Scene             scene    = new Scene();
            Settings          settings = new Settings();
            Pooler <Poolable> pooler   = new Pooler <Poolable>(settings, scene, 5);
            Poolable          p1       = pooler.Enable();
            Poolable          p2       = pooler.Enable();
            Poolable          p3       = pooler.Enable();
            Poolable          p4       = pooler.Enable();
            Poolable          p5       = pooler.Enable();

            p1.Disable();
            p3.Disable();
            Assert.AreEqual(p1, pooler[0], "in method Defragment, line 72");
            Assert.AreEqual(p2, pooler[1], "in method Defragment, line 73");
            Assert.AreEqual(p3, pooler[2], "in method Defragment, line 74");
            Assert.AreEqual(p4, pooler[3], "in method Defragment, line 75");
            Assert.AreEqual(p5, pooler[4], "in method Defragment, line 76");
            try
            {
                Assert.AreEqual(p5, pooler[5], "in method Defragment, line 77");
                Assert.Fail("Did not throw IndexOutOfRangeException in method Defragment on line 76");
            }
            catch (IndexOutOfRangeException)
            {
            }
            Assert.AreEqual(4, pooler.Index, "in method Defragment, line 78");
            Assert.AreEqual(true, pooler[pooler.Index].Active, "in method Defragment, line 79");
            pooler.Defragment();
            Assert.AreEqual(3, pooler.Index, "in method Defragment, line 81");
            Assert.AreEqual(false, pooler[pooler.Index].Active, "in method Defragment, line 82");
            Assert.AreEqual(p5, pooler[0], "in method Defragment, line 83");
            Assert.AreEqual(p2, pooler[1], "in method Defragment, line 84");
            Assert.AreEqual(p4, pooler[2], "in method Defragment, line 85");
            Assert.AreEqual(p3, pooler[3], "in method Defragment, line 86");
            Assert.AreEqual(p1, pooler[4], "in method Defragment, line 87");
        }
Exemple #21
0
    void InstantiateBox(string _alimentName, AlimentState _alimentState, int posFree, int finalPos, int viewID)
    {
        //Debug.Log("Receive RPC InstantiateBox :" + _alimentName + " AlimentState:" + _alimentState + " viewID:" + viewID);
        KeyValuePair <string, AlimentState> key = new KeyValuePair <string, AlimentState>(_alimentName, _alimentState);

        Poolable           foodToInstantiate = PoolManager.Instance.Get(key, viewID);
        BoxDatasController box = foodToInstantiate.GetComponent <BoxDatasController>();

        foodToInstantiate.transform.position = PosInstantiation[posFree].position;
        foodToInstantiate.transform.rotation = PosInstantiation[posFree].rotation;

        box.Init();
        box.SetActive(false);
        box.Grabable.onGrab += OnGrabBox;

        boxInPos.Add(box, posFree);

        PosFree.Remove(posFree);

        boxInPos[box] = finalPos;
        PosFree.Remove(finalPos);

        StartCoroutine(TranslateBoxToPosition(box, posFree));
    }
Exemple #22
0
    void OnTriggerEnter2D(Collider2D col)
    {
        Rigidbody2D rb = col.attachedRigidbody;
        GameObject  obj;

        if (rb)
        {
            obj = rb.gameObject;
        }
        else
        {
            obj = col.gameObject;
        }
        Poolable poolable = obj.GetComponent <Poolable> ();

        if (poolable)
        {
            poolable.TryPool();
        }
        else
        {
            Destroy(obj);
        }
    }
    /// <summary>
    /// Gets a copy of the original gameobject. If none are available, one is added to the pool and returned.
    /// When you are done with the pooled object, its IsAvailable() function should return true to be available to the pool again.
    /// A maximum pool size can been set through the inspector (defaults to infinite).
    /// If the pool has reached that limit and no copies are avaible, the object returned is null.
    /// </summary>
    public Poolable GetObject()
    {
        // Grab the first available object
        for (int i = 0; i < _Pool.Count; ++i)
        {
            if (_Pool[i].IsAvailable())
            {
                return(_Pool[i]);
            }
        }

        // If there are no available objects, make one.
        if (_Pool.Count != _MaxSize)
        {
            GameObject obj    = Instantiate(_Original, transform);
            Poolable   script = obj.GetComponent <Poolable>();
            _Pool.Add(script);
            script.OnCreation(_SharedResource);
            return(script);
        }

        // The max pool size has been reached and no objects are available. Return null.
        return(null);
    }
Exemple #24
0
        /// <summary>
        /// Moves the rocket toward its target.
        /// </summary>
        private void Update()
        {
            if ((behaviorFlags & RocketFlags.NoHoming) == 0)
            {
                if (isHoming)
                {
                    if (target != null && target.CompareTag("Enemy") && targetEnemyScript != null && targetEnemyId != targetEnemyScript.EnemyId)
                    {
                        // clear target because it died and has respawned
                        target = null;
                        targetPoolableScript = null;
                        targetEnemyScript    = null;
                        isTargetDead         = true;
                        isHoming             = false;

                        if ((behaviorFlags & RocketFlags.AutoTarget) != 0)
                        {
                            AquireTarget();
                        }
                    }
                    else if (targetPoolableScript != null && !targetPoolableScript.IsActive ||
                             targetEnemyScript != null && targetEnemyScript.Health <= 0 ||
                             target == null || !target.activeSelf)
                    {
                        // clear target because it is dead or deactivated
                        target = null;
                        targetPoolableScript = null;
                        targetEnemyScript    = null;
                        isTargetDead         = true;
                        isHoming             = false;

                        if ((behaviorFlags & RocketFlags.AutoTarget) != 0)
                        {
                            AquireTarget();
                        }
                    }

                    if (targetPoolableScript != null && targetPoolableScript.IsActive ||
                        targetEnemyScript != null && targetEnemyScript.Health > 0 ||
                        !isTargetDead)
                    {
                        // update the target position if it is alive and not null
                        if (target != null)
                        {
                            targetPosition = target.transform.position;
                        }
                    }
                }

                if (target == null && (behaviorFlags & RocketFlags.AutoTarget) != 0)
                {
                    AquireTarget();
                }

                if (isTargetDead || !isHoming)
                {
                    if (Vector3.Distance(transform.position, targetPosition) < 0.4f)
                    {
                        Explode();
                    }
                }
            }

            smoothFrac    += Time.deltaTime / randomTime;
            smoothMovement = Vector3.Lerp(initialMovement, randomMovement, smoothFrac);

            transform.Translate(0.0f, 0.0f, speed * Time.deltaTime, Space.Self);
            transform.Translate(smoothMovement);

            Vector3    relativePosition = targetPosition - transform.position;
            Quaternion rotation         = Quaternion.LookRotation(relativePosition);

            transform.rotation =
                Quaternion.Slerp(transform.rotation, rotation, homingSensitivity);
        }
    void SpawnAsteroidExplosion(bool spawnBig, Vector3 position)
    {
        Poolable explosion = spawnBig ? m_BigExplosionPool.GetRecyclable() : m_SmallExplosionPool.GetRecyclable();

        SetPositionRotation(explosion.transform, position);
    }
Exemple #26
0
 private void AddToPool(Poolable target)
 {
     objectPool.Enqueue(target);
     target.gameObject.SetActive(false);
 }
    void Enqueue(StatusIndicatorEntry entry)
    {
        Poolable p = entry.GetComponent <Poolable>();

        GameObjectPoolController.Enqueue(p);
    }
Exemple #28
0
 public void Lock(Poolable instance, object key)
 {
     EnsureLockExists(instance);
     lockedInstances[instance].Lock(key);
 }
Exemple #29
0
 void Appear(Poolable instance)
 {
     instance.gameObject.SetActive(true);
 }
 //Pool the object
 private void enqueue(Poolable p)
 {
     this.initPoolable(p);
     p.transform.SetParent(poolableParent);
     this.poolables.Enqueue(p);
 }
Exemple #31
0
    void Enqueue(AbilityMenuEntry entry)
    {
        Poolable p = entry.GetComponent <Poolable>();

        GameObjectPoolController.Enqueue(p);
    }
Exemple #32
0
 public Pool(Poolable init)
 {
     pool = new List<Poolable>();
     initial = init;
 }
Exemple #33
0
 void Disappear(Poolable instance)
 {
     instance.gameObject.SetActive(false);
     instance.transform.SetParent(transform, worldPositionStays: false);
 }
Exemple #34
0
    // instantiate food object in hand of player
    public void GetFood(bool _Remove = false)
    {
        KeyValuePair <string, AlimentState> keyFood;
        Poolable foodToGet = null;

        if (_Remove == false)         // "se servir" button
        {
            // Take the key of prefab stock in slected button
            keyFood = ui.GetPoolableFromSelectedButton();
            // change state of the prefab stock in selected button if it's a box
            if (keyFood.Value == AlimentState.Box || keyFood.Value == AlimentState.Stack)
            {
                KeyValuePair <string, AlimentState> newKeyFood = new KeyValuePair <string, AlimentState>(keyFood.Key, AlimentState.InContent);
                foodToGet = PoolManager.Instance.Get(newKeyFood, true);
            }
            else             // remove object if state different of box or stack (limited food)
            {
                limitedFoodsStocked[keyFood] -= 1;
                if (limitedFoodsStocked[keyFood] == 0)
                {
                    if (ui.RemoveButton(out keyFood))
                    {
                        limitedFoodsStocked.Remove(keyFood);

                        foodToGet = PoolManager.Instance.Get(keyFood, true);
                    }
                }
                else
                {
                    foodToGet = PoolManager.Instance.Get(keyFood, true);
                }
            }
        }
        else        // remove object "Tout prendre" button
        {
            if (ui.RemoveButton(out keyFood))
            {
                foodsStocked.Remove(keyFood);
                foodToGet = PoolManager.Instance.Get(keyFood, true);


                if (keyFood.Value == AlimentState.Box)
                {
                    foodToGet.GetComponent <BoxDatasController>().Init();
                }
            }
        }

        GrabableObject toGrab = foodToGet.GetComponent <GrabableObject>();

        toGrab.Init();
        toGrab.AllowGrab(true);

        if (!player.pInteract.GrabObject(toGrab, false))
        {
            // player can't grab object.
            Debug.Log("grab");
        }
        else
        {
            photonView.RPC("GetObjectInColdRoom", RpcTarget.Others, keyFood.Key, keyFood.Value, foodToGet.photonView.ViewID, player.photonView.OwnerActorNr, _Remove);
            StopInteraction();

            GameManager.Instance.Audio.PlaySound("GrabCardboard", AudioManager.Canal.SoundEffect);
        }
    }
Exemple #35
0
 public void Free(Type type, Poolable instance)
 {
     Unlock(type, instance, this);
 }
 public override void Execute(GameObject obj)
 {
     Poolable.Destroy(obj);
 }
 void OnEnable()
 {
     // Get Poolable component here. GObject won't have it on Awake! (change?)
     m_Poolable = GetComponent<Poolable>();
     //SetRandomForces();
 }
    public virtual U DequeueScriptByKey <U> (T key) where U : MonoBehaviour
    {
        Poolable item = DequeueByKey(key);

        return(item.GetComponent <U>());
    }
Exemple #39
0
 internal Releaser(Poolable pooledObject)
 {
     _pooledObject = pooledObject;
 }
 //Make sure the object is deactivated
 private void initPoolable(Poolable p)
 {
     p.gameObject.SetActive(false);
 }
Exemple #41
0
 private void InternalFree(Type type, Poolable instance)
 {
     EnsurePoolExists(type);
     instances[type].Enqueue(instance);
 }