예제 #1
0
 private void Awake()
 {
     if (instance == null)
     {
         instance = this;
         exitDoor = FindObjectOfType <ExitDoor>();
         player   = FindObjectOfType <PlayerController>();
         return;
     }
     Destroy(instance);
 }
예제 #2
0
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else if (instance != this)
     {
         Destroy(gameObject);
     }
 }
예제 #3
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var o = JObject.Load(reader);

            var id     = GetStringTokenValue(o, "id");
            var x      = GetIntTokenValue(o, "x") ?? 0;
            var y      = GetIntTokenValue(o, "y") ?? 0;
            var width  = GetIntTokenValue(o, "width") ?? 0;
            var height = GetIntTokenValue(o, "height") ?? 0;
            var rect   = new Rectangle(x, y, width, height);


            Entity entity;

            switch (id)
            {
            case "key":
                entity = new Key(rect);
                break;

            case "double_jump":
                entity = new DoubleJump(rect);
                break;

            case "door":
                entity = new Door(rect);
                break;

            case "button":
                entity = new Button(rect);
                ((Button)entity).WallMounted = GetBoolTokenValue(o, "wallMounted", false);
                ((Button)entity).AttatchFace = (Face)GetIntTokenValue(o, "Face", 0);
                break;

            case "exit_door":
                entity = new ExitDoor(rect);
                break;

            case "note":
                entity = new Note(rect);
                ((Note)entity).Messages = GetStringListTokenValue(o, "Messages");
                break;

            default:
                entity = new Entity(rect);
                break;
            }

            entity.Gravity = GetBoolTokenValue(o, "gravity", true);

            return(entity);
        }
예제 #4
0
        public Level IntroLevel()
        {
            var lvl      = new Level(clientSize.Size, "Salutations, voyageur");
            var exitDoor = new ExitDoor(new Rectangle(1389, 693, 85, 140));

            lvl.AddObject(exitDoor);
            var textBitmap = new Bitmap(clientSize.Width, clientSize.Height);

            DrawText(textBitmap,
                     "Use Escape to see controls.\nThe goal is to get to the door.\nAnd beware of time paradoxes!",
                     clientSize, StringAlignment.Near);
            lvl.AddObject(new Sprite(
                              new RectangleF(clientSize.X, clientSize.Y + 100, clientSize.Width, clientSize.Height), textBitmap));
            return(lvl);
        }
예제 #5
0
        public Level Level4()
        {
            var lvl      = new Level(clientSize.Size, "Level 4");
            var exitDoor = new ExitDoor(new Rectangle(148, 174, 85, 140), true);

            lvl.AddObject(new Switch(new Rectangle(291, 661, 48, 171), player => exitDoor.Open()));
            lvl.AddObject(exitDoor);
            lvl.AddObjects(new MovingPlatform(new PointF(1010, 566), new PointF(1010, 253), 3, 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(126, 314), 3).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(567, 505), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(758, 631), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(822, 253), 1).CreatePlatform());
            lvl.Player.Position = new PointF(403, 217);
            lvl.AddObject(new TimeTravelBox(new Rectangle(574, 391, 115, 115), 350));
            return(lvl);
        }
예제 #6
0
        public Level Level6()
        {
            var lvl      = new Level(clientSize.Size, "Boxes");
            var exitDoor = new ExitDoor(new Rectangle(1412, 553, 85, 140), true);

            lvl.AddObject(new Switch(new Rectangle(291, 143, 48, 171), player => exitDoor.Open()));
            lvl.AddObject(exitDoor);
            lvl.AddObjects(new Platform(new PointF(251, 314), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(563, 566), 2).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(883, 613), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(946, 407), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(1390, 693), 1).CreatePlatform());
            lvl.AddObject(new TimeTravelBox(new Rectangle(563, 439, 127, 127), 200));
            lvl.AddObject(new TimeTravelBox(new Rectangle(698, 451, 115, 115), 200));
            lvl.AddObject(new TimeTravelBox(new Rectangle(954, 292, 115, 115), 200));
            lvl.Player.Position = new PointF(603, 342);
            return(lvl);
        }
예제 #7
0
        public Level Level5()
        {
            var lvl      = new Level(clientSize.Size, "Carefully");
            var exitDoor = new ExitDoor(new Rectangle(84, 333, 85, 140), true);

            lvl.AddObject(new Switch(new Rectangle(1445, 660, 48, 171), player => exitDoor.Open()));
            lvl.AddObject(exitDoor);
            lvl.AddObjects(new Platform(new PointF(251, 725), 1).CreatePlatform());
            lvl.AddObjects(new MovingPlatform(new PointF(441, 660), new PointF(441, 346), 3, 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(630, 620), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(1097, 379), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(697, 346), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(1121, 652), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(1249, 587), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(825, 281), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(63, 473), 2).CreatePlatform());
            lvl.AddObject(new TimeTravelBox(new Rectangle(1104, 264, 115, 115), 300));
            lvl.AddObject(new Box(new Rectangle(952, 662, 169, 169)));
            return(lvl);
        }
예제 #8
0
        public Level Level3()
        {
            var lvl      = new Level(clientSize.Size, "Platforms");
            var exitDoor = new ExitDoor(new Rectangle(25, 113, 85, 140), true);

            lvl.AddObject(new Switch(new Rectangle(1365, 661, 48, 171), player => exitDoor.Open()));
            lvl.AddObjects(new Platform(new PointF(0, 566), 3).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(0, 253), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(506, 566), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(694, 693), 3).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(1073, 628), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(884, 440), 1).CreatePlatform());
            lvl.AddObjects(new Platform(new PointF(566, 253), 1).CreatePlatform());
            lvl.AddObjects(new MovingPlatform(new PointF(694, 375), new PointF(694, 253), 1.5f, 1).CreatePlatform());
            lvl.AddObjects(new MovingPlatform(new PointF(441, 253), new PointF(131, 253), 3, 1).CreatePlatform());
            lvl.AddObject(new TimeTravelBox(new Rectangle(1079, 517, 115, 115), 240));
            lvl.Player.Position = new PointF(131, 469);
            lvl.AddObject(exitDoor);
            return(lvl);
        }
예제 #9
0
        private IEnumerator Generatelevel()
        {
            _levelData = GenerateAndRenderLevel();

            yield return(new WaitForEndOfFrame());

            GenPathFinder.GenerateAstar(_levelData);

            yield return(new WaitForEndOfFrame());

            var startingRoom = _levelData.StartingRoom.GetComponent <ObjectSpawner>();

            Player = startingRoom.SpawnObject(Player);

            CVcam.Follow = Player.transform;

            ExitDoor = InitializeEndRoom(_levelData);

            var totalRooms = _levelData.LevelSize.x * _levelData.LevelSize.y;

            LevelEnemiesPlacer.PlaceEnemiesAsPerDifficulty(_levelData, totalRooms - 1);
        }
예제 #10
0
 void Awake()
 {
     button = GameObject.FindGameObjectWithTag (Tags.button).GetComponent<DoorButton>();
     door = GameObject.FindGameObjectWithTag (Tags.door).GetComponent<ExitDoor>();
 }
예제 #11
0
 public void AddExitDoor(ExitDoor door)
 {
     _exitDoors.Add(door);
 }
예제 #12
0
 private void OnExitDoorEntered(GameObject entity)
 {
     ExitDoor?.Invoke(entity);
 }
예제 #13
0
    public void ResolveInteraction(string interactionId, GameObject obj)
    {
        Debug.Log("Resolving interaction: " + interactionId);

        if (interactionId == "breakable_door_00")
        {
            GameObject.Find("InputController").GetComponent <InputController>().ActionTutorialPass();
            Player.GetComponentInChildren <Animator>().SetBool("headbutt", true);
        }
        else if (interactionId == "exit_door_00" || interactionId == "exit_door_01" ||
                 interactionId == "exit_door_02" || interactionId == "exit_door_04")
        {
            ExitDoor exitDoor = obj.GetComponent <ExitDoor>();
            if (!exitDoor.usable)
            {
                return;
            }

            exitDoor.usable = false;

            Player.GetComponent <CharacterController2D>().WalkRightEndlessly = true;

            if (interactionId == "exit_door_00")
            {
                GameObject depthWall          = GameObject.FindGameObjectWithTag("DepthWall");
                Transform  depthWallTransform = depthWall.transform;
                depthWallTransform.position = new Vector3(
                    depthWallTransform.position.x,
                    depthWallTransform.position.y,
                    -5.0f);
            }

            LevelTransitionManager.Instance.LoadNextLevel();
        }
        else if (interactionId == "wall_fish_00" ||
                 interactionId == "wall_fish_01" ||
                 interactionId == "wall_fish_02")
        {
            RotatingWheel rotatingWheel = obj.GetComponent <RotatingWheel>();
            if (!rotatingWheel.usable)
            {
                return;
            }
            rotatingWheel.Rotate();
        }
        else if (interactionId == "wheel_puzzle_ok")
        {
            StartCoroutine(WheelPuzzleActions());
        }
        else if (interactionId == "exit_door_desert")
        {
            ExitDoorDesert door = obj.GetComponent <ExitDoorDesert>();

            if (!door.usable)
            {
                return;
            }

            if (door.numberTimesUsed == 0 || door.numberTimesUsed == 1)
            {
                Player.GetComponent <CharacterInteractions>().InteractionsEnabled = false;
                Player.GetComponent <CharacterController2D>().WalkRightEndlessly  = true;
                StartCoroutine(TransitionDesert(door));
            }
            else
            {
                door.usable = false;
                Player.GetComponent <CharacterInteractions>().InteractionsEnabled = false;
                Player.GetComponent <CharacterController2D>().WalkRightEndlessly  = true;
                LevelTransitionManager.Instance.LoadNextLevel();
            }
        }
    }
예제 #14
0
 private void Start()
 {
     ExitDoor = FindObjectOfType <ExitDoor>();
 }
예제 #15
0
 void Start()
 {
     door = GameObject.FindGameObjectWithTag("Door").GetComponent<ExitDoor>();
     buttonBeep = this.GetComponent<AudioSource> ();
 }