예제 #1
0
    // Update is called once per frame
    void Update()
    {
        MyHoverText.text = TankName + "\nHealth: " + Health.ToString("0.00");
        if (MyTurn)
        {
            if (MyControlType == ControlType.LocalPlayer && !WaitingToFire)
            {
                HorizontalInput();
                TurretInput();
                MyHoverText.text += "\nFuel: " + Fuel.ToString("0.00");
            }
            else if (MyControlType == ControlType.NetworkPlayer)
            {
            }
            else
            {
                ComputerInput();
            }

            WrapWorld();
            AdjustAngle();
        }

        if (Health <= 0f)
        {
            SpawnDeadTank();
            MyHoverText.text = TankName + " RIP";
        }

        if (WaitingToFire)
        {
            FireDelayTimer -= Time.deltaTime;
            if (FireDelayTimer <= 0f)
            {
                WaitingToFire = false;

                // Fire Gun
                cameraEffects.Shake(0.25f);
                FireGunAudio.Play();
                GunSprite.FireGun();
                GunBlast.Play();
                GunSmoke.Play();

                // Setup the bullet
                GameObject bullet       = Instantiate(manager.BulletPrefabs[BulletType]);
                Vector3    bulletVector = Lump.position - TurretPivot.position;
                bulletVector.Normalize();
                bulletVector *= BulletPower;
                bullet.GetComponent <Bullet>().velocity = bulletVector;
                bullet.transform.position = Lump.position;
                BulletType = 0;

                // End turn
                manager.NextPlayer();
            }
        }

        MyHoverText.gameObject.SetActive(!manager.Paused);
        MovementEffects();
    }
예제 #2
0
    private void Explode()
    {
        cameraEffects.Shake(0.25f);
        MyParticles.Stop();
        MyParticles.gameObject.AddComponent <ParticleKiller>();
        MyParticles.transform.parent = null;

        if (SpawnExplosion)
        {
            BulletExplosion explosion = Instantiate(ExplosionPrefab).GetComponent <BulletExplosion>();
            explosion.transform.position   = transform.position;
            explosion.transform.localScale = new Vector3(ExplosionRadius, ExplosionRadius, ExplosionRadius);
            explosion.Damage = Damage;
            AudioSource audio = explosion.GetComponent <AudioSource>();
            audio.clip = ExplosionSound;
            audio.Play();
        }

        Destroy(gameObject);
        if (!IgnoreLanding)
        {
            manager.BulletLanded();
        }
        // todo - cause different effects here depending on the bullet
    }
예제 #3
0
    public IEnumerator Die()
    {
        inputDelegate    = Empty;
        rotationDelegate = Empty;

        ledsIn.color = ledsOut.color = Color.black;
        GetComponent <Breakable>().Break(true);
        movementUpgradeObject.GetComponent <Breakable>().Break();
        attackUpgradeObject.GetComponent <Breakable>().Break();

        aim.gameObject.SetActive(false);

        CameraEffects cam = Camera.main.GetComponent <CameraEffects>();

        if (cam)
        {
            cam.StopAllCoroutines();
            cam.StartCoroutine(cam.Shake());
        }

        Time.timeScale = .01f;
        yield return(new WaitForSecondsRealtime(.3f));

        Time.timeScale = 1f;
    }
예제 #4
0
 public void Hit(int launchDirection)
 {
     if (!recovering)
     {
         cameraEffect.Shake(100, 1);
         animator.SetTrigger("hurt");
         velocity.y      = launchPower.y;
         launch          = launchDirection * (launchPower.x);
         recoveryCounter = 0;
         recovering      = true;
         GamePad.SetVibration(0, 1f, 1f);
         StartCoroutine(timer());
         if (health <= 0)
         {
             GamePad.SetVibration(0, 2f, 2f);
             StartCoroutine(timer());
             Die();
         }
         else
         {
             health -= 1;
         }
         GameManager.Instance.playerUI.HealthBarHurt();
     }
 }
예제 #5
0
 public void OnNextPressed()
 {
     cameraEffects.Shake(0.1f, 0.1f);
     source.PlayOneShot(menuButtonPress);
     if (currentScreen == MenuScreen.Guide1)
     {
         EnableScreen(MenuScreen.Guide2);
     }
     else if (currentScreen == MenuScreen.Guide2)
     {
         EnableScreen(MenuScreen.Guide3);
     }
     else if (currentScreen == MenuScreen.Guide3)
     {
         gameObject.SetActive(false);
     }
 }
예제 #6
0
 public void Eject(Vector3 position, Vector3 direction, Quaternion rotation)
 {
     if (canEject_)
     {
         StartCoroutine(EjectCO(position, direction, rotation));
         cameraEffects_.Shake(0.3f, 0.15f, direction);
     }
 }
예제 #7
0
 private void Shoot()
 {
     if (Input.GetButtonDown("Fire1") && ammo_.TryToUseAmmo(1))
     {
         cannonAnim_.SetTrigger("recoil");
         Vector3 dir = (Input.mousePosition - Camera.main.WorldToScreenPoint(transform.position)).normalized;
         cameraEffects_.Shake(0.3f, 0.1f, dir);
         Instantiate(bulletPrefab_, firingPoint_.position, cannonTransform_.rotation);
     }
 }
 public void Hurt(int attackPower, int targetSide)
 {
     StartCoroutine(FreezeEffect(.5f, .6f));
     animator.SetTrigger("hurt");
     Debug.Log("I'm getting hurt on my side:" + targetSide);
     launch     = -targetSide * launchPower.x;
     velocity.y = launchPower.y;
     cameraEffects.Shake(5, .5f);
     NewPlayer.Instance.health -= attackPower;
     NewPlayer.Instance.UpdateUI();
 }
예제 #9
0
        //This is for testing
        private void SendDamage(Object data)
        {
            DamageData damageData  = data as DamageData;
            Stat       sendingStat = stats.FirstOrDefault(x => x.Name == damageData.sendingStat);

            if (sendingStat == null)
            {
                return;
            }

            Collider[] colliders = Physics.OverlapSphere(transform.position, damageData.maxDistance);
            for (int i = 0; i < colliders.Length; i++)
            {
                if (colliders[i].transform != transform)
                {
                    Vector3 direction = colliders[i].transform.position - transform.position;
                    float   angle     = Vector3.Angle(direction, transform.forward);
                    if (Mathf.Abs(angle) < damageData.maxAngle)
                    {
                        StatsHandler receiver = colliders[i].GetComponent <StatsHandler>();
                        if (receiver != null)
                        {
                            Stat criticalStrikeStat = stats.FirstOrDefault(x => x.Name == damageData.criticalStrikeStat);

                            bool  criticaleStrike = criticalStrikeStat != null && criticalStrikeStat.Value > UnityEngine.Random.Range(0f, 100f);
                            float damage          = sendingStat.Value;
                            if (criticaleStrike)
                            {
                                damage *= 2f;
                            }

                            receiver.ApplyDamageInternal(damageData.receivingStat, damage, 0, criticaleStrike);
                            if (damageData.particleEffect != null)
                            {
                                Vector3 pos     = colliders[i].ClosestPoint(transform.position + damageData.offset);
                                Vector3 right   = UnityEngine.Random.Range(-damageData.randomize.x, damageData.randomize.x) * transform.right;
                                Vector3 up      = UnityEngine.Random.Range(-damageData.randomize.y, damageData.randomize.y) * transform.up;
                                Vector3 forward = UnityEngine.Random.Range(-damageData.randomize.z, damageData.randomize.z) * transform.forward;

                                Vector3    relativePos = (transform.position + damageData.offset + right + up + forward) - pos;
                                GameObject effect      = Instantiate(damageData.particleEffect, pos, Quaternion.LookRotation(relativePos, Vector3.up));
                                Destroy(effect, damageData.lifeTime);
                            }

                            CameraEffects.Shake(damageData.duration, damageData.speed, damageData.amount);
                            if (damageData.hitSounds.Length > 0)
                            {
                                UnityTools.PlaySound(damageData.hitSounds[UnityEngine.Random.Range(0, damageData.hitSounds.Length)], damageData.volume);
                            }
                        }
                    }
                }
            }
        }
    public void KillPlayer(GameObject player)
    {
        if (cameraEffects != null)
        {
            cameraEffects.Shake(camShakeIntensity, camShakes);
        }

        Movement playerMovement = player.GetComponent <Movement>();

        playerMovement.CanJump = false; // now the player doesn't jump on respawn

        StartCoroutine(PlayerKillEffect(player));
    }
예제 #11
0
    IEnumerator Attack()
    {
        state = ActionState.Attacking;

        Vector2 startPos = transform.position;
        Vector2 endPos;

        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, detectionHeight, groundMask);

        if (hit)
        {
            endPos = hit.point + Vector2.up * mainCollider.bounds.size.y / 2f;
        }
        else
        {
            endPos = -transform.up * detectionHeight;
        }

        bool destinationReached = false;

        while (!destinationReached)
        {
            destinationReached = Move(endPos, fallSpeed);
            if (!hit && destinationReached)
            {
                Destroy(gameObject); // it fell of into the void lmao
                yield break;         // safety
            }
            yield return(null);
        }
        state = ActionState.Recovering;

        if (cameraEffects != null)
        {
            cameraEffects.Shake(camShakeIntensity, camShakes);
        }
        yield return(new WaitForSeconds(stopTime));

        destinationReached = false;
        while (!destinationReached)
        {
            destinationReached = Move(startPos, ascendSpeed);
            yield return(null);
        }

        yield return(new WaitForSeconds(cooldownTime));

        state = ActionState.Standby;
    }
예제 #12
0
    public void GetHurt(int hurtDirection, int hitPower)
    {
        //If the player is not frozen (ie talking, spawning, etc), recovering, and pounding, get hurt!
        if (!frozen && !recoveryCounter.recovering && !pounding)
        {
            HurtEffect();
            cameraEffects.Shake(100, 1);
            animator.SetTrigger("hurt");
            velocity.y = hurtLaunchPower.y;
            launch     = hurtDirection * (hurtLaunchPower.x);
            recoveryCounter.counter = 0;

            if (health <= 0)
            {
                StartCoroutine(Die());
            }
            else
            {
                health -= hitPower;
            }

            GameManager.Instance.hud.HealthBarHurt();
        }
    }
예제 #13
0
 void HammerDown()
 {
     movement.MoveDown();
     if (hammerUpCoroutine != null)
     {
         StopCoroutine(MoveHammerUp());
     }
     hammerUpCoroutine = StartCoroutine(MoveHammerUp());
     animator.Play("Down");
     trigger.SetActive(true);
     SoundManager.PlaySound(SoundEffects.HAMMER);
     if (cameraEffects != null)
     {
         cameraEffects.Shake();
     }
 }
예제 #14
0
 public void Hit(int launchDirection)
 {
     if (!recovering)
     {
         cameraEffect.Shake(100, 1);
         animator.SetTrigger("hurt");
         velocity.y      = launchPower.y;
         launch          = launchDirection * (launchPower.x);
         recoveryCounter = 0;
         recovering      = true;
         if (health <= 0)
         {
             Die();
         }
         else
         {
             health -= 1;
         }
         GameManager.Instance.playerUI.HealthBarHurt();
     }
 }
예제 #15
0
    // Start is called before the first frame update
    void Start()
    {
        roddentPopularityBar.SetValue(roddentPopularity / maxPopularity, false);
        roddentTrustBar.SetValue(roddentTrust / maxPopularity, false);
        fancybookPopularityBar.SetValue(fancybookPopularity / maxPopularity, false);
        fancybookTrustBar.SetValue(fancybookTrust / maxPopularity, false);

        // randomise incoming articles
        incomingTitles = AllTitles.Titles.ToList().OrderBy(x => UnityEngine.Random.value).ToList();

        shownTitle.SetTitle(incomingTitles[currentTitleIndex]);

        postButton.onClick.AddListener(() =>
        {
            // Confirm new values
            var(rpop, rsus, fpop, fsus) = confirmModifiers();
            infoPanel.text = "";

            cameraEffects.Shake(0.1f, 0.1f);
            sendSource.PlayOneShot(sendClip);

            // If the edited article doesnt affect fancybook, add some randomness to it anyway
            fpop = fpop == 0.0f ? UnityEngine.Random.Range(-1.0f, 1.0f) : fpop;
            fsus = fsus == 0.0f ? UnityEngine.Random.Range(-1.0f, 1.0f) : fsus;


            roddentPopularity   = Math.Min(maxPopularity, Math.Max(0, roddentPopularity + rpop));
            roddentTrust        = Math.Min(maxPopularity, Math.Max(0, roddentTrust - rsus));
            fancybookPopularity = Math.Min(maxPopularity, Math.Max(0, fancybookPopularity + fpop));
            fancybookTrust      = Math.Min(maxPopularity, Math.Max(0, fancybookTrust - fsus));

            Debug.Log(String.Format("RP {0} RT {1} FP {2} FT {3}", roddentPopularity, roddentTrust, fancybookPopularity, fancybookTrust));


            if (roddentPopularity <= 1)
            {
                TriggerEnding(EndingType.RoddentLowPopularity);
            }

            else if (fancybookPopularity <= 1)
            {
                TriggerEnding(EndingType.FancybookLowPopularity);
            }
            else if (fancybookPopularity >= 0.9 * maxPopularity)
            {
                TriggerEnding(EndingType.FancybookHighPopularity);
            }
            else if (roddentPopularity >= 0.9 * maxPopularity)
            {
                TriggerEnding(EndingType.RoddentHighPopularity);
            }



            if (roddentTrust <= 0.1 * maxPopularity)
            {
                infoPanel.text     = "Roddent's trust is too low, many people are leaving the platform.";
                roddentPopularity /= 1.5f;
            }
            else if (fancybookPopularity >= maxPopularity * 0.8f)
            {
                infoPanel.text     = "People love Fancybook! Many people are leaving Roddent to go to Fancybook!";
                roddentPopularity /= 1.5f;
            }
            else if (roddentPopularity >= maxPopularity * 0.8f)
            {
                infoPanel.text       = "People love your platform, many are leaving Fancybook!";
                fancybookPopularity /= 1.5f;
            }
            else if (fancybookTrust <= maxPopularity * 0.1f)
            {
                infoPanel.text       = "People don't trust Fancybook, many are leaving.";
                fancybookPopularity /= 1.5f;
            }



            // Update sliders
            roddentPopularityBar.SetValue(roddentPopularity / maxPopularity, false);
            roddentTrustBar.SetValue(roddentTrust / maxPopularity, false);
            fancybookPopularityBar.SetValue(fancybookPopularity / maxPopularity, false);
            fancybookTrustBar.SetValue(fancybookTrust / maxPopularity, false);

            // Get new title
            currentTitleIndex++;
            currentTitleIndex %= incomingTitles.Count;
            shownTitle.SetTitle(incomingTitles[currentTitleIndex]);
        });
    }
예제 #16
0
    public override void Update()
    {
        base.Update();
        if (teleportBarTime != teleportCooldown)
        {
            teleportBarTime += Time.deltaTime;
        }
        // Debug.Log(TeleportBar[3].fillAmount);
        TeleportBar[3].fillAmount = teleportBarTime / teleportCooldown;
        if (animator.GetBool("Hurt"))
        {
            cameraEffect.Shake(100, 1);
            GamePad.SetVibration(0, 2f, 2f);
            StartCoroutine(timerVibrate());
        }
        Die();
        if (Input.GetButtonDown("Space"))
        {
            if (Input.GetButtonDown("Space") && (CheckRaycast(1f, Vector2.down, groundLayer).collider == null) && cnt == 0)
            {
                if (canDoubleJump == true)
                {
                    cnt++;
                    rb.velocity = new Vector2(0, 0);
                    rb.AddForce(new Vector2(0, jumpheight - 3), ForceMode2D.Impulse);
                    canDoubleJump     = false;
                    soundManager.clip = jump;
                    soundManager.Play();
                }
                //Jump();
            }
            //

            Jump();
        }
        if (Input.GetButtonDown("Teleport") && Time.time > teleportTime)
        {
            gameObject.GetComponentInChildren <TrailRenderer>().emitting = true;
            Teleport();
            teleportTime    = Time.time + teleportCooldown;
            teleportBarTime = 0;
            StartCoroutine(timer());
        }
        if (CheckRaycast(1f, Vector2.down, groundLayer).collider != null)
        {
            canDoubleJump = true;
            cnt           = 0;
        }
        if (Input.GetAxis("Horizontal") > 0.2f || Input.GetAxis("Horizontal") < -0.2f)
        {
            Move(Input.GetAxis("Horizontal"));
            //animator.SetBool("Run", true);
        }
        else
        {
            animator.SetBool("Run", false);
        }
        if (Input.GetButtonDown("Fire1") && Time.time > nextFire)
        {
            nextFire = Time.time + timeBetweenAttack;

            Attack();
        }

        /* if (Input.GetMouseButtonDown(1))
         * {
         *   //Rigidbody2D rangedBullet;
         *
         *   //rangedBullet = Instantiate(Enemy);
         *   GameObject instantiere = Instantiate(rangedBullet, new Vector3(tr.position.x + 1, tr.position.y,tr.position.z) , tr.rotation) as GameObject;
         *   //instantiere.AddComponent<Rigidbody2D>();
         *   instantiere.GetComponent<Rigidbody2D>().AddForce(new Vector2(100f, 0f),ForceMode2D.Impulse);
         *
         *
         *
         *
         * } To do ranged attack*/
        /*   if (Input.GetButtonDown("Special Attack"))
         * {
         *     if (Input.GetButtonUp("Special Attack") )
         *     {
         *         specialStart = Time.time + specialCooldown;
         *         AttackDetectHit();
         *     }
         * } to do special attack */
    }
예제 #17
0
        private void SendDamage(GameObject receiver, Object data)
        {
            StatsHandler receiverHandler = receiver.GetComponent <StatsHandler>();
            DamageData   damageData      = data as DamageData;

            //Exclude self tag, needs some kind of frieds tag system
            if (gameObject.tag == receiver.tag)
            {
                return;
            }

            if (receiverHandler != null && receiverHandler.enabled && damageData != null)
            {
                Stat sendingStat = this.m_Stats.FirstOrDefault(x => x.Name == damageData.sendingStat);
                if (sendingStat == null)
                {
                    return;
                }

                Stat criticalStrikeStat = this.m_Stats.FirstOrDefault(x => x.Name == damageData.criticalStrikeStat);

                bool criticaleStrike = criticalStrikeStat != null && criticalStrikeStat.Value > UnityEngine.Random.Range(0f, 100f);
                sendingStat.CalculateValue();
                float damage = sendingStat.Value;

                if (criticaleStrike)
                {
                    damage *= 2f;
                }

                receiverHandler.ApplyDamage(damageData.receivingStat, damage);
                EventHandler.Execute(receiver, "OnGetHit", gameObject, damageData.receivingStat, damage);

                SendMessage("UseItem", SendMessageOptions.DontRequireReceiver);

                if (damageData.particleEffect != null)
                {
                    Vector3 pos     = receiver.GetComponent <Collider>().ClosestPoint(transform.position + damageData.offset);
                    Vector3 right   = UnityEngine.Random.Range(-damageData.randomize.x, damageData.randomize.x) * transform.right;
                    Vector3 up      = UnityEngine.Random.Range(-damageData.randomize.y, damageData.randomize.y) * transform.up;
                    Vector3 forward = UnityEngine.Random.Range(-damageData.randomize.z, damageData.randomize.z) * transform.forward;

                    Vector3    relativePos = (transform.position + damageData.offset + right + up + forward) - pos;
                    GameObject effect      = Instantiate(damageData.particleEffect, pos, Quaternion.LookRotation(relativePos, Vector3.up));
                    Destroy(effect, damageData.lifeTime);
                }
                if (damageData.enableShake)
                {
                    CameraEffects.Shake(damageData.duration, damageData.speed, damageData.amount);
                }

                if (damageData.hitSounds.Length > 0)
                {
                    receiverHandler.PlaySound(damageData.hitSounds[UnityEngine.Random.Range(0, damageData.hitSounds.Length)], damageData.audioMixerGroup, damageData.volumeScale);
                }

                if (damageData.displayDamage)
                {
                    receiverHandler.DisplayDamage(damageData.damagePrefab, damage, criticaleStrike?damageData.criticalDamageColor:damageData.damageColor, damageData.intensity);
                }

                if (damageData.enableKnockback && damageData.knockbackChance > Random.Range(0f, 1f))
                {
                    StartCoroutine(Knockback(receiver, damageData));
                }

                Animator animator = receiver.GetComponent <Animator>();
                if (animator != null && animator.GetCurrentAnimatorStateInfo(0).IsName("Locomotion") && !animator.IsInTransition(0))
                {
                    animator.SetTrigger("Hit");
                }
            }
        }
예제 #18
0
    protected override void ComputeVelocity()
    {
        Vector2 move = Vector2.zero;

        playerDifference = NewPlayer.Instance.gameObject.transform.position.x - transform.position.x;
        directionSmooth += (direction - directionSmooth) * Time.deltaTime * changeDirectionEase;
        if (!NewPlayer.Instance.frozen && !recovering)
        {
            move.x = 1 * directionSmooth;

            //Flip the graphic depending on the speed
            if (move.x < 0.01f)
            {
                if (graphic.transform.localScale.x < 0)
                {
                    graphic.transform.localScale = new Vector3(origLocalScale.x, transform.localScale.y, transform.localScale.z);
                }
            }
            else if (move.x > -0.01f)
            {
                if (graphic.transform.localScale.x > 0)
                {
                    graphic.transform.localScale = new Vector3(-origLocalScale.x, transform.localScale.y, transform.localScale.z);
                }
            }

            //Check floor type
            ground = Physics2D.Raycast(transform.position, -Vector2.up);
            Debug.DrawRay(transform.position, -Vector2.up, Color.green);



            //Check if player is within range to follow

            if (enemyType == EnemyType.Zombie)
            {
                if ((Mathf.Abs(playerDifference) < followRange))
                {
                    followPlayer = true;
                }
                else
                {
                    followPlayer = false;
                }
            }

            if (followPlayer)
            {
                if (BossShake)
                {
                    cameraEffect.Shake(7, 1);
                    GamePad.SetVibration(0, 0.25f, 0.25f);
                    StartCoroutine(timer());
                }

                if (playerDifference < 0)
                {
                    direction = -1;
                }
                else
                {
                    direction = 1;
                }
            }
            else
            {
                //Allow enemy to instantly change direction when not following player
                directionSmooth = direction;
            }



            //Check for walls
            rightWall = Physics2D.Raycast(new Vector2(transform.position.x + rayCastOffset.x, transform.position.y + rayCastOffset.y), Vector2.right, 1f, layerMask);
            Debug.DrawRay(new Vector2(transform.position.x, transform.position.y + rayCastOffset.y), Vector2.right, Color.yellow);

            if (rightWall.collider != null)
            {
                if (!followPlayer)
                {
                    direction = -1;
                }
                else
                {
                    Jump();
                }
            }

            leftWall = Physics2D.Raycast(new Vector2(transform.position.x - rayCastOffset.x, transform.position.y + rayCastOffset.y), Vector2.left, 1f, layerMask);
            Debug.DrawRay(new Vector2(transform.position.x, transform.position.y + rayCastOffset.y), Vector2.left, Color.blue);

            if (leftWall.collider != null)
            {
                if (!followPlayer)
                {
                    direction = 1;
                }
                else
                {
                    Jump();
                }
            }


            //Check for ledges
            if (!followPlayer)
            {
                rightLedge = Physics2D.Raycast(new Vector2(transform.position.x + rayCastOffset.x, transform.position.y), Vector2.down, .5f);
                Debug.DrawRay(new Vector2(transform.position.x + rayCastOffset.x, transform.position.y), Vector2.down, Color.blue);
                if (rightLedge.collider == null)
                {
                    direction = -1;
                }

                leftLedge = Physics2D.Raycast(new Vector2(transform.position.x - rayCastOffset.x, transform.position.y), Vector2.down, .5f);
                Debug.DrawRay(new Vector2(transform.position.x - rayCastOffset.x, transform.position.y), Vector2.down, Color.blue);

                if (leftLedge.collider == null)
                {
                    direction = 1;
                }
            }



            //Recovery after being hit
        }
        else if (recovering)
        {
            recoveryCounter += Time.deltaTime;
            move.x           = launch;
            launch          += (0 - launch) * Time.deltaTime;
            if (recoveryCounter >= recoveryTime)
            {
                recoveryCounter = 0;
                recovering      = false;
            }
        }

        animator.SetBool("grounded", grounded);
        animator.SetFloat("velocityX", Mathf.Abs(velocity.x) / maxSpeed);
        targetVelocity = move * maxSpeed;
    }