예제 #1
0
 override protected void FixedUpdate()
 {
     base.FixedUpdate();
     if (isFlying || isBouncing || isFalling)
     {
         return;
     }
     MapController.MapTile tt = MapController.Instance.GetTile(transform.position);
     if (Vector3.Distance(transform.position, tt.GetCenter()) <= pushMove.magnitude * Time.fixedDeltaTime * Speed)
     {
         CheckTile();
     }
     explosionTimer -= Time.fixedDeltaTime;
     Timer          += Time.fixedDeltaTime;
     if (explosionTimer <= 0)
     {
         Explode();
         return;
     }
     if (Timer > AnimationSpeed)
     {
         AnimationPos++;
         AnimationPos %= NumberOfSprites;
         float scale = 1 + 0.05f * ((float)AnimationPos / (float)NumberOfSprites);
         Renderer.gameObject.transform.localScale = new Vector3(scale, scale);
         Timer = 0;
     }
     Renderer.sprite = BombSprites[AnimationPos];
     Rigidbody.MovePosition(transform.position + pushMove * Time.fixedDeltaTime * Speed);
 }
예제 #2
0
 internal void Set(Sprite[] bombSprites, int strength, Character charakter)
 {
     NumberOfSprites   = bombSprites.Length;
     BombSprites       = bombSprites;
     Strength          = strength;
     PlacedByCharakter = charakter;
     tile = MapController.Instance.GetTile(transform.position);
 }
예제 #3
0
 protected override void CheckTile()
 {
     MapController.MapTile tt = MapController.Instance.GetTile(transform.position);
     switch (tt.Type)
     {
     case TileType.Empty:
         if (gameObject.layer == LayerMask.NameToLayer("FLYING"))
         {
             return;
         }
         gameObject.layer = LayerMask.NameToLayer("FLYING");
         GetComponent <AudioSource>().PlayOneShot(fallingClip);
         StartCoroutine(Falling());
         break;
     }
 }
예제 #4
0
    public void SetSpawnPosition(List <MapController.MapTile> spawnPoints)
    {
        if (spawnPoints == null)
        {
            return;
        }
        List <MapController.MapTile> spawns = new List <MapController.MapTile>(spawnPoints);

        for (int i = 0; i < Players.Count; i++)
        {
            PlayerData            pd    = Players[i];
            MapController.MapTile spawn = null;
            if (RandomSpawns)
            {
                spawn = spawns[UnityEngine.Random.Range(0, spawns.Count)];
                spawns.Remove(spawn);
            }
            pd.PlayerMove.FlyToTarget(spawn.GetCenter(), false, true);
        }
    }
예제 #5
0
    protected override void CheckTile()
    {
        MapController.MapTile tt = MapController.Instance.GetTile(transform.position);
        IsOnIce = false;
        switch (tt.Type)
        {
        case TileType.Empty:
            if (gameObject.layer == LayerMask.NameToLayer("FLYING"))
            {
                return;
            }
            gameObject.layer = LayerMask.NameToLayer("FLYING");
            Rigidbody.MovePosition(tt.GetCenter());
            audioSource.PlayOneShot(PlayerData.FallSound);
            PlayerData.Die();
            StartCoroutine(Falling());
            break;

        case TileType.Ice:
            IsOnIce = true;
            break;
        }
    }
예제 #6
0
    protected override void CheckTile()
    {
        Collider2D[] c2ds = Physics2D.OverlapCircleAll(transform.position, HitBox.radius - 0.1f);
        if (Array.Exists(c2ds, x => x.GetComponent <PlayerMove>() != null) == false)
        {
            //noo player so change layer
            gameObject.layer = finalLayer;
        }
        MapController.MapTile tt = MapController.Instance.GetTile(transform.position);
        if (tt.HasBomb && tt.Bomb != this)
        {
            if (isThrown)
            {
                Debug.Log("BOUNCE");
                //go one move space over But on if Space
                TileType nextType = MapController.Instance.GetTileTypeAt(tt.GetCenter() + flyMove);
                if (nextType != TileType.Wall)
                {
                    FlyToTarget(tt.GetCenter() + flyMove, true); //go to next
                }
                else
                {
                    FlyToTarget(transform.position, true); //bounce
                }
            }
            else
            {
                FlyToTarget(transform.position);
                return;
            }
        }
        else if (tt.HasBomb == false)
        {
            tile      = tt;
            tile.Bomb = this;
        }
        switch (tt.Type)
        {
        case TileType.Empty:
            if (gameObject.layer == LayerMask.NameToLayer("FLYING"))
            {
                return;
            }
            isFalling        = true;
            gameObject.layer = LayerMask.NameToLayer("FLYING");
            GetComponent <AudioSource>().PlayOneShot(fallingClip);
            StartCoroutine(Falling());
            tile.Bomb = null;
            break;

        case TileType.Hole:
            explosionTimer     = 12f;
            transform.position = tt.GetCenter();
            Renderer.gameObject.SetActive(false);
            gameObject.layer = LayerMask.NameToLayer("FLYING");
            tile.Bomb        = null;
            StartCoroutine(Hole());
            break;

        case TileType.ArrowUp:
            if (pushMove == Vector3.up)
            {
                return;
            }
            transform.position = tt.GetCenter();
            pushMove           = Vector3.up;
            break;

        case TileType.ArrowDown:
            if (pushMove == Vector3.down)
            {
                return;
            }
            transform.position = tt.GetCenter();
            pushMove           = Vector3.down;
            break;

        case TileType.ArrowLeft:
            if (pushMove == Vector3.left)
            {
                return;
            }
            transform.position = tt.GetCenter();
            pushMove           = Vector3.left;
            break;

        case TileType.ArrowRight:
            if (pushMove == Vector3.right)
            {
                return;
            }
            transform.position = tt.GetCenter();
            pushMove           = Vector3.right;
            break;

        case TileType.Box:
        case TileType.ExplodedBox:
            gameObject.layer = LayerMask.NameToLayer("THROWN");
            break;
        }
    }
예제 #7
0
 void Update()
 {
     if (isFalling || isFlying)
     {
         return;
     }
     CheckTile();
     if (PlayerData.IsDead)
     {
         return;
     }
     if (IsUPDown())
     {
         moves.Remove(Vector3.up);
         moves.Insert(0, Vector3.up);
     }
     if (IsDownDown())
     {
         moves.Remove(Vector3.down);
         moves.Insert(0, Vector3.down);
     }
     if (IsRightDown())
     {
         moves.Remove(Vector3.right);
         moves.Insert(0, Vector3.right);
     }
     if (IsLeftDown())
     {
         moves.Remove(Vector3.left);
         moves.Insert(0, Vector3.left);
     }
     if (IsUPUp())
     {
         moves.Remove(Vector3.up);
     }
     if (IsDownUp())
     {
         moves.Remove(Vector3.down);
     }
     if (IsRightUp())
     {
         moves.Remove(Vector3.right);
     }
     if (IsLeftUp())
     {
         moves.Remove(Vector3.left);
     }
     if (IsAction() || HasDiarrhea)
     {
         if (CanThrowBombs && MapController.Instance.GetTile(transform.position).Bomb != null)
         {
             Bomb b = MapController.Instance.GetTile(transform.position).Bomb;
             b.ResetTile();
             //gameObject.layer = LayerMask.NameToLayer("Player");
             b.FlyToTarget(this.transform.position + LastMove * throwDistance, true);
         }
         else
         if (PlacedBombs < NumberBombs)
         {
             MapController.MapTile mt = MapController.Instance.GetTile(transform.position);
             if (HasDiarrhea || mt.HasBomb == false)
             {
                 BombCooldown                = BombCooldownTime;
                 lastPlacedBomb              = BombController.Instance.PlaceBomb(PlayerData.Character, transform.position, this, HasDiarrhea);
                 lastPlacedBomb.OnDestroycb += OnBombExplode;
                 PlacedBombs++;
             }
         }
     }
     if (BombCooldown > 0)
     {
         BombCooldown -= Time.deltaTime;
     }
 }