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; } } } }
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); } }
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); }
private void UpdateButtonUI(LevelAsset currentDraggingAsset) { if (currentDraggingAsset.Count > 0) { //TODO: Undo make button gray } else { //todo: make buton gray } UpdateCountText(currentDraggingAsset); }
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); }
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(); }
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; }
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; } } }