コード例 #1
0
ファイル: Ship.cs プロジェクト: callumlawson/Space
        public void Init(ContentManager content)
        {
            rand = new Random();

            this.content = content;

            currentRoom = rooms[0];

            player = new PlayerObject();
            player.destroyMe += new destroyMeEventHandler(player_destroyMe);

            player.position = new Vector2(300, 400);

            player.position = new Vector2(400, 400);

            Game1.hacks = player;

            currentRoom.objects.Add(player);

            foreach (Room room in rooms)
            {
                room.Init(content);

                foreach (WorldObject worldObject in room.objects)
                {
                    if (worldObject.type == "Door")
                    {
                        DoorObject door = (DoorObject)worldObject;
                        if (door.props["direction"] == "left")
                        {
                            leftRooms.Add(room);
                        }
                        if (door.props["direction"] == "right")
                        {
                            rightRooms.Add(room);
                        }
                        if (door.props["direction"] == "up")
                        {
                            upRooms.Add(room);
                        }
                        if (door.props["direction"] == "down")
                        {
                            downRooms.Add(room);
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: DoorObject.cs プロジェクト: callumlawson/Space
 public override void Init(ContentManager content, Room room)
 {
     string direction = this.props["direction"];
     this.room = room;
 }
コード例 #3
0
ファイル: WorldObject.cs プロジェクト: callumlawson/Space
 public virtual void Init(ContentManager content, Room room)
 {
     //Must set/have by this point a: collider, animTexture.
 }
コード例 #4
0
ファイル: Ship.cs プロジェクト: callumlawson/Space
 public Room createRoom(Room room)
 {
     room.lootEvent += new lootEvenDelegate(room_lootEvent);
     return room;
 }
コード例 #5
0
ファイル: Ship.cs プロジェクト: callumlawson/Space
        public void Update(GameTime gameTime)
        {
            DoorObject previousDoor = null;
            DoorObject newDoor = null;

            Room previousRoom = currentRoom;

            String directionFrom = player.transition;
            String directionTo = "";

            List<Room> fromRooms = null;
            List<Room> toRooms = null;

            if (directionFrom != "none")
            {

                if (directionFrom == "right")
                {
                    directionTo = "left";
                    fromRooms = rightRooms;
                    toRooms = leftRooms;
                }
                if (directionFrom == "left")
                {
                    directionTo = "right";
                    fromRooms = leftRooms;
                    toRooms = rightRooms;
                }
                if (directionFrom == "up")
                {
                    directionTo = "down";
                    fromRooms = upRooms;
                    toRooms = downRooms;
                }
                if (directionFrom == "down")
                {
                    directionTo = "up";
                    fromRooms = downRooms;
                    toRooms = upRooms;
                }

                //We need a new link
                player.onDestroyMe();

                foreach (WorldObject worldObject in previousRoom.objects)
                {
                    if (worldObject.type == "Door")
                    {
                        DoorObject door = (DoorObject)worldObject;
                        if (door.props["direction"] == directionFrom)
                        {
                            previousDoor = door;

                            if (doorLinks.ContainsKey(previousDoor))
                            {
                                newDoor = doorLinks[previousDoor];
                                currentRoom = newDoor.room;
                                player.position = newDoor.position;
                            }
                            else //We need to select a new room as the door is not linked
                            {
                                while (true)
                                {
                                    if (toRooms.Count > 0)
                                    {
                                        int index = (int)rand.Next(toRooms.Count);
                                        List<Room> possibleRooms = toRooms;
                                        Room possibleRoom = possibleRooms[index];

                                        if (possibleRoom != previousRoom)
                                        {
                                            currentRoom = createRoom(possibleRoom);
                                            toRooms.Remove(currentRoom);
                                            fromRooms.Remove(previousRoom);
                                            break;
                                        }
                                        else
                                        {
                                            possibleRooms.Remove(possibleRoom);
                                        }
                                    }
                                    else //Need to fix possible fail on way back - THIS CODE IS NOT DONE FORGIVE THE UGLY
                                    {
                                        if (toRooms.Count + fromRooms.Count >= 4)
                                        {
                                            currentRoom = createRoom(loadDeadend(directionTo));
                                            fromRooms.Remove(previousRoom);
                                            break;
                                        }
                                        else if (!foundBridge)
                                        {
                                            currentRoom = createRoom(loadBridge(directionTo));
                                            currentRoom.redButtonEvent += new RedButtonEventDelegate(currentRoom_redButtonEvent);
                                            fromRooms.Remove(previousRoom);
                                            foundBridge = true;
                                            break;
                                        }
                                        else
                                        {
                                            currentRoom = createRoom(loadDeadend(directionTo));
                                            fromRooms.Remove(previousRoom);
                                            break;
                                        }
                                    }
                                }

                                foreach (WorldObject anotherWorldObject in currentRoom.objects) //Conntect to the correct door in the new room and add the links to the dictionary
                                {
                                    if (anotherWorldObject.type == "Door")
                                    {
                                        DoorObject anotherDoor = (DoorObject)anotherWorldObject;
                                        if (anotherDoor.props["direction"] == directionTo)
                                        {
                                            newDoor = anotherDoor;
                                            player.position = anotherDoor.position;
                                            doorLinks.Add(previousDoor, newDoor);
                                            doorLinks.Add(newDoor, previousDoor);
                                        }
                                    }
                                }
                            }

                        }
                    }

                }
                currentRoom.addWO(player);
            }
            currentRoom.Update(gameTime);
        }