예제 #1
0
 // Use this for initialization
 void Start()
 {
     if (instance == null)
     {
         instance = this;
     }
     else
     {
         Destroy(this);
         return;
     }
     timer                = 0.0f;
     tier                 = 0;
     startSequence        = false;
     quickTimeButtonCodes = new KeyCode[4] {
         KeyCode.W, KeyCode.S, KeyCode.D, KeyCode.A
     };
 }
예제 #2
0
    IEnumerator qte(int dif)
    {
        float t = 0;

        Quicktime.EnableQuicktime(dif, 1);
        yield return(new WaitForSecondsRealtime(0.2f));

        while ((t += Time.deltaTime) < Quicktime.instance.maxTime && !qteFailed)
        {
            if (Quicktime.GetQuicktimeSucces(t))
            {
                Quicktime.DisableQuicktime();
                break;
            }
            yield return(new WaitForEndOfFrame());
        }
        if (!Quicktime.GetQuicktimeSucces(t))
        {
            qteFailed = true;
        }
        Quicktime.DisableQuicktime();
    }
예제 #3
0
    // Update is called once per frame
    void Update()
    {
        // Smooth camera movement
        Vector3 point          = Camera.main.WorldToViewportPoint(transform.position);
        Vector3 delta          = transform.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, point.z)); //(new Vector3(0.5, 0.5, point.z));
        Vector3 destination    = transform.position + delta;
        Vector3 smoothMovement = Vector3.SmoothDamp(Camera.main.transform.position, destination, ref velocity, dampTime);

        smoothMovement = new Vector3(smoothMovement.x, smoothMovement.y, Camera.main.transform.position.z);
        Camera.main.transform.position = smoothMovement;
        // Shake camera

        /*if (attacking) {
         *  Camera.main.transform.position = new Vector3 (Camera.main.transform.position.x + Random.value * Time.deltaTime * shakePower, Camera.main.transform.position.y + Random.value * Time.deltaTime * shakePower, Camera.main.transform.position.z);
         * }*/
        arrow.SetActive(stuckOn != null);
        //arrowRenderer.color = new Color(1, 1, 1, 1f / Vector2.Distance(transform.position, target.transform.position));
        if (stuckOn != null)
        {
            float angle = Mathf.Atan2(target.transform.position.y - transform.position.y, target.transform.position.x - transform.position.x) * Mathf.Rad2Deg;
            arrow.transform.localEulerAngles = new Vector3(0, 0, angle - 90f);
        }
        if (Quicktime.isDeath())
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }
        if (attacking)
        {
            return;
        }
        // Zoom the camera out if the parasite is not attacking
        Camera.main.orthographicSize += ((Mathf.Lerp(maxZoom, minZoom, Camera.main.orthographicSize / minZoom)) - Camera.main.orthographicSize) * zoomOutSpeed * Time.deltaTime;
        // Movement target
        if (stuckOn != null)
        {
            curRidgidBody.velocity = new Vector2(Input.GetAxis("Horizontal") * controlSpeed * Time.deltaTime, Input.GetAxis("Vertical") * controlSpeed * Time.deltaTime);
        }
        // Get mousePosition in world space
        Vector3 mousePosition = Input.mousePosition;

        mousePosition.z = 10.0f;
        Vector2 v  = Camera.main.ScreenToWorldPoint(mousePosition);
        Vector3 _v = v;
        // Get the direction towards the mouse
        Vector3 direction = transform.position - _v;

        // Draw ray
        Debug.DrawRay(transform.position, direction.normalized * -1 * range, Color.green);
        // If left mouse button is down
        if (Input.GetMouseButtonDown(0))
        {
            print("Casting");
            // Shoot a ray towards mouse
            RaycastHit2D rayhit = Physics2D.Raycast(transform.position, direction * -1, range);

            if (rayhit.collider != null)
            {
                print(rayhit.collider.gameObject);
                // Get enemy script
                Enemy e = rayhit.collider.gameObject.GetComponent <Enemy>();
                if (e != null)
                {
                    if (e.ai.getEntityInfo().Tier <= PlayerLevelManager.instance.playerLevel + 1)
                    {
                        // If the mouse is over that enemy set it as our current target
                        if (e.mouseOver)
                        {
                            currentTarget = rayhit.collider.gameObject;
                            StartCoroutine(attack(transform.position, e, e.ai.getEntityInfo().Tier + 2 - qteDecreaser));
                        }
                    }
                }
            }
        }
        RangeCircle.transform.localScale = Vector3.one * range * 2;
    }
예제 #4
0
    IEnumerator attack(Vector3 startPos, Enemy e, int dif)
    {
        if (stuckOn != null)
        {
            stuckOn.GetComponent <AiEntity>().enabled = true;
            AiManager.SetNewRandomPath(stuckOn.GetComponent <AiEntity>());
            curRidgidBody.bodyType   = RigidbodyType2D.Kinematic;
            curRidgidBody            = null;
            stuckOn.gameObject.layer = LayerMask.NameToLayer("Default");
            sprRenderer.enabled      = true;
            transform.parent         = null;
        }

        for (int i = 0; i < AiManager.instance._aiEntitys.Count; i++)
        {
            print(AiManager.instance._aiEntitys[i].GetType());
            ((AiEntity)AiManager.instance._aiEntitys[i]).isWaiting = true;
        }

        attacking = true;
        float t = 0;

        while ((t += Time.deltaTime) < 0.8f)
        {
            transform.position           = Vector3.Lerp(startPos, e.transform.position, t);
            Camera.main.orthographicSize = Mathf.Lerp(minZoom, maxZoom, (minZoom - maxZoom) * t);
            // Shake camera
            Camera.main.transform.position = new Vector3(Camera.main.transform.position.x + Random.value * Time.deltaTime * shakePower, Camera.main.transform.position.y + Random.value * Time.deltaTime * shakePower, Camera.main.transform.position.z);
            yield return(new WaitForEndOfFrame());
        }
        transform.position = Vector3.Lerp(startPos, e.transform.position, 0.8f);

        for (int i = 0; i < dif; i++)
        {
            yield return(qte(dif));

            transform.position = Vector3.Lerp(startPos, e.transform.position, 0.8f + (0.2f / dif) * i);
            // Shake camera
            Camera.main.transform.position = new Vector3(Camera.main.transform.position.x + Random.value * Time.deltaTime * shakePower, Camera.main.transform.position.y + Random.value * Time.deltaTime * shakePower, Camera.main.transform.position.z);
            if (qteFailed)
            {
                SceneManager.LoadScene(2);
            }
        }
        stuckOn = e;

        if (!stuckOn.visited)
        {
            stuckOn.visited = true;
            PlayerLevelManager.instance.addExp(25 * stuckOn.ai.getEntityInfo().Tier *stuckOn.ai.getEntityInfo().Tier);
        }

        foreach (TileObject tObj in AiManager.instance._aiSystem.GetTilesByTierHigher(e.ai.getEntityInfo().Tier))
        {
            BoxCollider2D bc2D = tObj.GetComponent <BoxCollider2D>();
            if (bc2D != null)
            {
                bc2D.enabled = true;
            }
        }
        foreach (TileObject tObj in AiManager.instance._aiSystem.GetTilesByTier(e.ai.getEntityInfo().Tier))
        {
            BoxCollider2D bc2D = tObj.GetComponent <BoxCollider2D>();
            if (bc2D != null)
            {
                bc2D.enabled = false;
            }
        }

        curRidgidBody          = e.GetComponent <Rigidbody2D>();
        curRidgidBody.bodyType = RigidbodyType2D.Dynamic;
        stuckOn.GetComponent <AiEntity>().enabled = false;
        transform.parent         = stuckOn.transform;
        sprRenderer.enabled      = false;
        transform.localPosition  = Vector3.zero;
        stuckOn.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
        attacking = false;
        Quicktime.DisableQuicktime();
        foreach (AiEntity aiE in AiManager.instance._aiEntitys)
        {
            aiE.isWaiting = false;
        }
    }
예제 #5
0
    public void RunPossession(Quicktime theQuicktime)
    {
        engagedQuicktime = theQuicktime;
        qteRunning = 1;
        /*
        for (int i = 0; i < eventQueue.Length; i++)
        {
            //evQueue[i] = eventQueue[i];
        }

        foreach (Quicktime.QuicktimeEvent qEvent in eventQueue)
        {
            print("got a qEvent for ya start: "+qEvent.timeStart+"and end: "+qEvent.timeEnd);
        }
        print(evQueue.Length);
        List<Keyframe> RotateFrames = new List<Keyframe>();
        RotateFrames.Add(new Keyframe(0, 0));
        RotateFrames.Add(new Keyframe(quickAnimLength, 5));
        RotateAnim(RotateFrames);
        */
    }