예제 #1
0
    /// <summary>
    /// Spawn Enemies in a room.
    /// </summary>
    /// <param name="currentFloor">A floor that contains a room</param>
    /// <param name="rand"> Random used to determine which room to use.</param>
    void SpawnEnemies(Floor currentFloor, System.Random rand)
    {
        int numGroups = rand.Next(6, 10);

        for (int i = 0; i <= numGroups; i++)
        {
            int roomSize = currentFloor.roomList.Count;

            RoomEntry room = currentFloor.roomList[rand.Next(0, roomSize)];

            if (room.type == RoomEntry.RoomType.SAFE)
            {
                continue;
            }

            // don't spawn ontop of player or entrance
            if (room.type == RoomEntry.RoomType.ENTRANCE || room.type == RoomEntry.RoomType.EXIT)
            {
                i--;
                continue;
            }

            Vector3 roomyPos = room.transform.position;
            Vector3 enemyPos = new Vector3(roomyPos.x, roomyPos.y + .85f, roomyPos.z);

            EnemyGroups(currentFloor.floorNumber, enemyPos, rand);
        }
    }
 public void Foo()
 {
     entrys = new IRoomEntry[10];
     for (int i = 0; i < entrys.Length; i++)
     {
         entrys[i] = new RoomEntry <RoundRoom>();
     }
 }
예제 #3
0
    /// <summary>
    /// Generates the floor, this works between frames
    /// </summary>
    /// <returns></returns>
    private IEnumerator CoroutineGenerateFloor()
    {
        currentFloorParent = Instantiate(floorParentPrefab.gameObject).GetComponent <Floor>();

        currentFloorParent.floorNumber = PlayerProgress.currentFloor;

        if (OnBeginGeneration != null)
        {
            OnBeginGeneration(currentFloorParent, _rand);
        }

        yield return(GenerateRoomEntries(maxFloorRadius));

        // pick a room to be the entrance
        RoomEntry entrance = GetRandomRoomEntry();

        entrance.type               = RoomEntry.RoomType.ENTRANCE;
        entrance.gameObject.name    = "Entrance Room Entry";
        currentFloorParent.entrance = entrance;

        // pick a room to be the exit
        RoomEntry exit = GetRandomRoomEntry();

        exit.type               = RoomEntry.RoomType.EXIT;
        exit.gameObject.name    = "Exit Room Entry";
        currentFloorParent.exit = exit;

        // place exit stairs
        FloorExitTrigger fet = Instantiate(exitPrefab, exit.transform).GetComponent <FloorExitTrigger>();

        fet.TargetGenerator = this;
        yield return(CreateRoomPieces());

        currentFloorParent.GetComponent <NavMeshSurface>().BuildNavMesh();

        if (FloorTheme.IsCurrentlyCave())
        {
            SoundManager.instance.PlayMusic(3);
        }
        else if (FloorTheme.IsCurrentlyForest())
        {
            SoundManager.instance.PlayMusic(4);
        }
        else if (FloorTheme.IsCurrentlyFire())
        {
            SoundManager.instance.PlayMusic(5);
        }
        else
        {
            SoundManager.instance.PlayMusic(3);
        }

        // trigger event if anything is listening to it
        if (OnFloorGenerated != null)
        {
            OnFloorGenerated(currentFloorParent, _rand);
        }
    }
예제 #4
0
        private void ConfirmButton_Click(object sender, RoutedEventArgs e)
        {
            error.Content = "";
            ClassroomEntry selectedClassroom = (ClassroomEntry)_classroomComboBox.SelectedItem;
            RoomEntry      selectedRoom      = (RoomEntry)_roomNameComboBox.SelectedItem;
            int            repetitivity      = _regularityComboBox.SelectedIndex;

            WindowsXamlHost windowsHost    = _timePicker;
            TimePicker      timePickerHour = (TimePicker)windowsHost.Child;

            WindowsXamlHost windowsHost2         = _durationTimePicker;
            TimePicker      durationTimePicker   = (TimePicker)windowsHost2.Child;
            TimeSpan?       durationTimeSelected = durationTimePicker.SelectedTime;

            if (durationTimeSelected == null)
            {
                error.Foreground = new SolidColorBrush(Colors.Red);
                error.Content    = "Spécifier une durée";
                return;
            }
            TimeSpan?hourTimeSelected = timePickerHour.SelectedTime;

            if (hourTimeSelected == null)
            {
                error.Foreground = new SolidColorBrush(Colors.Red);
                error.Content    = "Spécifier une heure.";
                return;
            }
            DateTime?dateSelected = _firstDatePciker.SelectedDate;

            if (dateSelected == null)
            {
                error.Foreground = new SolidColorBrush(Colors.Red);
                error.Content    = "Spécifier une date de première séance";
                return;
            }

            DateTime dateSelectedNotNull = (DateTime)dateSelected;

            dateSelectedNotNull = dateSelectedNotNull.AddHours((double)hourTimeSelected?.Hours).AddMinutes((double)hourTimeSelected?.Minutes);

            int scheduleId = Database.Insert.Schedule.One(selectedClassroom.ID, selectedRoom.ID, repetitivity, dateSelectedNotNull, (TimeSpan)hourTimeSelected);

            ScheduleOption.ScheduleOptionDisplay scheduleDisplay = new ScheduleOption.ScheduleOptionDisplay()
            {
                ID           = scheduleId,
                ClassroomId  = selectedClassroom.ID,
                NextDate     = dateSelectedNotNull.ToString("g", GlobalVariable.culture),
                Duration     = durationTimeSelected?.ToString(@"hh\:mm"),
                Repetitivity = repetitivity == 0 ? "Une fois par semaine" : "Une semaine sur deux",
                Room         = Database.Get.Room.NameFromID(selectedRoom.ID)
            };

            //TODO: Make this work but not mendatory for now
            //ScheduleOption.scheduleDisplayCollection.Add(scheduleDisplay);
            error.Foreground = new SolidColorBrush(Colors.Green);
            error.Content    = "Horaire ajouté avec succès";
        }
예제 #5
0
    /// <summary>
    /// Generates a random room entry
    /// </summary>
    /// <param name="point">the center point to generate from</param>
    /// <param name="minDist">the min distance from the center point</param>
    /// <param name="maxDist">the max distance from the center point</param>
    /// <returns>A randomly generated room entry</returns>
    private RoomEntry GenerateRandomRoomEntry(XZCoordinate point, int minDist, int maxDist)
    {
        // generate random cord
        XZCoordinate coord = GenerateRandomCord(point, minDist, maxDist);

        RoomEntry room = createRoomEntry(coord);

        return(room);
    }
예제 #6
0
    private IEnumerator AnimateCatch()
    {
        float      startTime   = Time.time;
        Quaternion from        = controller.transform.rotation;
        Quaternion to          = Quaternion.LookRotation(Vector3.up, controller.transform.right);
        float      initialY    = controller.transform.position.y;
        bool       soundPlayed = false;
        float      t           = 0.0f;

        while (t < 1.0f)
        {
            t = (Time.time - startTime) / catchAnimationTime;
            Quaternion rotation = Quaternion.Slerp(from, to, t);
            controller.transform.rotation = rotation;
            if ((t > 0.7f) && !soundPlayed)
            {
                controller.PlayFallingSound();
                soundPlayed = true;
            }
            yield return(null);
        }
        cameraFading.FadeToBlack(fadeToBlackTime);
        yield return(new WaitUntil(() => cameraFading.GetState() == FadingManager.State.Faded));

        RoomScene room  = roomsManager.GetRandomWakeUpRoom();
        RoomEntry entry = roomsManager.GetRandomRoomEntry();

        room.ClearCollectibles();
        entry.AttachRoom(room);
        entry.SetSpawningEnabled(false);

        Transform wakeUpPosition = room.GetWakeUpPosition();

        controller.transform.position = wakeUpPosition.position;
        controller.transform.rotation = wakeUpPosition.rotation;

        Vector3 eulerAngles = controller.transform.eulerAngles;

        eulerAngles.x = 0.0f;
        eulerAngles.z = 0.0f;
        controller.transform.eulerAngles = eulerAngles;

        Vector3 pos = controller.transform.position;

        pos.y = initialY;
        controller.transform.position = pos;

        yield return(new WaitForSeconds(wakeUpTime));

        cameraFading.FadeToNormal(fadeToNormalTime);
        controller.enabled = true;

        dispatcher.SendEvent(new EBEvent()
        {
            type = EBEventType.ApplyMadnessAfterMonsterCaught
        });
    }
예제 #7
0
        void RoomUpdated(Room room)
        {
            if (!Dispatcher.UIThread.CheckAccess())
            {
                Dispatcher.UIThread.InvokeAsync(() => RoomUpdated(room));
                return;
            }

            RoomEntry entry = Rooms.FirstOrDefault(i => i.Room == room);

            if (entry != null)
            {
                entry.Room = room;
            }
        }
예제 #8
0
        void RoomAdded(Room room)
        {
            if (!Dispatcher.UIThread.CheckAccess())
            {
                Dispatcher.UIThread.InvokeAsync(() => RoomAdded(room));
                return;
            }

            RoomEntry entry = new RoomEntry()
            {
                Room = room
            };

            entry.RoomJoined += JoinRoom;
            RoomList.Children.Add(entry);
        }
    private void TranslateRoom()
    {
        attachedDoor = roomsManager.GetRandomRoomEntry();
        attachedDoor.SetSpawningEnabled(false);
        GameObject root        = roomScene.GetRoot();
        Vector3    oldPosition = root.transform.position;
        Vector3    oldRotation = root.transform.eulerAngles;

        translationFrame = Time.frameCount + 2;
        StartCoroutine(TranslateRoomOnNextUpdate(attachedDoor));
        dispatcher.SendEvent(new HallMovingTriggerEnteredEvent(
                                 translationFrame,
                                 oldPosition,
                                 oldRotation,
                                 attachedDoor.GetRootOffset(),
                                 attachedDoor.GetRootRotation()
                                 ));
    }
예제 #10
0
        public AddSchedules()
        {
            InitializeComponent();
            //Handle classrooms
            List <ClassroomInfo> allClassroomsList = Database.Get.Classroom.All("new");

            foreach (ClassroomInfo classroom in allClassroomsList)
            {
                ClassroomEntry classroomEntry = new ClassroomEntry()
                {
                    ID   = classroom.ClassroomId,
                    Name = classroom.Name
                };
                classromsList.Add(classroomEntry);
            }
            _classroomComboBox.ItemsSource   = classromsList;
            _classroomComboBox.SelectedIndex = 0;

            //Handle Rooms
            List <RoomInfo> allRoomsList = Database.Get.Room.All("new");

            foreach (RoomInfo room in allRoomsList)
            {
                RoomEntry roomEntry = new RoomEntry()
                {
                    ID   = room.RoomId,
                    Name = room.Name
                };
                roomsList.Add(roomEntry);
            }
            _roomNameComboBox.ItemsSource   = roomsList;
            _roomNameComboBox.SelectedIndex = 0;

            //Handle Repetitivity
            List <string> allRepetitivity = new List <string>()
            {
                "Une fois par semaine", "Une semaine sur deux"
            };

            _regularityComboBox.ItemsSource   = allRepetitivity;
            _regularityComboBox.SelectedIndex = 0;
        }
예제 #11
0
    public override void OnReceivedBroadcast(string fromAddress, string data)
    {
        if (isClient && !rooms.ContainsKey(fromAddress))
        {
            string[] parsed  = data.Split('@');
            bool     locked  = int.Parse(parsed [1]) == 1;
            int      maxPlyr = int.Parse(parsed [3]);
            rooms.Add(fromAddress, new RoomInfo(fromAddress, parsed [0], locked, int.Parse(parsed [2]), maxPlyr));
            GameObject curEntry = (GameObject)Instantiate(netMan.roomEntry);

            RoomEntry entry = curEntry.GetComponent <RoomEntry> ();
            entry.address   = fromAddress;
            entry.isNetGame = false;
            entry.SetLock(locked);
            entry.SetPlayerCount(parsed [2] + "/" + parsed [3]);
            entry.SetName(parsed [0]);
            entry.maxPlyr = maxPlyr;

            curEntry.transform.SetParent(netMan.lanListParent, false);
        }
    }
    IEnumerator WaitForRoomRefresh()
    {
        WWWForm form = new WWWForm();

        form.AddField("action", "getrooms");
        form.AddField("phppass", secretKey);
        form.AddField("natcap", natHelper.natCapability);
        form.AddField("externalip", Network.player.ipAddress);

        WWW www = new WWW(phpUrl, form);

        yield return(www);

        string ret = www.text;

        Debug.Log(ret);
        if (!string.IsNullOrEmpty(ret) && ret != "-5")
        {
            string[] parsed = ret.Split('#');
            foreach (string a in parsed)
            {
                string[]   parsed2  = a.Split('@');
                GameObject curEntry = (GameObject)Instantiate(roomEntry);

                RoomEntry entry  = curEntry.GetComponent <RoomEntry> ();
                bool      locked = int.Parse(parsed2 [2]) == 1;
                roomsClient.Add(parsed2[0], new NetRoomInfo(parsed2[0], parsed2[1], locked, int.Parse(parsed2[3]), int.Parse(parsed2[4])));
                entry.isNetGame = true;
                entry.gameID    = parsed2 [0];
                entry.SetName(parsed2 [1]);
                entry.SetLock(locked);
                entry.SetPlayerCount(parsed2[3] + "/" + parsed2[4]);
                entry.SetPlaying(false);                  // change this later

                curEntry.transform.SetParent(netListParent, false);
            }
        }
        waitingForRefresh = false;
    }
예제 #13
0
    /// <summary>
    /// Creates an array of bool to show wether there is a neighbor.
    /// Clockwise
    /// </summary>
    /// <param name="entry"></param>
    /// <returns></returns>
    private bool[] GetNeighborBools(RoomEntry entry, out int numNeigbors)
    {
        bool[] n = new bool[4];

        int num = 0;

        XZCoordinate cord = entry.coordinate;

        if (currentFloorParent.roomDict.ContainsKey(cord.UpCoordinate().ToString()))
        {
            num++;
            n[0] = true;
        }

        if (currentFloorParent.roomDict.ContainsKey(cord.RightCoordinate().ToString()))
        {
            num++;
            n[1] = true;
        }

        if (currentFloorParent.roomDict.ContainsKey(cord.DownCoordinate().ToString()))
        {
            num++;
            n[2] = true;
        }

        if (currentFloorParent.roomDict.ContainsKey(cord.LeftCoordinate().ToString()))
        {
            num++;
            n[3] = true;
        }

        numNeigbors = num;

        return(n);
    }
예제 #14
0
    /// <summary>
    /// Creates a room entry.
    /// </summary>
    /// <param name="x">x cord</param>
    /// <param name="z">y cord</param>
    /// <returns>The created room entry. If room already exist on the cord, null is returned</returns>
    private RoomEntry createRoomEntry(XZCoordinate coord)
    {
        if (currentFloorParent.roomDict.ContainsKey(coord.ToString()))
        {
            return(null);
        }

        // ini room entry and set cords
        RoomEntry entry = Instantiate(roomEntryPrefab.gameObject).GetComponent <RoomEntry>();

        entry.transform.SetParent(currentFloorParent.transform, false);

        entry.coordinate = new XZCoordinate(coord);

        Vector3 pos = coord.ToVector3();

        entry.transform.position = pos * roomSize;

        // add to room collections
        currentFloorParent.roomList.Add(entry);
        currentFloorParent.roomDict.Add(entry.coordinate.ToString(), entry);

        return(entry);
    }
예제 #15
0
    /// <summary>
    /// Generates a safezone
    /// </summary>
    private IEnumerator GenerateSafeZone()
    {
        if (currentFloorParent != null)
        {
            Destroy(currentFloorParent.gameObject);
            currentFloorParent = null;
        }

        SoundManager.instance.PlayMusic(2);
        currentFloorParent             = Instantiate(floorParentPrefab.gameObject).GetComponent <Floor>();
        currentFloorParent.floorNumber = PlayerProgress.currentFloor;

        if (OnBeginGeneration != null)
        {
            OnBeginGeneration(currentFloorParent, _rand);
        }

        RoomEntry entry = createRoomEntry(XZCoordinate.zero);

        entry.type = RoomEntry.RoomType.SAFE;
        currentFloorParent.entrance = entry;

        GameObject safeZone = Instantiate(GetCurrentSet().GetRandomSafeZonePrefab(_rand), entry.transform);

        safeZone.GetComponentInChildren <FloorExitTrigger>().TargetGenerator = this;

        yield return(new WaitForEndOfFrame());

        currentFloorParent.GetComponent <NavMeshSurface>().BuildNavMesh();

        // trigger event if anything is listening to it
        if (OnFloorGenerated != null)
        {
            OnFloorGenerated(currentFloorParent, _rand);
        }
    }
    private IEnumerator TranslateRoomOnNextUpdate(RoomEntry door)
    {
        yield return(new WaitWhile(() => Time.frameCount < translationFrame));

        door.AttachRoom(roomScene);
    }
예제 #17
0
 public void RegisterRoomEntry(RoomEntry door)
 {
     roomEntries.Add(door);
 }
예제 #18
0
        public ProgramReader(ProgramByCSVInputs input)
        {
            RoomEntries  = new List <RoomEntry>();
            RoomQuantity = 0.0;
            TotalArea    = 0.0;
            var lines = File.ReadAllText(input.Program.LocalFilePath).Split(new char[] { '\n', '\r' });

            if (lines.Count() < 2) //Drop the process if only the header row or an empty file exists.
            {
                return;
            }
            var i = 1;

            foreach (var line in lines.Skip(1)) //skip assumed header row
            {
                var row = new List <string>(line.Trim().Split(','));

                //Skip malformed rows or entries with quantities <= zero;
                if (row.Count() < 8 || !int.TryParse(row.ElementAt(4).ToString(), out int qVal) || qVal <= 0)
                {
                    continue;
                }
                if (!double.TryParse(row.ElementAt(5).ToString(), out double aVal))
                {
                    throw new ArgumentException("Area in Row " + i.ToString() + " does not resolve to a double value.");
                }
                if (!double.TryParse(row.ElementAt(6).ToString(), out double rVal))
                {
                    throw new ArgumentException("Ratio in Row " + i.ToString() + " does not resolve to a double value.");
                }
                var height = 0.0;
                if (double.TryParse(row.ElementAt(7).ToString(), out double hVal))
                {
                    height = Math.Abs(hVal);
                }
                else
                {
                    height = 4.0;
                }
                var roomEntry = new RoomEntry
                {
                    suiteName   = row.ElementAt(0).Trim(),
                    suiteNumber = row.ElementAt(1).Trim(),
                    department  = row.ElementAt(2).Trim(),
                    name        = row.ElementAt(3).Trim()
                };
                roomEntry.quantity = Math.Abs(qVal);
                roomEntry.area     = Math.Abs(aVal);
                roomEntry.height   = height;

                if (input.UseImperialUnits) //Convert from Imperial units if indicated.
                {
                    roomEntry.area   = Math.Round(roomEntry.area *= METRIC_FACTOR, 3);
                    roomEntry.height = Math.Round(roomEntry.height *= METRIC_FACTOR, 3);
                }
                roomEntry.ratio = Math.Abs(rVal);
                RoomEntries.Add(roomEntry);
                RoomQuantity += roomEntry.quantity;
                TotalArea    += roomEntry.area * roomEntry.quantity;
                i++;
            }
            RoomEntrySequence(input);
        }
    private void Start()
    {
        RoomEntry entry = transform.parent.gameObject.GetComponent <RoomEntry>();

        id = entry.GetId();
    }
예제 #20
0
        private static void WriteRoom(BBData data, RoomInfo ri, StringsChunkBuilder strings)
        {
            var re = new RoomEntry
            {
                Name       = strings.GetOffset(ri.Name),
                Caption    = ri.Caption == null ? 0 : strings.GetOffset(ri.Caption),
                Size       = ri.Size,
                Speed      = ri.Speed,
                Persistent = ri.IsPersistent ? DwordBool.True : DwordBool.False,
                Colour     = ri.Colour,

                DrawBackgroundColour = ri.DrawBackgroundColour ? DwordBool.True : DwordBool.False,
                _unknown             = ri._unknown,

                Flags = 0,

                World          = ri.World,
                Bounding       = ri.Bounding,
                Gravity        = ri.Gravity,
                MetresPerPixel = ri.MetresPerPixel
            };

            if (ri.EnableViews)
            {
                re.Flags |= RoomEntryFlags.EnableViews;
            }
            if (ri.ShowColour)
            {
                re.Flags |= RoomEntryFlags.ShowColour;
            }
            if (ri.ClearDisplayBuffer)
            {
                re.Flags |= RoomEntryFlags.ClearDisplayBuffer;
            }
            if (ri.UnknownFlag)
            {
                re.Flags |= RoomEntryFlags.Unknown;
            }

            var bgOffsetOffset      = (int)Marshal.OffsetOf(typeof(RoomEntry), "BgOffset");
            var viewOffsetOffset    = (int)Marshal.OffsetOf(typeof(RoomEntry), "ViewOffset");
            var objOffsetOffset     = (int)Marshal.OffsetOf(typeof(RoomEntry), "ObjOffset");
            var tileOffsetOffset    = (int)Marshal.OffsetOf(typeof(RoomEntry), "TileOffset");
            int objInstOffsetOffset = (int)Marshal.OffsetOf(typeof(RoomEntry), "MetresPerPixel") + 4;

            data.Buffer.Write(re);
            data.OffsetOffsets = new int[] { bgOffsetOffset, viewOffsetOffset, objOffsetOffset, tileOffsetOffset };

            if (ri.ObjInst != null)
            {
                data.Buffer.Write(0);
                data.OffsetOffsets = data.OffsetOffsets.Concat(new int[] { objInstOffsetOffset }).ToArray();
            }

            data.Buffer.Position = bgOffsetOffset;
            data.Buffer.Write(data.Buffer.Size);
            data.Buffer.Position = data.Buffer.Size;
            WriteList(data, ri.Backgrounds, WriteRoomBg);

            data.Buffer.Position = viewOffsetOffset;
            data.Buffer.Write(data.Buffer.Size);
            data.Buffer.Position = data.Buffer.Size;
            WriteList(data, ri.Views, WriteRoomView);

            data.Buffer.Position = objOffsetOffset;
            data.Buffer.Write(data.Buffer.Size);
            data.Buffer.Position = data.Buffer.Size;
            WriteList(data, ri.Objects, WriteRoomObj);

            data.Buffer.Position = tileOffsetOffset;
            data.Buffer.Write(data.Buffer.Size);
            data.Buffer.Position = data.Buffer.Size;
            WriteList(data, ri.Tiles, WriteRoomTile);

            if (ri.ObjInst != null)
            {
                data.Buffer.Position = objInstOffsetOffset;
                data.Buffer.Write(data.Buffer.Size);
                data.Buffer.Position = data.Buffer.Size;
                WriteList(data, ri.ObjInst, WriteRoomObjInst, strings);
            }

            // Unknown stuff for 2.0
            //for (int i = 0; i < 8; i++)
            //    data.Buffer.Write(0x3F3F3F3F);
        }