コード例 #1
0
    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);
    }
コード例 #2
0
    // 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;
                }
            }
        }
    }