void TriggerAchievementAnimation(AchievementBase ach) { RectTransform canvasRect = canvas.GetComponent <RectTransform>(); float midX = canvasRect.rect.width * 0.5f; float height = canvasRect.rect.height; GameObject panel = Instantiate(achievementPanel); RectTransform panelRect = panel.GetComponent <RectTransform>(); //Set Parent panel.transform.SetParent(canvas.transform, false); //Set Scale float dx = canvasRect.rect.width - panelinfo.width; float dy = height - panelinfo.height; panelRect.sizeDelta = new Vector2(-dx, -dy); //Set Pos Vector3 endPos; //= new Vector3(0, height * 0.5f - panelinfo.height * 0.5f - panelinfo.offsetFromTop - panelinfo.height * activepanels.Count); Vector3 firstEndReference = new Vector3(0, height * 0.5f - panelinfo.height * 0.5f - panelinfo.offsetFromTop); if (activepanels.Count <= 0) { endPos = new Vector3(0, 0, 0); } else { endPos = new Vector3(0, -panelinfo.height); } Vector3 startPos = new Vector3(0, height * 0.5f + panelinfo.height * 0.5f); panelRect.localPosition = startPos; float moveSpd = (firstEndReference - startPos).magnitude / panelinfo.moveTime; //Init values/text AchievementPanel panelScript = panel.GetComponent <AchievementPanel>(); panelScript.Init(ach.ach_name, ach.description); ActivePanelInfo api = new ActivePanelInfo(panel, panelinfo.lifeTime, startPos, endPos, panelinfo.moveTime); api.moveSpd = moveSpd; activepanels.Add(api); }
// Update is called once per frame void Update() { int currIndex = -1; Vector3 firstEndReference = new Vector3(0, canvas.GetComponent <RectTransform>().rect.height * 0.5f - panelinfo.height * 0.5f - panelinfo.offsetFromTop); Vector3 totalEndReference = new Vector3(0, 0, 0); Vector3 spawnStartPos = new Vector3(0, canvas.GetComponent <RectTransform>().rect.height * 0.5f + panelinfo.height * 0.5f); // active panel info for (int i = 0; i < activepanels.Count;) { ActivePanelInfo api = activepanels[i]; //use move spd //api.moveElasped = Mathf.Min(api.moveElasped + Time.deltaTime, api.moveTime); //api.panel.transform.localPosition = Vector3.Lerp(api.startPos, firstEndReference + totalEndReference + api.endPos, api.moveElasped / api.moveTime); Vector3 dir = (-api.panel.transform.localPosition + (firstEndReference + totalEndReference + api.endPos)).normalized; Vector3 movement = (dir * api.moveSpd * Time.deltaTime); float distance = movement.magnitude; if (distance >= (-api.panel.transform.localPosition + (firstEndReference + totalEndReference + api.endPos)).magnitude) { api.panel.transform.localPosition = firstEndReference + totalEndReference + api.endPos; } else { api.panel.transform.localPosition += movement; } if (api.panel.transform.localPosition == firstEndReference + totalEndReference + api.endPos) { api.hasReached = true; } if (api.hasReached) { api.elapsed = Mathf.Min(api.elapsed + Time.deltaTime, api.lifeTime); if (api.elapsed >= api.lifeTime) { if (i < activepanels.Count - 1) { activepanels[i + 1].endPos = api.endPos; //child/nextguy end pos is my now end pos } api.backingOut = true; api.startPos = firstEndReference + totalEndReference + api.endPos; api.endPos = spawnStartPos; api.moveElasped = 0.0f; activepanels.Remove(api); removePanelList.Add(api); continue; } } totalEndReference += api.endPos; ++i; } List <ActivePanelInfo> deletelist = new List <ActivePanelInfo>(); //Going back to top and delete foreach (ActivePanelInfo api in removePanelList) { Vector3 dir = (-api.panel.transform.localPosition + (firstEndReference + totalEndReference + api.endPos)).normalized; Vector3 movement = (dir * api.moveSpd * Time.deltaTime); float distance = movement.magnitude; if (distance >= (-api.panel.transform.localPosition + (firstEndReference + totalEndReference + api.endPos)).magnitude) { api.panel.transform.localPosition = firstEndReference + totalEndReference + api.endPos; } else { api.panel.transform.localPosition += movement; } //api.moveElasped = Mathf.Min(api.moveElasped + Time.deltaTime, api.moveTime); //api.panel.transform.localPosition = Vector3.Lerp(api.startPos, api.endPos, api.moveElasped / api.moveTime); if (api.panel.transform.localPosition == firstEndReference + totalEndReference + api.endPos) { deletelist.Add(api); } } foreach (ActivePanelInfo dapi in deletelist) { removePanelList.Remove(dapi); Destroy(dapi.panel); } deletelist.Clear(); if (onHacks) { if (Input.GetKeyUp(KeyCode.Space)) { // hackOned = true; hackindex = 0; AchievementUnlocked(achievementList[hackindex]); } if (hackOned) { hackelapsed += Time.deltaTime; if (hackelapsed >= hackdelay) { if (hackindex < achievementList.Count) { if (!achievementList[hackindex].completed) { AchievementUnlocked(achievementList[hackindex]); } ++hackindex; } else { hackOned = false; } hackelapsed = 0.0f; } } } }