Beispiel #1
0
    public GameObject ResetBall()
    {
        DestroyAllBalls();

        return(WadeUtils.Instantiate(ballPrefab));
    }
Beispiel #2
0
    void OnMouseDrag()
    {
        if (_activeInputLens != null)
        {
            Vector2 screenMin = Vector2.zero;
            Vector2 screenMax = new Vector2(Screen.width, Screen.height);

            Vector3 mousePos = ((Vector3)WadeUtils.Clamp((Vector2)Input.mousePosition, screenMin, screenMax)).SetZ(Input.mousePosition.z);

            Vector2 screenBoundDiff = screenMax - screenMin;
            screenMin += screenBoundDiff * 0.001f;
            screenMax -= screenBoundDiff * 0.001f;
            mousePos   = ((Vector3)WadeUtils.Clamp((Vector2)mousePos, screenMin, screenMax)).SetZ(mousePos.z);

            Vector3 worldPos          = Camera.main.ScreenToWorldPoint(mousePos);
            Vector3 rotatePivotOffset = _rotatePivot.position - transform.position;
            transform.position = worldPos + Camera.main.transform.forward * _selectedCamOffset - rotatePivotOffset;

            bool uiOverlap = RectTransformUtility.RectangleContainsScreenPoint(GetBreed().GetBreedRect(), mousePos, Camera.main);
            if (uiOverlap != _prevUIOverlap)
            {
                if (_changeScaleRoutine != null)
                {
                    StopCoroutine(_changeScaleRoutine);
                }

                _changeScaleRoutine = StartCoroutine(ChangeScaleRoutine(uiOverlap));

                _groundShadow.GetShadow().gameObject.SetActive(!uiOverlap);
                _prevUIOverlap = uiOverlap;
            }

            if (!uiOverlap)
            {
                if (Physics.Raycast(worldPos, Camera.main.transform.forward - Camera.main.transform.up * 0.17f, out _hitInfo, Mathf.Infinity, _planetLayer, QueryTriggerInteraction.Ignore))
                {
                    _groundShadow.SetPos(_hitInfo.point);
                }
            }

            bool leftOverlap = RectTransformUtility.RectangleContainsScreenPoint(GetBreed().GetLeftRotateRect(), mousePos, Camera.main);
            if (leftOverlap != _prevLeftOverlap)
            {
                if (leftOverlap)
                {
                    GameSounds.PostEvent2D(GameSound.SFX_BlockRotateCounterClockwise);

                    if (_rotateRoutine != null)
                    {
                        StopCoroutine(_rotateRoutine);
                    }

                    _rotateRoutine = StartCoroutine(RotateRoutine(false));
                }

                _prevLeftOverlap = leftOverlap;
            }

            bool rightOverlap = RectTransformUtility.RectangleContainsScreenPoint(GetBreed().GetRightRotateRect(), mousePos, Camera.main);
            if (rightOverlap != _prevRightOverlap)
            {
                if (rightOverlap)
                {
                    GameSounds.PostEvent2D(GameSound.SFX_BlockRotateClockwise);

                    if (_rotateRoutine != null)
                    {
                        StopCoroutine(_rotateRoutine);
                    }

                    _rotateRoutine = StartCoroutine(RotateRoutine(true));
                }

                _prevRightOverlap = rightOverlap;
            }

            _spriteToSlotMap.Clear();
            List <BitSlotWidget> bitSlots = GetBreed().GetBitSlots();
            for (int i = 0; i < bitSlots.Count; i++)
            {
                bitSlots[i].SetHighlight(false);
            }

            for (int i = 0; i < _bitSprites.Length; i++)
            {
                SpriteRenderer bitSprite     = _bitSprites[i];
                Vector3        spriteViewPos = Camera.main.WorldToViewportPoint(bitSprite.transform.position);
                for (int j = 0; j < bitSlots.Count; j++)
                {
                    BitSlotWidget bitSlot = bitSlots[j];
                    if (!bitSlot.used)
                    {
                        Vector3 slotViewPos = Camera.main.WorldToViewportPoint(bitSlot.transform.position);
                        if (Vector2.Distance(spriteViewPos, slotViewPos) < _gridSlotMaxDist)
                        {
                            // Temp-mark used so slots are distinct
                            bitSlot.used = true;
                            bitSlot.SetHighlight(true);
                            _spriteToSlotMap.Add(bitSprite, bitSlot);
                            break;
                        }
                    }
                }
            }

            // Unmark temp-used slots
            foreach (var kvp in _spriteToSlotMap)
            {
                kvp.Value.used = false;
            }

            ResetFadeoutTimer();
        }
    }
Beispiel #3
0
 public Color HSVToRGB()
 {
     return(WadeUtils.HSVToRGB(this));
 }
Beispiel #4
0
 public Vector4 Clamp(Vector4 v)
 {
     return(WadeUtils.Clamp(v, min, max));
 }
Beispiel #5
0
    IEnumerator PukeEffects(bool spawnBall)
    {
        isPuking  = true;
        pukeTimer = 0.0f;
        bool ballSpawned = !spawnBall;

        Vector3 initMouthScale = mouth.localScale;

        GameObject pukeEffectObj = WadeUtils.Instantiate(pukeEffectPrefab, transform.position, transform.rotation);

        mouth.GetComponent <SpriteRenderer>().sprite = openSprite;

        GetComponent <Rigidbody2D>().velocity = Vector3.zero;
        for (int i = 0; i < segments.Length; i++)
        {
            segments[i].GetComponent <Rigidbody2D>().velocity = Vector3.zero;
        }

        while (pukeTimer < pukeTime)
        {
            if (pukeEffectObj)
            {
                pukeEffectObj.transform.position       = mouth.position;
                pukeEffectObj.transform.rotation       = transform.rotation;
                pukeEffectObj.transform.localRotation *= Quaternion.Euler(-90.0f, 0.0f, 0.0f);
            }

            if (pukeTimer > pukeTimer / 10.0f)
            {
                mouth.localScale = new Vector3(1.0f + Mathf.Cos(pukeTimer * 20.0f) / 2.0f, mouth.localScale.y, mouth.localScale.z);
            }

            if (pukeTimer > pukeTimer / 3.0f)
            {
                if (!ballSpawned)
                {
                    GameObject ballObj = WadeUtils.Instantiate(ballPrefab, transform.position + transform.up, transform.rotation);
                    ballObj.layer = LayerMask.NameToLayer("IgnorePlayer");
                    ballObj.GetComponent <Rigidbody2D>().AddForce(transform.up * pukeForce * 100);
                    ballObj.GetComponent <Rigidbody2D>().AddTorque(pukeForce * 0.01f);

                    Ball ball = ballObj.GetComponent <Ball>();
                    ball.StartCoroutine(ball.ScaleUp(0.0f));
                    ballSpawned = true;
                }
                else
                {
                    GetComponent <Rigidbody2D>().AddForce(-transform.up * pukeForce * (1.0f - pukeTimer / pukeTime));
                    for (int i = 0; i < segments.Length; i++)
                    {
                        segments[i].GetComponent <Rigidbody2D>().AddForce(-transform.up * pukeForce * (1.0f - pukeTimer / pukeTime));
                    }
                }
            }

            if (pukeTimer > pukeTime * 0.5f)
            {
                if (pukeEffectObj)
                {
                    pukeEffectObj.GetComponent <ParticleSystem>().enableEmission = false;
                }
            }
            else
            {
                GetComponent <Rigidbody2D>().AddForce(-transform.up * pukeForce);
            }

            pukeTimer += Time.deltaTime;
            yield return(0);
        }

        pukeTimer = 0.0f;
        mouth.GetComponent <SpriteRenderer>().sprite = closedSprite;

        while (Vector3.Distance(mouth.localScale, Vector3.one) > 0.05f)
        {
            mouth.localScale = Vector3.Lerp(mouth.localScale, Vector3.one, Time.deltaTime);
            yield return(0);
        }

        Destroy(pukeEffectObj);
        mouth.localScale = initMouthScale;

        isPuking = false;
    }
Beispiel #6
0
    void Update()
    {
        if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.LeftArrow))
        {
            ChangeTeamColor(0, -1f);
        }

        if (Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.RightArrow))
        {
            ChangeTeamColor(0, 1f);
        }

        if (!Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.LeftArrow))
        {
            ChangeTeamColor(1, -1f);
        }

        if (!Input.GetKey(KeyCode.LeftShift) && Input.GetKeyDown(KeyCode.RightArrow))
        {
            ChangeTeamColor(1, 1f);
        }

        // 1 -> 1
        // 2 -> 5
        // 3 -> 2
        // 4 -> 6
        // 5 -> 3
        // 6 -> 7
        // 7 -> 4
        // 8 -> 8

        for (int i = 0; i < 8; i++)
        {
            int evenTeamNum = WadeUtils.GetOrderedPlayerNum(i);

            if (playerInfos[evenTeamNum].inputTimer > inputTime)
            {
                // Join Game
                if (!playerInfos[evenTeamNum].joined && Input.GetButtonDown("Propel_P" + (i + 1) + WadeUtils.platformName))
                {
                    PlayerJoinGame(evenTeamNum, i);
                    playerInfos[evenTeamNum].inputTimer = 0f;
                }

                // Leave Game
                if (playerInfos[evenTeamNum].joined && Input.GetButtonDown("Leave_P" + (i + 1) + WadeUtils.platformName))
                {
                    PlayerLeaveGame(evenTeamNum);
                    playerInfos[evenTeamNum].inputTimer = 0f;
                }

                // Change Texure
                float scrollInput = Input.GetAxis("Horizontal_P" + (i + 1));
                if (playerInfos[evenTeamNum].joined && Mathf.Abs(scrollInput) > WadeUtils.SMALLNUMBER)
                {
                    PlayerChangeSprite(evenTeamNum, scrollInput);
                    playerInfos[evenTeamNum].inputTimer = 0f;
                }

                // Change Team Color
                float bumperInput = Input.GetAxis("Bumper_P" + (i + 1) + WadeUtils.platformName);
                if (playerInfos[evenTeamNum].joined & Mathf.Abs(bumperInput) > WadeUtils.SMALLNUMBER)
                {
                    ChangeTeamColor(evenTeamNum < 4 ? 0 : 1, bumperInput);
                    playerInfos[evenTeamNum].inputTimer = 0f;
                }
            }

            playerInfos[evenTeamNum].inputTimer += Time.deltaTime;
        }
    }