void OnValidate()
        {
            //if ( PlacementCanvas == null)
            //{
            //     //Canvas[] foundCanvas  = GameObject.FindObjectsOfType<Canvas>();
            //}

            if (Assets.Length == AssetCount)
            {
                return;
            }

            LevelAsset[] oldAssets = Assets;
            Assets = new LevelAsset[AssetCount];

            int j = 0;

            for (int i = 0; i < oldAssets.Length; i++)
            {
                LevelAsset old = oldAssets[i];
                if (old != null && old.Prefab != null)
                {
                    if (j <= Assets.Length - 1)
                    {
                        Assets[j++] = old;
                    }
                }
            }
        }
Example #2
0
        private void UpdateCountText(LevelAsset asset)
        {
            if (m_textHolders.ContainsKey(asset))
            {
                TextMesh text = m_textElements[asset];
                text.text = asset.Count.ToString();
            }
            else
            {
                GameObject textHolder = new GameObject("textHolder");

                textHolder.transform.SetParent(PlacementPanel.transform);
                //textHolder.transform.SetParent(m_assetSelectors[asset].transform);  //slot.transform;

                //Place the text relative to the asset.
                GameObject assetSelector = m_assetSelectors[asset];

                textHolder.transform.localPosition = new Vector3(assetSelector.transform.localPosition.x - 2, assetSelector.transform.localPosition.y, assetSelector.transform.localPosition.z);


                TextMesh text = textHolder.AddComponent <TextMesh>();
                text.offsetZ       = -1.5f; //???
                text.fontSize      = 128;
                text.characterSize = 0.1f;



                text.alignment = TextAlignment.Center;
                text.anchor    = TextAnchor.MiddleCenter;
                text.text      = asset.Count.ToString();
                text.color     = AssetCountTextColor;
                m_textHolders.Add(asset, textHolder);
                m_textElements.Add(asset, text);
            }
        }
Example #3
0
        private GameObject PlacePreviewObject(Vector3 position, LevelAsset asset)
        {
            GameObject result = Instantiate(asset.Prefab);

            asset.Count--;
            result.transform.position = position;
            RememberPreviewObject(result, asset);
            MakePreviewObject(result);
            UpdateButtonUI(asset);

            return(result);
        }
Example #4
0
        private void UpdateButtonUI(LevelAsset currentDraggingAsset)
        {
            if (currentDraggingAsset.Count > 0)
            {
                //TODO: Undo make button gray
            }
            else
            {
                //todo: make buton gray
            }

            UpdateCountText(currentDraggingAsset);
        }
Example #5
0
        private void RememberPreviewObject(GameObject gameObject, LevelAsset asset)
        {
            //if (m_inScenePreviewObjects.ContainsKey(asset)
            List <GameObject> gameObjects = null;

            if (!m_inScenePreviewObjects.TryGetValue(asset, out gameObjects))
            {
                gameObjects = new List <GameObject>();
                m_inScenePreviewObjects.Add(asset, gameObjects);
            }

            gameObjects.Add(gameObject);
        }
Example #6
0
        public void StartGame()
        {
            m_isCurrentlyPlayingGame = true; //<< deactivates drag and drop.
            //m_positionsAtLastGameStart = new Dictionary<LevelAsset, List<Vector3>>();
            List <GameObject> objectsToDestroy = new List <GameObject>();

            //we need to store the current positions now,
            //because later, it's to late (infos get destroyed)
            StaticCatastrophyDataBroker.StoreLocationPlacementInfo(GetPositionInfos());

            //TODO: replace the preview objects with real objects that have physics reanabled.
            foreach (var kvp in m_inScenePreviewObjects)
            {
                //List<Vector3> positions = new List<Vector3>();
                //m_positionsAtLastGameStart.Add(kvp.Key, positions);
                foreach (var previewObject in kvp.Value)
                {
                    objectsToDestroy.Add(previewObject);

                    PreviewCollisionMemory collisionMemory = previewObject.GetComponent <PreviewCollisionMemory>();
                    //only add objects that havent been setup as colliding object.
                    if (!collisionMemory.IsColliding)
                    {
                        GameObject go = (GameObject)Instantiate(kvp.Key.Prefab);
                        go.transform.position = previewObject.transform.position;
                    }
                }
            }

            m_inScenePreviewObjects.Clear();
            m_currentDraggingObject = null;
            m_currentDraggingAsset  = null;

            foreach (GameObject obj in objectsToDestroy)
            {
                Destroy(obj);
            }

            StartStartableGameObjects();
            ApplyCatForce();
        }
Example #7
0
        private void EndDrag(Vector2 clickPoint2D)
        {
            if (m_isCurrentlyPlayingGame)
            {
                return;
            }
            //If object is dropped out of scene, it gets brought back to asset selection.
            if (m_currentDraggingObject != null)
            {
                Renderer renderer = GetDragCanvasRenderer();
                bool     contains = renderer.bounds.Contains(clickPoint2D);

                if (contains)
                {
                    m_currentDraggingAsset.Count++;
                    UpdateCountText(m_currentDraggingAsset);
                    m_inScenePreviewObjects[m_currentDraggingAsset].Remove(m_currentDraggingObject);
                    Destroy(m_currentDraggingObject);
                }
            }
            m_currentDraggingObject = null;
            m_currentDraggingAsset  = null;
        }
Example #8
0
        private void StartDrag(Vector2 clickPoint2D)
        {
            if (m_isCurrentlyPlayingGame)
            {
                m_isDraggingCamera        = true;
                m_lastCameraClickPosition = clickPoint2D;
                return;
            }
            //check if starting draging
            foreach (var item in m_assetSelectors)
            {
                foreach (Renderer renderer in GetAll <Renderer>(item.Value))
                {
                    if (renderer.bounds.Contains(clickPoint2D))
                    {
                        m_currentDraggingAsset = item.Key;
                        m_isDraggingCamera     = false;
                    }
                }
            }

            if (m_currentDraggingAsset != null)
            {
                if (m_currentDraggingAsset.Count > 0)
                {
                    m_currentDraggingObject = PlacePreviewObject(clickPoint2D, m_currentDraggingAsset);
                    m_isDraggingCamera      = false;
                }
            }
            else //not started to drag an object from the asset selection
            {
                //maybe user is dragging existing object ?
                foreach (var kvp in m_inScenePreviewObjects)
                {
                    foreach (GameObject obj in kvp.Value)
                    {
                        foreach (Renderer renderer in GetAll <Renderer>(obj))
                        {
                            if (renderer.bounds.Contains(clickPoint2D))
                            {
                                m_currentDraggingAsset  = kvp.Key;
                                m_currentDraggingObject = obj;
                                m_currentDraggingObject.transform.position = clickPoint2D;
                                m_isDraggingCamera = false;
                                break;
                            }
                        }
                    }
                    if (m_currentDraggingObject != null)
                    {
                        break;
                    }
                }
            }

            if (m_currentDraggingAsset == null)
            {
                //dont start drag camera on the dragging canvas
                Renderer dragBackgroundRenderer = GetDragCanvasRenderer();
                if (!dragBackgroundRenderer.bounds.Contains(clickPoint2D))
                {
                    m_isDraggingCamera        = true;
                    m_lastCameraClickPosition = clickPoint2D;
                }
            }
        }