Ejemplo n.º 1
0
    public override IEnumerator Execute()
    {
        var before     = Player.playerInstance.AllowMovement;
        var controller = NPCList.GetNPC(npc);

        Player.playerInstance.AllowMovement = false;

        var cameraFader = Camera.main.GetComponentInChildren <CameraFader>();

        if (!instantTP)
        {
            cameraFader.StartFading();

            yield return(new WaitUntil(() => cameraFader.finishedFading));
        }

        var telePos = (Vector3)TeleportPosition;

        controller.transform.position = telePos + new Vector3(0f, .5f, 0f);
        controller.StallMovement();
        if (facingDirection != SpriteDir.None)
        {
            controller.SetFacingDirection(facingDirection);
        }
        controller.boxCollider.transform.localPosition = Vector3.zero;

        if (KeepCameraInBounds.instance.objectToFollow == controller.gameObject)
        {
            Camera.main.SendMessage("UpdateBounds");
        }

        if (!instantTP)
        {
            cameraFader.StartUnfading();

            yield return(new WaitUntil(() => cameraFader.finishedFading));
        }

        controller.boxCollider.transform.localPosition = Vector3.zero;
        Player.playerInstance.AllowMovement            = before;

        yield return(null);
    }
Ejemplo n.º 2
0
    public override IEnumerator Execute()
    {
        var controller  = NPCList.GetNPC(npc);
        var before      = controller.AllowMovement;
        var beforeSpeed = controller.moveSpeed;

        switch (speed)
        {
        case Speed.OneEighthNormal: controller.moveSpeed = 1f; break;

        case Speed.OneFourthNormal: controller.moveSpeed = 2f; break;

        case Speed.HalfNormal: controller.moveSpeed = 4f; break;

        case Speed.Normal: controller.moveSpeed = 8f; break;

        case Speed.TwiceNormal: controller.moveSpeed = 16f; break;

        case Speed.FourTimesNormal: controller.moveSpeed = 32f; break;
        }

        for (int i = 0; i < times; i++)
        {
            controller.AllowMovement = true;
            controller.SetFacingDirection(controller.DirFromVector(directDir));
            controller.ForceMove(directDir);
            controller.AllowMovement = false;

            if (!noWait)
            {
                yield return(new WaitUntil(() => controller.stoppedOnTile));
            }
        }

        if (!noWait)
        {
            controller.moveSpeed     = beforeSpeed;
            controller.AllowMovement = before;
        }

        yield return(null);
    }
Ejemplo n.º 3
0
    void Update()
    {
        NPCController follower = null;

        if (Global.s.ExtraParkPartyMember == 1)
        {
            follower = NPCList.GetNPC(NPC.Hus);
        }
        else if (Global.s.ExtraParkPartyMember == 2)
        {
            follower = NPCList.GetNPC(NPC.Chi);
        }

        var distance = Vector2.Distance(transform.position, Player.playerInstance.transform.position);

        if (Global.s.ShibeInParty > 0 && Global.s.ShibeAbleToFollow > 0 && controller.standingStill)
        {
            if (distance < 5)
            {
                var beforeFacing = controller.facingDir;
                var dir          = controller.DirFromVector(lastTargetPos - transform.position);
                controller.TryMove(dir, false);

                if (controller.standingStill || Player.playerInstance.standingStill)
                {
                    controller.SetFacingDirection(beforeFacing);
                }
                else if (follower != null && !controller.standingStill)
                {
                    var followerDir = transform.position - follower.transform.position;

                    if (followerDir.magnitude < 5)
                    {
                        follower.SetFacingDirection(follower.DirFromVector(followerDir));
                        follower.ForceMove(followerDir);
                    }
                    else
                    {
                        follower.transform.position = transform.position;
                    }
                }
            }
            else
            {
                //distance is >= 5 tiles, teleport
                if (!Player.playerInstance.standingStill)
                {
                    controller.SetFacingDirection(lastTargetFacing);
                    transform.position = lastTargetPos;
                    if (follower != null)
                    {
                        follower.transform.position = transform.position;
                    }
                }
            }
        }

        if (Global.s.ShibeInParty > 0 && Global.s.ShibeAbleToFollow > 0 && (!Player.playerInstance.standingStill || !lastStandingStill) && distance <= 2.1f)
        {
            var movePercentage = Player.playerInstance.movePercentage;

            if (movePercentage < 1f)
            {
                var pos = Vector3.Lerp(transform.position, controller.boxCollider.transform.position, movePercentage);

                //snap to the 16 pixel grid
                controller.anim.transform.position = new Vector3(((int)(pos.x * 16) / 16f), ((int)(pos.y * 16) / 16f), controller.anim.transform.position.z);

                if (follower != null)
                {
                    var followerPos = Vector3.Lerp(follower.transform.position, follower.boxCollider.transform.position, movePercentage);
                    follower.anim.transform.position = new Vector3(((int)(followerPos.x * 16) / 16f), ((int)(followerPos.y * 16) / 16f), follower.anim.transform.position.z);
                }
            }
            else
            {
                movePercentage     = 1f;
                transform.position = controller.boxCollider.transform.position;
                controller.boxCollider.transform.localPosition = Vector3.zero;
                controller.anim.transform.localPosition        = Vector3.zero;
                controller.standingStill = true;
                controller.stoppedOnTile = true;

                if (follower != null)
                {
                    movePercentage = 1f;
                    follower.transform.position = follower.boxCollider.transform.position;
                    follower.boxCollider.transform.localPosition = Vector3.zero;
                    follower.anim.transform.localPosition        = Vector3.zero;
                    follower.standingStill = true;
                    follower.stoppedOnTile = true;
                }
            }
        }

        Debug.DrawLine(lastTargetPos, lastTargetPos + Vector3.up + Vector3.right);
        lastTargetPos     = Player.playerInstance.transform.position;
        lastTargetFacing  = Player.playerInstance.facingDir;
        lastStandingStill = Player.playerInstance.standingStill;
    }
Ejemplo n.º 4
0
    void check()
    {
        var s     = Global.ActiveSavefile;
        var up    = (Vector3)Vector2.up;
        var right = (Vector3)Vector2.right;
        var down  = (Vector3)Vector2.down;
        var left  = (Vector3)Vector2.left;
        var hus   = NPCList.GetNPC(NPC.Hus);
        var chi   = NPCList.GetNPC(NPC.Chi);

        if (Global.s.DogTalk > 0)
        {
            //yooooo just gonna override all the other stuff so I don't have to worry about figuring out what needs to be moved where
            //not going to be teleporting NPCs around based on variables

            if (s.RedSpace == 2)
            {
                purpleSpacePan.speed = 3f;
            }
            else if (s.RedSpace == 3)
            {
                purpleSpacePan.speed = 6f;
            }
            else if (s.RedSpace == 4)
            {
                purpleSpace.sprite   = purpleSpaceSprite;
                purpleSpacePan.speed = 0f;
            }

            return;
        }

        if (s.SharpeiTalk.value == 3)
        {
            if (s.ShibeInParty > 0)
            {
                NPCList.GetNPC(NPC.Sharpeii).transform.position = new Vector3(18.5f, -55f);
            }
            else
            {
                NPCList.GetNPC(NPC.Sharpeii).transform.position = nullPos;
            }
        }
        else
        {
            NPCList.GetNPC(NPC.Sharpeii).transform.position = new Vector3(21.5f, -56f);
        }

        if (s.DustBunny == 0)
        {
            dustBunny.transform.position = new Vector3(63.5f, 56.5f);
        }
        else
        {
            dustBunny.transform.position = nullPos;
        }

        switch (Global.s.StoneBlockSearch)
        {
        case 0:
        case 1:
        case 2:
        case 3: stoneBlock.sprite = null; break;

        case 4:
        case 5: stoneBlock.sprite = stoneBlockSprites[1]; break;

        case 6: stoneBlock.sprite = stoneBlockSprites[2]; break;

        case 7: stoneBlock.sprite = stoneBlockSprites[3]; break;

        case 8: stoneBlock.sprite = stoneBlockSprites[4]; break;

        case 9: stoneBlock.sprite = stoneBlockSprites[5]; break;
        }

        if (s.ParkState == 0)
        {
            shermanBlock.transform.position = new Vector3(64f, -17.5f);
        }
        else
        {
            shermanBlock.transform.position = nullPos;
        }

        if (s.ParkState == 0)
        {
            closeToSherman.transform.position = new Vector3(64f, -16.5f);
        }
        else
        {
            closeToSherman.transform.position = nullPos;
        }

        if (s.ParkState == 1)
        {
            exitParkTrigger.transform.position = new Vector3(64f, -17.5f);
        }
        else
        {
            exitParkTrigger.transform.position = nullPos;
        }

        if (s.ParkState == 1)
        {
            noLeaveParkTown.transform.position = new Vector3(34.5f, -20f);
        }
        else
        {
            noLeaveParkTown.transform.position = nullPos;
        }

        if (s.ParkState == 1)
        {
            noLeaveParkObservatory.transform.position = new Vector3(51f, -25.5f);
        }
        else
        {
            noLeaveParkObservatory.transform.position = nullPos;
        }

        if (s.ParkState == 2)
        {
            parkFinishedTrigger.transform.position = new Vector3(64.5f, -17.5f);
        }
        else
        {
            parkFinishedTrigger.transform.position = nullPos;
        }

        if (s.ParkState == 2)
        {
            lineBlock.transform.position = nullPos;
        }
        else
        {
            lineBlock.transform.position = new Vector3(66.5f, -21.5f);
        }

        if (s.ParkState > 0)
        {
            chiController.ConstantlyWalk = false;
        }
        else
        {
            chiController.ConstantlyWalk = true;
        }

        if (s.StoneBlockSearch == 3)
        {
            s.ShibeTalk.value = 6;
        }

        if (s.CrestTalk == 4)
        {
            crestHouseExitBlocker.SetActive(true); foreach (var exit in crestHouseExits)
            {
                exit.SetActive(false);
            }
        }
        else
        {
            crestHouseExitBlocker.SetActive(false); foreach (var exit in crestHouseExits)
            {
                exit.SetActive(true);
            }
        }

        if (s.CrestTalk >= 2 && s.CrestTalk <= 4)
        {
            spider.SetActive(true);
        }
        if (s.CrestTalk == 5)
        {
            spider.transform.position = nullPos;
        }
        else if (s.PuddleTalk == 3)
        {
            spider.SetActive(false);
        }

        var crest  = NPCList.GetNPC(NPC.Crest);
        var puddle = NPCList.GetNPC(NPC.Puddle);

        if (s.CrestTalk == 2)
        {
            crest.transform.position  = new Vector3(2.5f, -50f);
            puddle.transform.position = nullPos;
        }

        if (oldCrestTalk != s.CrestTalk)
        {
            var defaultPos = new Vector3(-0.5f, -50f);

            switch (s.CrestTalk)
            {
            case 2: crest.transform.position = defaultPos + (right * 3); break;

            case 7: crest.transform.position = defaultPos + (left * 6); break;

            case 8: crest.transform.position = defaultPos + (left * 6) + (up * 2); break;

            case 9: crest.transform.position = defaultPos + (left * 10) + (up * 9); break;
            }

            oldCrestTalk = s.CrestTalk;
        }

        if (oldPuddleTalk != s.PuddleTalk)
        {
            var defaultPos = new Vector3(-10.5f, -41f);

            switch (s.PuddleTalk)
            {
            case 0:
            case 4: puddle.transform.position = defaultPos; break;

            case 2: puddle.transform.position = defaultPos + (down * 12) + (left * 1); puddle.SetFacingDirection(SpriteDir.Up); break;

            case 3: puddle.transform.position = defaultPos + (down * 11) + (left * 1); break;

            case 5: puddle.transform.position = new Vector3(-0.5f, -50f); break;
            }

            oldPuddleTalk = s.PuddleTalk;
        }

        if (oldParkState != s.ParkState)
        {
            FastFrisbees.SetActive(s.ParkState == 0 || s.ParkState == 1);
            SlowFrisbees.SetActive(s.ParkState == 2);

            if (oldParkState != 2 && s.ParkState == 2)
            {
                NPCList.GetNPC(NPC.Goldie).transform.position  = nullPos;
                NPCList.GetNPC(NPC.Labra).transform.position   = nullPos;
                NPCList.GetNPC(NPC.Sherman).transform.position = nullPos;
                NPCList.GetNPC(NPC.Chi).transform.position     = nullPos;
                NPCList.GetNPC(NPC.Alma).transform.position    = new Vector2(44.5f, -4f);
            }

            oldParkState = s.ParkState;
        }

        if (oldFrisbeeTrap != s.FrisbeeTrap)
        {
            SuperFrisbee.SetActive(s.FrisbeeTrap == 1);
            FrisbeeTrap.SetActive(s.FrisbeeTrap == 1);
            FrisbeeTrapTrigger.SetActive(s.FrisbeeTrap <= 1);

            oldFrisbeeTrap = s.FrisbeeTrap;
        }

        MachineCheckedTrigger.SetActive(Global.s.MachineChecked < 1 && Global.s.ParkState == 1);

        if (oldExtraParty != 2 && s.ExtraParkPartyMember == 2)
        {
            oldExtraParty = 2;

            var oldHusPos  = hus.transform.position;
            var oldHusLook = hus.facingDir;

            hus.transform.position = chi.transform.position;
            hus.SetFacingDirection(SpriteDir.Up);

            chi.transform.position = oldHusPos;
            chi.SetFacingDirection(oldHusLook);
        }

        yellBoundary.SetActive(Global.s.UgTalk <= 1);

        var malty = NPCList.GetNPC(NPC.Malty);

        switch (s.MaltyTalk)
        {
        case 1:
        case 2:
            if (s.ShibeInParty > 0)
            {
                malty.transform.position = new Vector3(96.5f, -51f); malty.SetFacingDirection(s.MaltyTalk == 1 ? SpriteDir.Left : SpriteDir.Right);
            }
            else
            {
                NPCList.GetNPC(NPC.Malty).transform.position = nullPos;
            }
            break;

        case 6:
            malty.transform.position = new Vector3(96.5f, -51f); malty.SetFacingDirection(SpriteDir.Right);
            chi.transform.position   = new Vector3(52.5f, -20f); chi.SetFacingDirection(SpriteDir.Left);
            break;

        default:
            NPCList.GetNPC(NPC.Malty).transform.position = nullPos;
            break;
        }

        var bernard = NPCList.GetNPC(NPC.Bernard);

        switch (s.BernardTalk)
        {
        case 1:
        case 2:
        case 3:
        case 4:
            bernard.transform.position = new Vector3(85.5f, -24f);
            break;

        default:
            bernard.transform.position = nullPos;
            break;
        }

        if (oldCrestStalk != s.CrestStalkFest)
        {
            switch (s.CrestStalkFest)
            {
            case 1:
                crest.transform.position = new Vector3(9.5f, -19f);
                crest.SetFacingDirection(SpriteDir.Down);
                break;

            case 2:
                crest.transform.position = new Vector3(-2.5f, -17f);
                crest.SetFacingDirection(SpriteDir.Right);
                break;

            case 4:
                crest.transform.position = new Vector3(21.5f, -23f);
                crest.SetFacingDirection(SpriteDir.Right);
                break;

            case 6:
                crest.transform.position = new Vector3(47.5f, -20f);
                crest.SetFacingDirection(SpriteDir.Right);

                hus.transform.position = new Vector3(47.5f, -21f);
                hus.SetFacingDirection(SpriteDir.Up);

                chi.transform.position = new Vector3(48.5f, -20f);
                chi.SetFacingDirection(SpriteDir.Left);
                break;

            case 7:
                hus.transform.position = nullPos;
                hus.SetFacingDirection(SpriteDir.Up);

                chi.transform.position = nullPos;
                chi.SetFacingDirection(SpriteDir.Left);
                break;
            }

            oldCrestStalk = s.CrestStalkFest;
        }

        if (s.UgTalk == 2 && s.MaltyTalk < 3 && s.PictureTaken > 0)
        {
            puddle.transform.position = new Vector3(98.5f, -20f);
            puddle.SetFacingDirection(SpriteDir.Left);

            crest.transform.position = new Vector3(99.5f, -20f);
            crest.SetFacingDirection(SpriteDir.Left);
        }

        var pom = NPCList.GetNPC(NPC.Pom);

        if (s.HusTalk == 5)
        {
            hus.transform.position = new Vector3(92.5f, -20f);
            hus.SetFacingDirection(SpriteDir.Right);
        }

        if (s.HusTalk == 6 || s.HusTalk == 9)
        {
            hus.transform.position = nullPos;
            NPCList.GetNPC(NPC.Shibe).transform.position = nullPos;
        }

        if (s.StopPom > 0)
        {
            NPCList.GetNPC(NPC.DavePointer).transform.position = new Vector3(122.5f, 27f);
        }

        var corg = NPCList.GetNPC(NPC.Corg);

        if (s.GateOpened == 0)
        {
            if (s.CorgTalk == 1)
            {
                corg.transform.position = new Vector3(123.5f, -20f);
            }
            else if ((s.CorgTalk == 3 || (s.ShibeInParty == 0 && s.CorgKeys == 1)))
            {
                corg.transform.position = new Vector3(135.5f, -20f);
            }
            else
            {
                corg.transform.position = nullPos;
            }
        }
        else
        {
            corg.transform.position = nullPos;
        }

        var gateClosed = s.GateOpened == 0;

        Gate_Closed.SetActive(gateClosed);
        Gate_Open.SetActive(!gateClosed);

        Gate_ShibeAndHusPile.SetActive(s.StopPom >= 2);

        if (s.HusTalk == 5 && pom.transform.position.x > 103)
        {
            hus.transform.position = new Vector3(119.5f, -20f);
            hus.SetFacingDirection(SpriteDir.Right);
        }

        if (s.HusTalk == 7 || s.HusTalk == 8)
        {
            hus.transform.position = nullPos;
            NPCList.GetNPC(NPC.Shibe).transform.position = nullPos;
        }

        if (s.RedSpace == 1)
        {
            purpleSpace.sprite   = redSpaceSprite;
            purpleSpacePan.speed = .3f;
        }
    }
Ejemplo n.º 5
0
    public override IEnumerator Execute()
    {
        NPCList.GetNPC(npc).SetFacingDirection(dir);

        yield return(null);
    }