示例#1
0
        public Tile GetTile(DoorTileData t)
        {
            if (t.Door == null)
            {
                throw new ArgumentNullException("Invalid map format. Door item should be at door tile.");
            }

            SetMinimapTile(Color.Purple);

            var initializer = new DoorInitializer {
                Door = CreateDoor(t)
            };

            initializer.HasButton = t.Door.HasButton;


            initializer.Direction = t.Orientation == Orientation.NorthSouth ? MapDirection.North : MapDirection.East;

            var res = new DoorTile(initializer);

            sidesCreator.SetupSidesAsync(initializer, currentGridPosition, res);
            res.Renderer     = builder.Factories.RenderersSource.GetDoorTileRenderer(res, builder.WallTexture, builder.DoorButtonTexture);
            this.initializer = initializer;
            return(res);
        }
示例#2
0
    private void addExit(RoomComponent room)
    {
        DoorTile exit = DoorTile.CreateInstance <DoorTile>();

        exit.direction = Enums.Direction.DOWN;
        room.addDoor(exit);
    }
示例#3
0
        /// <summary>
        /// Maybe we should use Reflections at some point. #justsayin
        /// </summary>
        /// <param name="interactive"></param>
        /// <param name="animation"></param>
        /// <param name="properties"></param>
        /// <param name="position"></param>
        /// <returns></returns>
        public static BasicTile LoadTile(bool interactive, bool animation, TiledProperties properties, Index2 position)
        {
            BasicTile result = null;

            if (interactive && animation)
            {
                switch (properties.GetProperty("Type"))
                {
                case "CellDoor":
                //result = new CellDoor("cellDoor", position);
                //break;
                case "Door":
                    result = new DoorTile("door", position);
                    break;

                default:
                    result = new InteractiveTile("door", position);
                    break;
                }
            }
            else if (animation && !interactive)
            {
                result = new AnimatedTile("flower", position);
            }
            else if (!interactive && !animation)
            {
                result = new BasicTile("dirt", position);
            }
            else
            {
                throw new NotSupportedException("No Tile should be interacitve but not animated");
            }
            result.AddProperties(properties);
            return(result);
        }
示例#4
0
    public void createDoorData(int dirCnt)
    {
        int cnt = 0;

        while (cnt < dirCnt)
        {
            DoorTile door = DoorTile.CreateInstance <DoorTile>();
            door.sprite       = doorTexture;
            door.colliderType = Tile.ColliderType.Sprite;
            door.direction    = (Enums.Direction)currentRoom.getDirections()[cnt];
            if (!currentRoom.hasDoor(door))
            {
                currentRoom.addDoor(door);
            }
            else
            {
                door = currentRoom.findDoor(door);
                if (door.locked)
                {
                    door.sprite = lockDoorTexture;
                }
                else
                {
                    door.sprite = doorTexture;
                }
            }
            cnt++;
        }
    }
示例#5
0
文件: Main.cs 项目: jensj12/MeesGame
        private void AddTileInBetween()
        {
            // Default is a FloorTile
            tileToAdd = new FloorTile();

            // If a key has been placed, immediately place a door
            if (doorsPlaced < keysPlaced)
            {
                tileToAdd = new DoorTile();
                (tileToAdd as DoorTile).SecondarySpriteColor = ChooseColor(doorsPlaced);
                doorsPlaced++;
            }
            // Always have a chance to place a door after a key has been placed
            else if (placeDoors && randomChance(doorChance))
            {
                tileToAdd = new DoorTile();
                (tileToAdd as DoorTile).SecondarySpriteColor = ChooseColor(keysPlaced, true, true);
            }
            tiles.Add(tileToAdd, pointBetween.X, pointBetween.Y);

            behindDoorInfo[next.X, next.Y] = behindDoorInfo[current.X, current.Y];
            if (tiles.GetType(pointBetween) == TileType.Door)
            {
                // If a door is placed, next is behind all the doors it is currently behind as well as the newly placed door.
                behindDoorInfo[next.X, next.Y] |= GetFlagFromColor((tiles.GetTile(pointBetween) as DoorTile).SecondarySpriteColor);
            }
        }
示例#6
0
    public void lockDoors(List <RoomComponent> rooms)
    {
        int numOfRooms = rooms.Count - 1;
        int roomToLock = (int)RNGenerator.Instance.getNextNumber(0, numOfRooms);

        while (roomToLock == 0 || rooms[roomToLock].getDirections().Count != 1)
        {
            roomToLock = (int)RNGenerator.Instance.getNextNumber(0, numOfRooms);
        }

        int direction = rooms[roomToLock].getDirections()[0];

        RoomComponent room = rooms[roomToLock];

        RoomComponent lockedOut = room.getNeighbour(direction);

        DoorTile lockedDoor = DoorTile.CreateInstance <DoorTile>();

        lockedDoor.direction = lockedOut.findDirection(room);

        lockedDoor.locked = true;

        lockedOut.addDoor(lockedDoor);

        placeKeys(1, numOfRooms, roomToLock, direction, rooms, room);

        addExit(room);
    }
示例#7
0
 //Adds door to list of doors if it isn't already there
 public void addDoor(DoorTile door)
 {
     if (!doors.Contains(door))
     {
         doors.Add(door);
     }
 }
示例#8
0
    //Used for retrieving right exit so player can leave room to the next one
    void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            //playerposition in grid-cell coordinates used for retrieving the right door tile
            Vector3Int tilePos = doormap.WorldToCell(GameObject.Find("Player").transform.position);
            DoorTile   door    = doormap.GetTile <DoorTile>(tilePos);

            if (door)
            {
                //If door is locked and player has key the door gets opened and player gets ported to next room
                if (door.locked && collision.gameObject.GetComponent <PlayerComponent>().getKeys() > 0)
                {
                    door.locked = false;
                    collision.gameObject.GetComponent <PlayerComponent>().decrKeys();
                    //DungeonMaster needs to move player to the next room
                    master.moveForward(tilePos, doormap.GetTile <DoorTile>(tilePos).direction);
                    GameObject.Find("KeyCounter").GetComponent <Text>().text = collision.gameObject.GetComponent <PlayerComponent>().getKeys().ToString();
                }
                //If door is levelexit, dungeonmaster needs to create the next level
                else if (door.direction == Enums.Direction.DOWN)
                {
                    master.nextLevel();
                }
                else if (!door.locked)
                {
                    master.moveForward(tilePos, doormap.GetTile <DoorTile>(tilePos).direction);
                }
            }
        }
    }
示例#9
0
 //------------------------------------------------------------------------------------------------------------------------
 //														collisionDoor()
 //------------------------------------------------------------------------------------------------------------------------
 private void collisionDoor(GameObject other)
 {
     if (other is DoorTile)
     {
         DoorTile dTile = other as DoorTile;
         _game.SwitchRoom(dTile.Goto);
     }
 }
示例#10
0
 //Gets desired door
 public DoorTile findDoor(DoorTile door)
 {
     foreach (DoorTile temp in doors)
     {
         if (temp.direction == door.direction)
         {
             return(temp);
         }
     }
     return(null);
 }
示例#11
0
    //Checks if room has door
    public bool hasDoor(DoorTile door)
    {
        bool result = false;

        foreach (DoorTile temp in doors)
        {
            if (temp.direction == door.direction)
            {
                result = true;
                break;
            }
        }
        return(result);
    }
示例#12
0
    //Used to make sure that there are doors where they need to be
    public void insertMissingDoors()
    {
        int cnt = 1;

        while (cnt <= 4)
        {
            if (currentRoom.hasNeighbour(cnt) && !currentRoom.hasDirection(cnt))
            {
                DoorTile door = DoorTile.CreateInstance <DoorTile>();
                door.sprite       = doorTexture;
                door.colliderType = Tile.ColliderType.Sprite;
                door.direction    = (Enums.Direction)cnt;
                currentRoom.addDoor(door);
            }
            cnt++;
        }
    }
示例#13
0
    public override void SetCharacter(Character character)
    {
        Debug.Assert(doorTile != null);
        DoorTile door = doorTile.GetComponent <DoorTile>();

        if (!this.sprung)
        {
            if (openDoor)
            {
                door.OpenDoor();
            }
            else
            {
                door.CloseDoor();
            }
        }
        base.SetCharacter(character);
    }
示例#14
0
    private void GenerateTile(int col, int row, RoomTemplate.TileType tileType)
    {
        GameObject tileObject;

        switch (tileType)
        {
        case RoomTemplate.TileType.EMPTY:
            return;

        case RoomTemplate.TileType.FLOOR:
            tileObject = Instantiate(tileObjects.floorTile, transform);
            break;

        case RoomTemplate.TileType.WALL:
            tileObject = Instantiate(tileObjects.wallTile, transform);
            break;

        case RoomTemplate.TileType.DOOR:
            tileObject = Instantiate(tileObjects.doorTile, transform);
            DoorTile door = tileObject.GetComponent <DoorTile>();
            door.Deactivate();
            doors.Add(door);
            break;

        case RoomTemplate.TileType.SPAWN:
            tileObject = Instantiate(tileObjects.spawnTile, transform);
            tileObject.transform.localPosition = new Vector2(col, -row);
            spawnPoint = tileObject.transform.position;
            break;

        case RoomTemplate.TileType.EXIT:
            tileObject = Instantiate(tileObjects.exitTile, transform);
            break;

        case RoomTemplate.TileType.TRIGGER:
            tileObject = Instantiate(tileObjects.triggerTile, transform);
            tileObject.GetComponent <TriggerTile>().SetRoom(this);
            break;

        default:
            return;
        }
        tileObject.transform.localPosition = new Vector2(col, -row);
    }
示例#15
0
    //------------------------------------------------------------------------------------------------------------------------
    //														spawnObjects()
    //------------------------------------------------------------------------------------------------------------------------
    public void SpawnObjects(Map levelData)
    {
        if (levelData.ObjectGroups == null || levelData.ObjectGroups.Length == 0)
        {
            return;
        }

        ObjectGroup objectGroup = levelData.ObjectGroups[0];

        if (objectGroup.Objects == null || objectGroup.Objects.Length == 0)
        {
            return;
        }

        foreach (TiledObject obj in objectGroup.Objects)
        {
            switch (obj.Name)
            {
            case "Door":
                _door = new DoorTile(ObjSpriteSheet, ObjCols, ObjRows, obj);
                _door.SetFrame(obj.GetIntProperty("Type") - 1);
                _door.x = obj.X + _door.width / 2;
                _door.y = obj.Y - _door.height / 2;
                AddChild(_door);
                break;

            case "Player":
                _player = new Player(obj.X, obj.Y, Game, this);
                AddChild(_player);
                break;

            case "Activity":
                _activity = new ActivityTile(ObjSpriteSheet, ObjCols, ObjRows, obj);
                _activity.SetFrame(obj.GetIntProperty("Type") - 1);
                _activity.x = obj.X + _activity.width;
                _activity.y = obj.Y + _activity.height;
                AddChild(_activity);
                break;
            }
        }
    }
示例#16
0
文件: Main.cs 项目: jensj12/MeesGame
        /// <summary>
        /// Places a tile between the two points, creating the loop.
        /// </summary>
        private void AddLoopTile(Point one, Point two)
        {
            tileToAdd = new FloorTile();
            behindDoorFlags difference = behindDoorInfo[one.X, one.Y] ^ behindDoorInfo[two.X, two.Y];

            // Check if the difference is exactly one door color
            if (Enum.IsDefined(typeof(behindDoorFlags), difference))
            {
                tileToAdd = new DoorTile();
                (tileToAdd as DoorTile).SecondarySpriteColor = ChooseColor((int)Math.Log((int)difference, 2), false, false);
            }
            if ((!Enum.IsDefined(typeof(behindDoorFlags), difference) && difference != 0) || randomChance(loopHoleChance))
            {
                tileToAdd = new HoleTile();
                if (randomChance(0.5))
                {
                    tileToAdd = new GuardTile();
                }
            }
            tiles.Add(tileToAdd, PointBetween(one, two).X, PointBetween(one, two).Y);
        }
示例#17
0
    void rotateDoor(DoorTile door)
    {
        //If the room has been built before, doors already got rotated in right direction
        if (builtRooms.Contains(currentRoom.getRoomNumber()))
        {
            return;
        }

        else
        {
            //Stores the rotation we want to use in degree
            Quaternion rotation;
            //Matrix we need to use to rotate our tile to right direction
            Matrix4x4 rotationM;

            switch (door.direction)
            {
            case Enums.Direction.EAST:
                rotation        = Quaternion.Euler(0, 0, -90.0f);
                rotationM       = Matrix4x4.Rotate(rotation);
                door.transform *= rotationM;
                break;

            case Enums.Direction.SOUTH:
                rotation        = Quaternion.Euler(0, 0, 180.0f);
                rotationM       = Matrix4x4.Rotate(rotation);
                door.transform *= rotationM;
                break;

            case Enums.Direction.WEST:
                rotation        = Quaternion.Euler(0, 0, 90.0f);
                rotationM       = Matrix4x4.Rotate(rotation);
                door.transform *= rotationM;
                break;
            }
        }
    }
示例#18
0
 public virtual IRenderer GetDoorTileRenderer(DoorTile doorTile, Texture2D frameTexture, Texture2D buttonTexture)
 {
     return(new DoorTileRenderer(doorTile, frameTexture, buttonTexture));
 }
示例#19
0
        void LoadEditorTemplates()
        {
            //Foreach .lvl files add it to the list
            string[] fileNames = Directory.GetFiles(Directory.GetCurrentDirectory() + @"\roomtemplates\");
            try
            {
                foreach (string file in fileNames)
                {
                    StreamReader streamreader  = new StreamReader(file);
                    string       importedlevel = streamreader.ReadToEnd();
                    streamreader.Close();

                    string[] contents = importedlevel.Replace("\r\n", "").Replace("\n", "").Replace("\r", "").Split('-');

                    CurrentTemplateName = Strip(file);
                    TemplateButton result = new TemplateButton(UnselectedSummary, CurrentTemplateName, DoorTiles, 0);

                    string[] solids = contents[0].Split(':')[1].Split(',');
                    foreach (string s in solids)
                    {
                        if (s != "")
                        {
                            string[] pair = s.Split('/');
                            result.Template.Tiles[Convert.ToInt32(pair[0]), Convert.ToInt32(pair[1])] = SolidTile.Copy();
                        }
                    }

                    string[] doors = contents[1].Split(':')[1].Split(',');
                    foreach (string d in doors)
                    {
                        if (d != "")
                        {
                            string[] pair = d.Split('/');
                            result.Template.Tiles[Convert.ToInt32(pair[0]), Convert.ToInt32(pair[1])] = DoorTile.Copy();
                        }
                    }

                    string[] payout = contents[2].Split(':')[1].Split('/');
                    result.Template.Payout = new Vector2I(Convert.ToInt32(payout[0]), Convert.ToInt32(payout[1]));

                    string[] creatures = contents[3].Split(':')[1].Split(',');
                    foreach (string c in creatures)
                    {
                        if (c != "")
                        {
                            string[] pair  = c.Split('=');
                            int      hash  = Convert.ToInt32(pair[0]);
                            Enemy    enemy = EnemyButtons.Single(x => x.Enemy.Hash == hash).Enemy;
                            Enemy    guy   = enemy.Copy(new Vector2I(Convert.ToInt32(pair[1].Split('/')[0]), Convert.ToInt32(pair[1].Split('/')[1])), enemy.Hash);
                            result.Template.Entities.Add(guy);
                        }
                    }

                    result.Template.Difficulty = Convert.ToInt32(contents[4].Split(':')[1]);
                    TemplateButtons.Add(result);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }

            TemplateButtons.Sort();
            ReallignTemplates();
        }
示例#20
0
 public void SetDoorTile(DoorTile tile)
 {
     OnDoorTile = true;
     doorTile   = tile;
 }
示例#21
0
        void HandleEditorInput(Button button, bool LeftClick)
        {
            if (LeftClick)
            {
                switch (button.Action)
                {
                case "quit":
                    Quit();
                    break;

                case "templatestab":
                    CurrentTab    = Tab.TEMPLATES;
                    button.Sprite = SelectedTab;
                    foreach (Button b in EditorButtons)
                    {
                        if (b.Action == "enemy")
                        {
                            ((EnemyButton)b).Visable = false;
                        }
                        else if (b.Action == "enemiestab")
                        {
                            b.Sprite = UnselectedTab;
                        }
                    }
                    ReallignTemplates();
                    break;

                case "enemiestab":
                    CurrentTab    = Tab.ENEMIES;
                    button.Sprite = SelectedTab;
                    foreach (Button b in EditorButtons)
                    {
                        if (b.Action == "room")
                        {
                            ((TemplateButton)b).Visable = false;
                        }
                        else if (b.Action == "templatestab")
                        {
                            b.Sprite = UnselectedTab;
                        }
                    }
                    ReallignEnemies();
                    break;

                case "up":
                    if (CurrentTab == Tab.TEMPLATES)
                    {
                        CurrentTemplateIndex--;
                        if (CurrentTemplateIndex < 0)
                        {
                            CurrentTemplateIndex = 0;
                        }
                        else
                        {
                            foreach (TemplateButton B in TemplateButtons)
                            {
                                B.Position.Y += 51;
                            }
                        }
                        ReallignTemplates();
                    }
                    else
                    {
                        CurrentEnemyIndex--;
                        if (CurrentEnemyIndex < 0)
                        {
                            CurrentEnemyIndex = 0;
                        }
                        else
                        {
                            foreach (EnemyButton E in EnemyButtons)
                            {
                                E.Position.Y += 51;
                            }
                        }
                        ReallignEnemies();
                    }
                    break;

                case "down":
                    if (CurrentTab == Tab.TEMPLATES)
                    {
                        CurrentTemplateIndex++;
                        if (CurrentTemplateIndex > TemplateButtons.Count() - 7)
                        {
                            CurrentTemplateIndex = TemplateButtons.Count() - 7;
                        }
                        else
                        {
                            foreach (TemplateButton B in TemplateButtons)
                            {
                                B.Position.Y -= 51;
                            }
                        }
                        ReallignTemplates();
                    }
                    else
                    {
                        CurrentEnemyIndex++;
                        if (CurrentEnemyIndex > EnemyButtons.Count() - 7)
                        {
                            CurrentEnemyIndex = EnemyButtons.Count() - 7;
                        }
                        else
                        {
                            foreach (EnemyButton E in EnemyButtons)
                            {
                                E.Position.Y -= 51;
                            }
                        }
                        ReallignEnemies();
                    }
                    break;

                case "sprite":
                    if (CurrentEnemy.Sprite == Enemy1)
                    {
                        CurrentEnemy.Sprite = Enemy2;
                    }
                    else if (CurrentEnemy.Sprite == Enemy2)
                    {
                        CurrentEnemy.Sprite = Enemy3;
                    }
                    else if (CurrentEnemy.Sprite == Enemy3)
                    {
                        CurrentEnemy.Sprite = Enemy4;
                    }
                    else if (CurrentEnemy.Sprite == Enemy4)
                    {
                        CurrentEnemy.Sprite = Enemy1;
                    }
                    break;

                case "hp":
                    CurrentEnemy.HP++;
                    CurrentEnemy.MaxHP++;
                    break;

                case "damage":
                    CurrentEnemy.Damage++;
                    break;

                case "break":
                    //Pause to debug
                    break;

                case "room":
                    if (((TemplateButton)button).Visable && CurrentTab == Tab.TEMPLATES)
                    {
                        foreach (TemplateButton c in TemplateButtons)
                        {
                            c.Sprite = UnselectedSummary;
                        }
                        button.Sprite   = SelectedSummary;
                        CurrentTemplate = ((TemplateButton)button).Template;
                    }
                    break;

                case "enemy":
                    if (((EnemyButton)button).Visable && CurrentTab == Tab.ENEMIES)
                    {
                        foreach (EnemyButton e in EnemyButtons)
                        {
                            e.Sprite = UnselectedSummary;
                        }
                        button.Sprite = SelectedSummary;
                        CurrentEnemy  = ((EnemyButton)button).Enemy;
                    }
                    break;

                case "save":
                    SaveContent();
                    break;

                case "new":
                    if (CurrentTab == Tab.TEMPLATES)
                    {
                        CurrentTemplateName = Convert.ToString(Convert.ToInt32(CurrentTemplateName.Split('.')[0]) + 1);
                        TemplateButton result = new TemplateButton(UnselectedSummary, CurrentTemplateName + ".lvl", DoorTiles, 0);
                        TemplateButtons.Add(result);
                        TemplateButtons.Sort();
                        ReallignTemplates();
                    }
                    else if (CurrentTab == Tab.ENEMIES)
                    {
                        CurrentCreatureName = Convert.ToString(Convert.ToInt32(CurrentCreatureName.Split('.')[0]) + 1) + ".nme";
                        EnemyButton result = new EnemyButton(UnselectedSummary, Enemy1, CurrentCreatureName);
                        EnemyButtons.Add(result);
                        EnemyButtons.Sort();
                        ReallignEnemies();
                    }
                    break;

                case "door":
                    for (int i = 0; i < 15; i++)
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            if (MouseOver(i, j))
                            {
                                CurrentTemplate.Tiles[i, j] = DoorTile.Copy();
                            }
                        }
                    }
                    break;

                case "item":
                    for (int i = 0; i < 15; i++)
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            if (MouseOver(i, j))
                            {
                                HealthPotion newthing = GenericItem.Copy(new Vector2I(i, j), GenericItem.Hash);
                                if (CurrentTemplate.Entities.Contains(newthing))
                                {
                                    CurrentTemplate.Entities.Remove(newthing);
                                }
                                else
                                {
                                    CurrentTemplate.Entities.Add(newthing);
                                }
                            }
                        }
                    }
                    break;

                case "prize":
                    for (int i = 0; i < 15; i++)
                    {
                        for (int j = 0; j < 10; j++)
                        {
                            if (MouseOver(i, j))
                            {
                                CurrentTemplate.Payout = new Vector2I(i, j);
                            }
                        }
                    }
                    break;

                case "difficulty":
                    CurrentTemplate.Difficulty++;
                    break;
                }
            }
            else
            {
                switch (button.Action)
                {
                case "hp":
                    CurrentEnemy.HP--;
                    CurrentEnemy.MaxHP--;
                    break;

                case "sprite":
                    if (CurrentEnemy.Sprite == Enemy1)
                    {
                        CurrentEnemy.Sprite = Enemy4;
                    }
                    else if (CurrentEnemy.Sprite == Enemy2)
                    {
                        CurrentEnemy.Sprite = Enemy3;
                    }
                    else if (CurrentEnemy.Sprite == Enemy3)
                    {
                        CurrentEnemy.Sprite = Enemy2;
                    }
                    else if (CurrentEnemy.Sprite == Enemy4)
                    {
                        CurrentEnemy.Sprite = Enemy1;
                    }
                    break;

                case "damage":
                    CurrentEnemy.Damage--;
                    break;

                case "difficulty":
                    CurrentTemplate.Difficulty--;
                    break;
                }
            }
        }