Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        if (lookingAtSpaceBarDrop())
        {
            showFlavorText("Press F to pick up spare space bar");
            if (Input.GetButtonDown("Fire1"))
            {
                deleteSpaceBarDrop();
                numSpaceBars += 1;
                updateSpaceBarCount();
            }
        }
        else if (lookingAtActivatable())
        {
            Activatable acti = getActivatableInFront();
            showFlavorText("Press F to " + acti.getDescription());
            if (Input.GetButtonDown("Fire1"))
            {
                Debug.Log("FIRE IN THE HOLE");
                acti.activate();
            }
        }
        else
        {
            flavorText.enabled = false;
        }

        if (shakeFadeOn)
        {
            var dt = Time.time - shakeFadeStart;
            if (dt >= shakeFadeDuration)
            {
                shakeFadeOn = false;
                shaker.transform.localEulerAngles = Vector3.zero;
            }
            else
            {
                var p = dt / shakeFadeDuration;
                if (!shakeFadeIn)
                {
                    p = 1 - p;
                }
                var dist = maxShakeDist * p;
                shaker.transform.localEulerAngles = Random.onUnitSphere * dist;
            }
        }
    }
Exemple #2
0
 // Update is called once per frame
 void Update()
 {
     if (Input.GetButtonDown("Activate"))
     {
         RaycastHit hit;
         if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, 1.0f))
         {
             //Check if the collided object has the possessable component
             Activatable act = hit.collider.gameObject.GetComponent <Activatable> ();
             if (act != null)
             {
                 //Possess the object
                 act.activate();
             }
         }
     }
 }
    private void generateRandomEvent()
    {
        int randomEventChance = UnityEngine.Random.Range(0, 100);

        if (randomEventChance >= 25)
        {
            Activatable a = allActivables[UnityEngine.Random.Range(0, allActivables.Count)];
            if (a)
            {
                a.activate(gameObject);
            }
        }
        else
        {
            int x = UnityEngine.Random.Range(0, UPPER_BOUNDARY);
            int y = UnityEngine.Random.Range(0, UPPER_BOUNDARY);
            x = (int)Math.Min(player.position.x + distanceTreshold, x);
            y = (int)Math.Min(player.position.y + distanceTreshold, y);
            Instantiate(glitchPrefab, new Vector3(x, y, 0), Quaternion.identity);
        }
    }
Exemple #4
0
 public virtual void activate(CharCtrl player)
 {
     if (activated)
     {
         sr.sprite = deactivatedTex;
         activated = false;
         onDeactivation(player);
     }
     else
     {
         sr.sprite = activatedTex;
         activated = true;
         onActivation(player);
         if (radioGroup != null)
         {
             radioGroup.checkout(this, player);
         }
     }
     if (chainedActivatable != null)
     {
         chainedActivatable.activate(player);
     }
 }
 public void activateObject(Activatable target)
 {
     target.activate();
 }
Exemple #6
0
    void Update()
    {
        variate              = !variate;
        deathTimer          -= Time.deltaTime;
        timedUncontrollable -= Time.deltaTime;
        dashTime            -= Time.deltaTime;
        meleeTime           -= Time.deltaTime;
        animationOverride   -= Time.deltaTime;
        timedInvulnerable   -= Time.deltaTime;
        curA *= 0.95f;
        if (curA < 0.05f)
        {
            if (cr.gameObject.activeSelf)
            {
                cr.gameObject.SetActive(false);
            }
        }
        else if (cr.gameObject.activeSelf)
        {
            cr.SetAlpha(Mathf.Min(curA, 1));
        }
        else
        {
            cr.gameObject.SetActive(true);
        }
        if (deathTimer <= 0f)
        {
            respawn();
        }
        if (noUpdate)
        {
            return;
        }
        if (!shadow)
        {
            genShadow();
        }
        else
        {
            if (shadow.GetComponent <SpriteRenderer>().sprite != sr.sprite)
            {
                genShadow();
            }
            shadow.GetComponent <SpriteRenderer>().flipX = sr.flipX;
        }
        if (fallTime <= deathFallTime)
        {
            fallTime         -= Time.deltaTime;
            gameObject.layer  = noclipLayer;
            pysc.gravityScale = 7f;
            gameObject.layer  = dashLayer;
            if (fallTime <= 0f)
            {
                kill();
            }
            transform.position = new Vector3(transform.position.x, transform.position.y, (transform.position.y + autoOrderOffset) / 100f);
            return;
        }
        if (light.barPercent <= 0f)
        {
            kill();
            return;
        }
        Vector2 redirect = Vector2.right;

        feetPos = pysc.position + cc.offset;
        armPos  = pysc.position + (Vector2)(fireArm.transform.localPosition);
        if (isDashing = dashPos.sqrMagnitude > 0.1f)
        {
            gameObject.layer = dashLayer;
            if (shadow.activeSelf && overAir)
            {
                shadow.SetActive(false);
            }
        }
        else
        {
            gameObject.layer = playerLayer;
            if (!shadow.activeSelf && overAir)
            {
                shadow.SetActive(true);
            }
        }
        float       closestA = float.PositiveInfinity;
        Activatable aInRange = null;

        foreach (RaycastHit2D rh in Physics2D.CircleCastAll(feetPos, 0.5f, Vector2.down, 0f))
        {
            if (rh.collider.isTrigger)
            {
                if (!isDashing && rh.collider.gameObject.GetComponent <Air>())
                {
                    fallTime = deathFallTime;
                    if (Mathf.Abs(lastInput.x) >= Mathf.Abs(lastInput.y))
                    {
                        ani.Play(lastInput.x > 0 ? "RightFall" : "LeftFall", 0);
                    }
                    else
                    {
                        ani.Play(lastInput.y > 0 ? "UpFall" : "DownFall", 0);
                    }
                    return;
                }
                else if (rh.collider.gameObject.GetComponent <Activatable>() && rh.distance < closestA)
                {
                    closestA = rh.distance;
                    aInRange = rh.collider.gameObject.GetComponent <Activatable>();
                }
                if (rh.collider.gameObject.GetComponent <MovementRedirect>())
                {
                    redirect = rh.collider.gameObject.GetComponent <MovementRedirect>().dir;
                }
            }
        }
        if (timedUncontrollable < 0f)
        {
            if (controllable)
            {
                Vector2 input       = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
                Vector2 rPosFromArm = ((Vector2)(Camera.main.ScreenToWorldPoint(Input.mousePosition)) - armPos).normalized;
                if (animationOverride <= 0f)
                {
                    rooted = false;
                }
                if (!isDashing)
                {
                    if (input.sqrMagnitude != 0f && animationOverride <= 0f && !arrowLoaded)
                    {
                        comboCount = 0;
                        rooted     = false;
                        lastInput  = input;
                        input      = input.normalized;
                        input      = redirect * input.x + new Vector2(-redirect.y, redirect.x) * input.y;
                        pysc.AddForce((input * charSpeed - pysc.velocity) * pysc.mass, ForceMode2D.Impulse);
                        if (Mathf.Abs(input.x) >= Mathf.Abs(input.y))
                        {
                            ani.Play(input.x > 0 ? "RightWalk" : "LeftWalk", 0);
                        }
                        else
                        {
                            ani.Play(input.y > 0 ? "UpWalk" : "DownWalk", 0);
                        }
                    }
                    else
                    {
                        brake();
                        if (!(rooted || arrowLoaded))
                        {
                            playIdleAnimation();
                        }
                    }
                    if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.dash]) && !arrowLoaded && dashTime <= 0f)
                    {
                        comboCount = 0;
                        float closest = dashDist;
                        lastInput = rPosFromArm;
                        overAir   = false;
                        foreach (RaycastHit2D rh in Physics2D.RaycastAll(feetPos, rPosFromArm, dashDist))
                        {
                            if (!rh.collider.isTrigger && rh.distance < closest && !(rh.collider.attachedRigidbody && rh.collider.attachedRigidbody.gameObject == gameObject) && rh.collider.gameObject != gameObject)
                            {
                                closest = rh.distance;
                            }
                            if (!overAir && rh.collider.gameObject.GetComponent <Air>())
                            {
                                overAir = true;
                            }
                        }
                        dashPos = rPosFromArm * closest;
                        if (Mathf.Abs(dashPos.x) > Mathf.Abs(dashPos.y))
                        {
                            ani.Play(overAir ? dashPos.x > 0 ? "RightDash" : "LeftDash" : dashPos.x > 0 ? "RightRoll" : "LeftRoll", 0);
                        }
                        else
                        {
                            ani.Play(overAir ? dashPos.y > 0 ? "UpDash" : "DownDash" : dashPos.y > 0 ? "UpRoll" : "DownRoll", 0);
                        }
                        dashTime = dashCoolDown;
                        SoundManager.script.playOnListener(SoundManager.script.dash, 0.7f);
                    }
                    if (!arrowLoaded && Input.GetMouseButtonDown(0))
                    {
                        comboCount++;
                    }
                    if ((light.barPercent > arrowCost || !usingLight) && Input.GetMouseButtonDown(1) && canAfford(arrowCost))
                    {
                        arrowLoaded = true;
                        comboCount  = 0;
                        handAni.Play("boxWindUp", 0);
                        SoundManager.script.playOnListener(SoundManager.script.bowDraw);
                    }
                    if (arrowLoaded && Input.GetMouseButton(1))
                    {
                        arrowTime += Time.deltaTime;
                        if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.cancel]))
                        {
                            arrowLoaded = false;
                            handAni.Play("NoAnimation", 0);
                            arrowTime   = 0f;
                            arrowLoaded = false;
                        }
                        fireArm.transform.localRotation = Quaternion.LookRotation(Vector3.forward, -rPosFromArm);
                        if (Mathf.Abs(rPosFromArm.x) > Mathf.Abs(rPosFromArm.y))
                        {
                            ani.Play(rPosFromArm.x < 0 ? "LeftFireState" : "RightFireState", 0);
                            if (fireHand.transform.localPosition.z != 0.01f)
                            {
                                fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, 0.0001f);
                            }
                        }
                        else if (rPosFromArm.y > 0)
                        {
                            ani.Play("UpFireState", 0);
                            if (fireHand.transform.localPosition.z != 0.01f)
                            {
                                fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, 0.0001f);
                            }
                        }
                        else if (fireHand.transform.localPosition.z != -0.01f)
                        {
                            ani.Play("DownFireState", 0);
                            fireArm.transform.localPosition = new Vector3(fireArm.transform.localPosition.x, fireArm.transform.localPosition.y, -0.0001f);
                        }
                    }
                    else
                    {
                        if (arrowTime >= arrowWindUp)
                        {
                            fire(rPosFromArm);
                        }
                        handAni.Play("NoAnimation", 0);
                        arrowTime   = 0f;
                        arrowLoaded = false;
                    }
                    if (!arrowLoaded && meleeTime <= 0f && comboCount > 0)
                    {
                        comboCount--;
                        BasicEnemy be = null;
                        foreach (RaycastHit2D rh in Physics2D.CircleCastAll(pysc.position, meleeRadius, Vector2.down, 0f))
                        {
                            if (!rh.collider.isTrigger && (be = rh.collider.gameObject.GetComponent <BasicEnemy>()) && Vector2.Dot((rh.point - pysc.position).normalized, rPosFromArm) >= meleeField)
                            {
                                be.damage((int)(meleeDamage / diff), BasicEnemy.MELEE_DAMAGE);
                                corrupt(meleeDamage);
                                SoundManager.script.playOnListener(variate ? SoundManager.script.enemyHit1 : SoundManager.script.enemyHit2, 0.8f);
                            }
                        }
                        SoundManager.script.playOnListener(variate ? SoundManager.script.sword1 : SoundManager.script.sword2, 0.8f);
                        meleeTime         = meleeCoolDown;
                        rooted            = true;
                        animationOverride = meleeCoolDown;
                        if (Mathf.Abs(rPosFromArm.x) >= Mathf.Abs(rPosFromArm.y))
                        {
                            if (variate)
                            {
                                ani.Play(rPosFromArm.x > 0 ? "RightAttack1" : "LeftAttack1", 0, 0);
                            }
                            else
                            {
                                ani.Play(rPosFromArm.x > 0 ? "RightAttack2" : "LeftAttack2", 0, 0);
                            }
                        }
                        else if (variate)
                        {
                            ani.Play(rPosFromArm.y > 0 ? "UpAttack" : "DownAttack", 0, 0);
                        }
                        else
                        {
                            ani.Play(rPosFromArm.y > 0 ? "UpAttack2" : "DownAttack2", 0, 0);
                        }
                        lastInput = rPosFromArm;
                        pysc.AddForce(rPosFromArm * meleeAdv);
                    }
                }
                else
                {
                    brake();
                }
                if (Input.GetKeyDown(Settings.keys[Settings.player, Settings.use]))
                {
                    if (aInRange && aInRange.playerActivatable)
                    {
                        aInRange.activate(this);
                    }
                    else
                    {
                        SoundManager.script.playOnListener(SoundManager.script.lightSwitch, 1f);
                        usingLight  = !usingLight;
                        gem.isLight = usingLight;
                        (usingLight ? lightP : darkP).GetComponent <ParticleSystem>().Play();
                    }
                }
            }
            else
            {
                playIdleAnimation();
                brake();
            }
        }
        if ((lastJuicePosition - pysc.position).sqrMagnitude >= sqrUnitPerSound)
        {
            lastJuicePosition = pysc.position;
            if (!isDashing && fallTime > deathFallTime)
            {
                SoundManager.script.playOnListener(variate ? SoundManager.script.step1 : SoundManager.script.step2, 0.8f);
            }
        }
        transform.position = new Vector3(transform.position.x, transform.position.y, (transform.position.y + autoOrderOffset) / 100f);
    }
Exemple #7
0
 public virtual void activate()
 {
     activation.activate();
 }