예제 #1
0
    public void Update()
    {
        if (WorldInitializer.storyKnot != null && WorldInitializer.storyKnot.Length > 0)
        {
            StartCoroutine(StoryFunctionBindings.GetBindings().interact(WorldInitializer.storyKnot));
            WorldInitializer.storyKnot = null;
        }

        if (currentAttachement != null && player != null)
        {
            Vector3 playerPos = player.transform.position;
            Vector2 minOffset = playerPos - worldBounds.min;
            Vector2 maxOffset = playerPos - worldBounds.max;

            for (int i = 0; i < mapDirection.Length; ++i)
            {
                if (currentAttachement.attachments[i] != null && currentAttachement.attachments[i] != "" && Vector2.Dot(minOffset, mapDirection[i]) > 0 && Vector2.Dot(maxOffset, mapDirection[i]) > 0)
                {
                    string nextMap = currentAttachement.attachments[i];
                    Reset();
                    SpawnMapPair(nextMap,
                                 new Vector3(
                                     Mathf.Lerp(worldBounds.min.x, worldBounds.max.x, currentBoundsAnchor[i].x),
                                     Mathf.Lerp(worldBounds.min.y, worldBounds.max.y, currentBoundsAnchor[i].y),
                                     0.0f
                                     ),
                                 newBoundAnchor[i]
                                 );
                    break;
                }
            }
        }
    }
    public virtual IEnumerator interact()
    {
        if (storyEntryPoint != null)
        {
            var other = StoryFunctionBindings.GetBindings().interact(storyEntryPoint);

            while (other.MoveNext())
            {
                yield return(other.Current);
            }
        }
        else
        {
            yield return(null);
        }
    }
예제 #3
0
    public static IEnumerator Start(DarknessOverlay darkness, AnimationController playerAnimator, SpriteRenderer playerSpriteRenderer, Flasher damageFlasher)
    {
        damageFlasher.enabled = false;
        Time.timeScale        = 0.0f;

        float spinTime       = 2.0f;
        float spinRate       = 16.0f;
        float endSpinRate    = 2.0f;
        float spinRateChange = (endSpinRate - spinRate) / spinTime;
        float angle          = 0.0f;

        float startRadius      = 12.0f;
        float endRadius        = 0.0f;
        float darkesRadius     = startRadius;
        float radiusChangeRage = (endRadius - startRadius) / spinTime;

        playerSpriteRenderer.sortingLayerName = "Overlay";

        int animation = darkness.StartAnimation();

        darkness.SetColor(Color.black, animation);

        playerAnimator.SetFloat("Distance", 0.0f);

        while (spinTime > 0.0f)
        {
            playerAnimator.SetInteger("Direction", Mathf.FloorToInt(angle));
            angle    += spinRate * Time.unscaledDeltaTime;
            spinRate += spinRateChange * Time.unscaledDeltaTime;
            spinTime -= Time.unscaledDeltaTime;

            darkness.UpdateValues(playerAnimator.transform.position, darkesRadius, animation);

            darkesRadius += radiusChangeRage * Time.unscaledDeltaTime;

            yield return(null);
        }

        playerAnimator.SetInteger("Direction", 0);

        yield return(new WaitForSecondsRealtime(1.0f));

        GameObject.FindGameObjectWithTag("GameController").GetComponent <WorldController>().SwitchTo(MapDirections.Dead);
        playerAnimator.SetBool("Dead", true);

        yield return(new WaitForSecondsRealtime(1.0f));

        while (darkesRadius < startRadius)
        {
            darkesRadius -= 2.0f * radiusChangeRage * Time.unscaledDeltaTime;
            darkness.UpdateValues(playerAnimator.transform.position, darkesRadius, animation);
            yield return(null);
        }

        playerAnimator.SetBool("Dead", false);
        darkness.EndAnimation(animation);
        playerSpriteRenderer.sortingLayerName = "Default";
        Time.timeScale = 1.0f;
        yield return(null);

        yield return(StoryFunctionBindings.GetBindings().interact("on_player_death"));
    }