public void Load_Window(Transform parent) { base.Call_Window(parent); window = Instantiate(GlobalVariables.CABINETPREFAB, parent.parent); queue = window.GetComponent <CustomerQueue>(); window.Open_Window_X(() => queue.Load_Progress()); }
public void Cutomer_Queue_Ten_Item_Limit_Test() { // Arrange CustomerQueue <Customer> queue = new CustomerQueue <Customer>(); Customer c1 = new Customer("f1", "l1"); Customer c2 = new Customer("f2", "l2"); Customer c3 = new Customer("f3", "l3"); Customer c4 = new Customer("f4", "l4"); Customer c5 = new Customer("f5", "l5"); Customer c6 = new Customer("f6", "l6"); Customer c7 = new Customer("f7", "l7"); Customer c8 = new Customer("f8", "l8"); Customer c9 = new Customer("f9", "l9"); Customer c10 = new Customer("f10", "l10"); Customer c11 = new Customer("f11", "l11"); queue.Add(c1); queue.Add(c2); queue.Add(c3); queue.Add(c4); queue.Add(c5); queue.Add(c6); queue.Add(c7); queue.Add(c8); queue.Add(c9); queue.Add(c10); queue.Add(c11); // Act Customer first = queue.Remove(); // Assert Assert.AreEqual(first, c2); }
public static void AcceptNewCustomer(Customer customer) { if (!WorkingHours()) { return; } CurrentCustomer = customer; CustomerQueue <Customer> .Dequeue(Customers); CurrentCustomer.StopWaitForServicesTimer(); Dss.AddCustomer(CurrentCustomer); //daily logging service Lucy.Say($"Greetings {CurrentCustomer.Name}! My name is {Lucy.Name} and I will be your Repair Shop Manager today."); Lucy.Say($"Please leave your {CurrentCustomer.MyCar.Name} at the parking lot."); if (Lucy._isGarageEmpty) { Lucy._isGarageEmpty = false; } Lucy._lrw.StoreLog($"New customer: {CurrentCustomer.Name}, Car: {CurrentCustomer.MyCar.Name}, Customer registered"); Lucy.Say($"{CurrentCustomer.Name}, what shall we do with your {CurrentCustomer.MyCar.Name}?"); if (WorkingHours()) { CurrentCustomer.MakeDiagnosticsOrder(); } Lucy._css.AppendContractText(); RepairAutomationTool.MakeRepairChoice(); }
public static void CustomerOnHold() { Lucy.Say($"All repair men are busy at this moment! Please a little..."); CustomerQueue <Customer> .Enqueue(CurrentCustomer, CustomersOnHold); CurrentCustomer.SetWaitForServicesTimer(); }
public override void Close_Window() { queue = window.GetComponent <CustomerQueue>(); queue.Clear_Queue(); Time.timeScale = 1; Destroy(window); }
public void Cutomer_Queue_Remove_Order_Test() { // Arrange CustomerQueue <Customer> queue = new CustomerQueue <Customer>(); Customer c1 = new Customer("f1", "l1"); Customer c2 = new Customer("f2", "l2"); Customer c3 = new Customer("f3", "l3"); Customer c4 = new Customer("f4", "l4"); Customer c5 = new Customer("f5", "l5"); queue.Add(c1); queue.Add(c2); queue.Add(c3); queue.Add(c4); queue.Add(c5); // Act Customer first = queue.Remove(); Customer second = queue.Remove(); Customer third = queue.Remove(); Customer fourth = queue.Remove(); Customer fifth = queue.Remove(); // Assert Assert.AreEqual(first, c1); Assert.AreEqual(second, c2); Assert.AreEqual(third, c3); Assert.AreEqual(fourth, c4); Assert.AreEqual(fifth, c5); }
public override void Call_Window(Transform parent) { base.Call_Window(parent); window = Instantiate(GlobalVariables.CABINETPREFAB, parent.parent); queue = window.GetComponent <CustomerQueue>(); window.Open_Window_X(() => queue.New_Cabinet()); }
public static void HandleProblematicCustomer(Customer customer) { CustomerQueue <Customer> .Remove(Customers, customer); CustomerQueue <Customer> .Remove(CustomersOnHold, customer); Thread.Sleep(5000); }
public static void AddNewCustomers(int count) { DefaultCustomerList = new List <Customer>(); for (var i = 0; i < count; i++) { var newCustomer = new Customer(Cm.MakeCar()); newCustomer.Say($"{newCustomer.Name}: I heard this is a great place to repair my car. I might consider coming soon..."); CustomerQueue <Customer> .Enqueue(newCustomer, DefaultCustomerList); } }
// POST: api/BankingQueue public HttpResponseMessage Post(CustomerQueue q) { q = _bankRepo.Post(q); if (q == null) { return(Request.CreateResponse(HttpStatusCode.BadRequest)); } return(Request.CreateResponse(HttpStatusCode.Created, q)); }
public static void CheckQueue() { while (true) { if (ShopManager.CustomersOnHold.Count != 0) { ShopManager.ResumeWorkingWithCustomer(CustomerQueue <Customer> .Peek(ShopManager.CustomersOnHold)); } if (ShopManager.Customers.Count == 0) { continue; } ShopManager.AcceptNewCustomer(CustomerQueue <Customer> .Peek(ShopManager.Customers)); } }
// PUT: api/BankingQueue/5 public CustomerQueue Put(CustomerQueue q) { try { q = _bankRepo.Put(q); } catch (Exception) { throw new HttpResponseException(new HttpResponseMessage { StatusCode = HttpStatusCode.NotFound, Content = new StringContent("Task Not found") }); } return(q); }
public static void ResumeWorkingWithCustomer(Customer customer) { if (!WorkingHours()) { return; } CurrentCustomer = customer; CustomerQueue <Customer> .Dequeue(CustomersOnHold); CurrentCustomer.StopWaitForServicesTimer(); Lucy.Say($"Thank you for waiting. We are ready to complete your work orders, {CurrentCustomer.Name}!"); if (Lucy._isGarageEmpty) { Lucy._isGarageEmpty = false; } RepairAutomationTool.MakeRepairChoice(); }
public object EditQueue(QueueClassResponse queue) { try { var customerQueue = DB.Customers.Where(x => x.CustomerId == queue.customerId).FirstOrDefault(); var CustomerQueueTemp = customerQueue.CustomerQueue; customerQueue.CustomerQueue = null; DB.SaveChanges(); var queueToDelete = DB.CustomerQueues.Where(x => x.Id == CustomerQueueTemp).FirstOrDefault(); if (queueToDelete != null) { DB.CustomerQueues.Remove(queueToDelete); DB.SaveChanges(); } CustomerQueue queueClass = new CustomerQueue(); string day = queue.customerQueueDate.Substring(0, 2); string month = queue.customerQueueDate.Substring(3, 2); string year = queue.customerQueueDate.Substring(6, 4); string hour = queue.customerQueueTime; string date = day + "-" + month + "-" + year; string time = hour; queueClass.QueueTime = time; queueClass.QueueDate = date; queueClass.Treatment = queue.customerTreatment; DB.CustomerQueues.Add(queueClass); DB.SaveChanges(); var queueEntity = DB.CustomerQueues.Where(x => x.QueueDate == queue.customerQueueDate && x.QueueTime == queue.customerQueueTime).Select(x => x.Id).FirstOrDefault(); DB.Customers.Where(x => x.CustomerId == queue.customerId).ToList().ForEach(x => x.CustomerQueue = queueEntity); DB.SaveChanges(); return(new Response { Status = "Success", Message = "Appointment Made!" }); } catch (Exception ex) { throw; } return(new Response { Status = "Error", Message = "Fail" }); }
public void Cutomer_Queue_No_Item_Remove_Test() { // Arrange CustomerQueue <Customer> queue = new CustomerQueue <Customer>(); Customer first = null; // Act try { first = queue.Remove(); } // Assert catch (Exception) { Assert.Fail(); } Assert.AreEqual(first, null); }
public object SetQueue(QueueClassResponse queue) { try { if (DB.Customers.Where(x => x.CustomerId == queue.customerId).Select(x => x.CustomerQueue).FirstOrDefault() != null) { return(new Response { Status = "Exist", Message = "User already have an appointment." }); } CustomerQueue queueClass = new CustomerQueue(); string day = queue.customerQueueDate.Substring(0, 2); string month = queue.customerQueueDate.Substring(3, 2); string year = queue.customerQueueDate.Substring(6, 4); string hour = queue.customerQueueTime; string date = day + "-" + month + "-" + year; string time = hour; queueClass.QueueTime = time; queueClass.QueueDate = date; queueClass.Treatment = queue.customerTreatment; DB.CustomerQueues.Add(queueClass); DB.SaveChanges(); int id = DB.CustomerQueues.Where(x => x.QueueDate == queue.customerQueueDate && x.QueueTime == queue.customerQueueTime).Select(x => x.Id).FirstOrDefault(); var existingCustomer = DB.Customers.Where(x => x.CustomerId == queue.customerId).SingleOrDefault(); existingCustomer.CustomerQueue = id; DB.SaveChanges(); return(new Response { Status = "Success", Message = "Appointment Made!" }); } catch (Exception ex) { throw; } return(new Response { Status = "Error", Message = "Fail" }); }
public void Register(int r, Event e, CustomerQueue customerQueue, ServerQueue idleServerQueue) { sumLs[r] += customerQueue.GetLength() * (e.time - time[r]); sumLq[r] += (customerQueue.GetLength() - (nrServers - idleServerQueue.GetLength())) * (e.time - time[r]); if (e.type == Event.ARRIVAL) { nrArrivals[r, e.customer.cID]++; List <int> tmp = new List <int>(nrServers - idleServerQueue.list.Count); foreach (Customer customer in customerQueue.list) { if (customer.server != null) { tmp.Add(customer.server.sID); } if (tmp.Count == (nrServers - idleServerQueue.list.Count)) { break; } } if (configurations[r, e.customer.cID].ContainsKey(tmp)) { configurations[r, e.customer.cID][tmp]++; } else { configurations[r, e.customer.cID].Add(tmp, 1); } } else if (e.type == Event.DEPARTURE) { nrDepartures[r, e.customer.cID]++; sumS[r] += e.customer.departureTime - e.customer.arrivalTime; sumW[r] += e.customer.serviceTime - e.customer.arrivalTime; if (e.customer.arrivalTime != e.customer.serviceTime) { nrCustomersWait[r]++; } } time[r] = e.time; }
private void Start() { queue = FindObjectOfType <CustomerQueue>(); group = GetComponent <CustomerGroup>(); employee = GameManager.instance.localPlayer.Employee(); stateWaitForTable = AddState(new StateWaitForTable()); stateSeatTable = AddState(new StateSeatTable()); StateGoTo <CustomerGroup> goToDoor = new StateGoTo <CustomerGroup>(group, this, 1f, stateWaitForTable); goToDoor.SetDestination(() => { return(queue.NextQueuePosition()); }); stateWalkToDoor = AddState(goToDoor); goToTable = new StateGoTo <CustomerGroup>(group, this, 1f, stateSeatTable); stateWalkToTable = AddState(goToTable); if (photonView.isMine) { SwitchState(stateWalkToDoor); } }
public void Display() { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("***DAILY STATISTICS***"); foreach (var line in DailyStats) { Console.WriteLine($"{line}"); } Console.WriteLine($"-- Customers in Line --"); CustomerQueue <Customer> .Display(ShopManager.Customers); Console.WriteLine($"---------------------------------------"); Console.WriteLine($"-- Customers on Hold --"); CustomerQueue <Customer> .Display(ShopManager.CustomersOnHold); Console.WriteLine($"---------------------------------------"); foreach (var keyValue in ShopManager.Lucy.Salary) { Console.WriteLine($"{keyValue.Key.Name} earned {keyValue.Value}"); } Console.WriteLine("***END OF DAILY STATISTICS***"); Console.ForegroundColor = ConsoleColor.White; }
private int feverInterval; // fever 도달까지 필요한 combo 개수. void Start() { receipt = Receipt.Instance; trayWithDecks = Tray.Instance; wallet = Wallet.Instance; customersQ = CustomerQueue.Instance; feverTouchPool = PoolManager.Pools["FeverTouches"]; GS = GameState.Reset; level = 1; timer = 0f; levelCount = 0; feverCustomerCount = 0; successReceipt = 0; failedReceipt = 0; score = 0; combo = 0; maxCombo = 0; onCombo = true; comboTimer = comboInterval; maxChange = 0; feverCount = 0; feverTimer = 0; onFeverMode = false; feverStarted = false; isNewRecord = false; continueOnce = false; timerLb.text = "00"; scoreLb.Play(0); GAManager.Instance.GAPlayGame(); }
static void Main(string[] args) { Console.WriteLine("QUEUING SIMULATION", new String('\u2500', 80)); Console.WriteLine("Simulation started..."); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); // Create a directory and file to print the results string path = string.Concat(Environment.CurrentDirectory, "/Results/"); System.IO.Directory.CreateDirectory(path); string filename = string.Concat(path, "Results_U.csv"); using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, false)) { file.WriteLine("utilization,meanW,meanS,meanLq,meanLs,meanPW,theoreticPWMMC,meanWEstimation"); } // Runs (Number and time span resp.) int R = 6; double T = 1E6; // Pseudo-random number generator //Random rng = new Random(); ThreadLocal <Random> rng = new ThreadLocal <Random>(() => new Random()); int counter = new int(); Parallel.For(1, 20, new ParallelOptions { MaxDegreeOfParallelism = 3 }, rho => // MaxDegreeOfParallelism n + 1, where n is the number of cores { // Diagnosis //bool repeat = rng.IsValueCreated; //Console.WriteLine("ThreadName = {0} {1}", rng.Value, repeat ? "(repeat)" : ""); // Initialize servers //double[] serviceDistributionParameters = new double[] { 1, 1, 1, 1 }; double[,] serviceDistributionParameters = new double[, ] { { 0, 2 }, { 0, 2 }, { 0, 2 }, { 0, 2 } }; //double[] serviceDistributionParameters = new double[] { 1, 1, 1, 1 }; //double[,] serviceDistributionParameters = new double[,] { { 1, 2 }, { 1, 2 }, { 1, 2 }, { 1, 2 } }; int nrServers = serviceDistributionParameters.GetLength(0); Distribution[] serviceDistributions = new Distribution[nrServers]; for (int i = 0; i < nrServers; i++) { //serviceDistributions[i] = new DeterministicDistribution(rng.Value, serviceDistributionParameters[i]); serviceDistributions[i] = new UniformDistribution(rng.Value, serviceDistributionParameters[i, 0], serviceDistributionParameters[i, 1]); //serviceDistributions[i] = new ExponentialDistribution(rng.Value, serviceDistributionParameters[i]); //serviceDistributions[i] = new Hyper2ExponentialDistribution(rng.Value, serviceDistributionParameters[i, 0], serviceDistributionParameters[i, 1]); } // Exponential arrival rate double lambda = nrServers * (rho / 20.0); // Initialize customers double[] arrivalDistributionParameters = new double[] { lambda }; int nrCustomers = arrivalDistributionParameters.Length; Distribution[] arrivalDistributions = new Distribution[nrCustomers]; for (int i = 0; i < nrCustomers; i++) { arrivalDistributions[i] = new ExponentialDistribution(rng.Value, arrivalDistributionParameters[i]); } // Server-Customer Eligibility bool[][] eligibility = new bool[nrServers][]; for (int i = 0; i < nrServers; i++) { bool[] tmp = new bool[nrCustomers]; for (int j = 0; j < nrCustomers; j++) { tmp[j] = true; } eligibility[i] = tmp; } // Main simulation loop Results results = new Results(R, nrServers, nrCustomers, filename); for (int r = 0; r < R; r++) { double t = 0; FutureEvents futureEvents = new FutureEvents(); for (int i = 0; i < nrCustomers; i++) { Customer customer = new Customer(i); futureEvents.Add(new Event(Event.ARRIVAL, arrivalDistributions[i].Next(), customer)); } CustomerQueue customerQueue = new CustomerQueue(); ServerQueue idleServerQueue = new ServerQueue(); for (int i = 0; i < nrServers; i++) { Server server = new Server(i, eligibility[i]); idleServerQueue.Add(server); } while (t < T) { Event e = futureEvents.Next(); t = e.time; results.Register(r, e, customerQueue, idleServerQueue); if (e.type == Event.ARRIVAL) { customerQueue.CustomerCheckIn(e.customer, t); Server server = idleServerQueue.FindServer(e.customer.cID); if (server != null) // Eligible server available { idleServerQueue.Remove(server); e.customer.server = server; e.customer.serviceTime = t; e.customer.departureTime = t + serviceDistributions[server.sID].Next(); futureEvents.Add(new Event(Event.DEPARTURE, e.customer.departureTime, e.customer)); } futureEvents.Add(new Event(Event.ARRIVAL, t + arrivalDistributions[e.customer.cID].Next(), new Customer(e.customer.cID))); } else if (e.type == Event.DEPARTURE) { Customer customer = customerQueue.FindCustomer(e.customer.server); if (customer != null) { customer.serviceTime = t; customer.departureTime = t + serviceDistributions[customer.server.sID].Next(); futureEvents.Add(new Event(Event.DEPARTURE, customer.departureTime, customer)); } else { idleServerQueue.Add(e.customer.server); } customerQueue.CustomerCheckOut(e.customer); } else { Console.WriteLine("Invalid event type."); } } } results.GetMeans(rho / 20.0, serviceDistributions[0].residual); counter++; Console.WriteLine("\r{0}", counter); }); Console.WriteLine("\nSimulation complete.\nTotal elapsed time {0:0.00} minutes", stopwatch.ElapsedMilliseconds / 1000 / 60); //Console.ReadLine(); }
private static Results[] DoSimulation(Options options, Data data) { int limit = DetermineLimit(data); ThreadLocal <Random> rng = new ThreadLocal <Random>(() => new Random()); Results[] allResults = new Results[limit]; //for (int rho = 1; rho < limit; rho++) //{ Parallel.For(1, limit, new ParallelOptions { MaxDegreeOfParallelism = data.Threads }, rho => // MaxDegreeOfParallelism n + 1, where n is the number of cores { // Initialize servers Distribution[] serviceDistributions = CreateServiceDistributions(data, rng.Value); // Exponential arrival rate double lambda = data.ServerParameters.Sum(x => 1 / x.Average) * ((rho - 1) * data.Stepsize + 0.05); //double lambda = data.ServerParameters.Sum(x => 1 / x.Average) * rho * data.Stepsize; // Initialize customers Distribution[] arrivalDistributions = CreateArrivalDistributions(data, rng.Value, lambda); // Main simulation loop //Results results = new Results(data, rho * data.Stepsize, arrivalDistributions, serviceDistributions); Results results = new Results(data, ((rho - 1) * data.Stepsize + 0.05), arrivalDistributions, serviceDistributions); for (int r = 0; r < data.Runs; r++) { double t = 0; FutureEvents futureEvents = new FutureEvents(); for (int i = 0; i < data.nrCustomers; i++) { Customer customer = new Customer(i); futureEvents.Add(new Event(Event.ARRIVAL, arrivalDistributions[i].Next(), customer)); } CustomerQueue customerQueue = new CustomerQueue(); ServerQueue idleServerQueue = new ServerQueue(); for (int i = 0; i < data.nrServers; i++) { Server server = new Server(i, data.Eligibility[i]); idleServerQueue.Add(server); } while (results.DepartureCounter(r) < options.DeparturesToSimulate) { Event e = futureEvents.Next(); t = e.time; results.Register(r, e, customerQueue, idleServerQueue); if (e.type == Event.ARRIVAL) { customerQueue.CustomerCheckIn(e.customer, t); Server server = idleServerQueue.FindServer(e.customer.cID); if (server != null) // Eligible server available { idleServerQueue.Remove(server); e.customer.server = server; e.customer.serviceTime = t; e.customer.departureTime = t + serviceDistributions[server.sID].Next(); futureEvents.Add(new Event(Event.DEPARTURE, e.customer.departureTime, e.customer)); } futureEvents.Add(new Event(Event.ARRIVAL, t + arrivalDistributions[e.customer.cID].Next(), new Customer(e.customer.cID))); } else if (e.type == Event.DEPARTURE) { Customer customer = customerQueue.FindCustomer(e.customer.server); if (customer != null) { customer.serviceTime = t; customer.departureTime = t + serviceDistributions[customer.server.sID].Next(); futureEvents.Add(new Event(Event.DEPARTURE, customer.departureTime, customer)); } else { idleServerQueue.Add(e.customer.server); } customerQueue.CustomerCheckOut(e.customer); } else { Console.WriteLine("Invalid event type."); } } } allResults[rho] = results; }); //} return(allResults); }
private void GoToRepairShop() { CustomerQueue <Customer> .Enqueue(this, ShopManager.Customers); SetWaitForServicesTimer(); }
public static void RemoveDisappointedCustomer(Customer customer) { CustomerQueue <Customer> .Remove(DefaultCustomerList, customer); }
private void GoToRepairShop(bool isOnWarranty) { MyCar.IsOnWarranty = isOnWarranty; CustomerQueue <Customer> .Enqueue(this, ShopManager.Customers); }
// Use this for initialization void Start() { options = new Options(); ConfirmationScript[] sdsdfd = GameObject.FindObjectsOfType<ConfirmationScript>(); ticketQueue = new CustomerQueue(11, 38.5f, 6.8f, 0); #region Find Objects theTileManager = GameObject.Find("TileManagement").GetComponent<TileManager>(); GameObject custStatus = GameObject.Find("Customer Status"); movementScript.customerStatus = custStatus; GameObject[] tmpArray = GameObject.FindGameObjectsWithTag("Floor Tile"); steps = GameObject.Find("Steps"); mouseDrag.staffAttributePanel = GameObject.Find("Staff Attributes"); #endregion Customer.tiles = floorTiles; #region Hide Objects on Start custStatus.SetActive(false); shopController.redCarpet.SetActive(false); mouseDrag.staffAttributePanel.SetActive(false); #endregion #region Add Delegate references mouseDrag.getStaffJobById += GetStaffJobById; mouseDrag.changeStaffJob += UpdateStaffJob; movementScript.addToQueueTickets += AddToQueueTickets; movementScript.getQueueTicketsSize += GetTicketQueueSize; movementScript.addToQueueFood += AddToQueueFood; movementScript.getQueueFoodSize += GetFoodQueueSize; #endregion #region Facebook stuff GameObject pnlNoFriends = GameObject.Find("pnlNoFriends"); try { string fbUserID = FBScript.current.id; if (fbUserID.Length > 0) { cmdFriends.SetActive(true); facebookProfile = new FacebookFriend(); facebookProfile.name = FBScript.current.firstname + " " + FBScript.current.surname; facebookProfile.id = FBScript.current.id; facebookProfile.friends = FBScript.current.friendList; if (facebookProfile.friends.Count > 0) { pnlNoFriends.SetActive(false); } else { pnlNoFriends.SetActive(true); } for (int i = 0; i < facebookProfile.friends.Count; i++) { GameObject go = (GameObject)Instantiate(friendObject.gameObject, new Vector3(0, 0, 0), Quaternion.identity); go.transform.SetParent(popupController.friendList, false); Text[] textComponents = go.GetComponentsInChildren<Text>(); textComponents[0].text = facebookProfile.friends[i].name; Button[] buttonComponents = go.GetComponentsInChildren<Button>(); string idToSend = facebookProfile.friends[i].id; string nameToSend = facebookProfile.friends[i].name; buttonComponents[0].onClick.AddListener(() => ViewFriendsCinema(idToSend, nameToSend)); buttonComponents[1].onClick.AddListener(() => ViewFriendsCinema(idToSend, nameToSend)); } } else { pnlNoFriends.SetActive(true); // if the user has not logged into Facebook, hide the facebook friends button cmdFriends.SetActive(false); } } catch (Exception) { } #endregion // this will change depending on starting upgrade levels and other queues etc #region Load / New Game if (ButtonScript.friendData != null) { GameObject.Find("Bottom Panel").SetActive(false); GameObject.Find("lblOwnerName").GetComponent<Text>().text = ButtonScript.owner + "'s Cinema"; ButtonScript.dataCopy = ButtonScript.loadGame; ButtonScript.loadGame = ButtonScript.friendData; ButtonScript.friendData = null; } else { GameObject.Find("FriendPanel").SetActive(false); } // get Player data. If not null, load game if (ButtonScript.loadGame == null) { financeController.Inititalise(45000, 4); carpetColour = GetColourFromID(1); customerController.reputation = new Reputation(); customerController.reputation.Initialise(); OtherObjectScript.CreateStaffSlot(1, new Vector3(37.8f, 12.3f, 0)); #region Floor Tiles floorTiles = new GameObject[40, 80]; // initialise the floor tiles for (int i = 0; i < tmpArray.Length; i++) { string name = tmpArray[i].name; string[] tmp = name.Split('~'); int x = int.Parse(tmp[1]); int y = int.Parse(tmp[2]); tmpArray[i].GetComponent<SpriteRenderer>().color = carpetColour; tmpArray[i].GetComponent<SpriteRenderer>().sprite = ColourBackground; //tmpArray[i].GetComponent<SpriteRenderer>().sprite = profilePicture; // for funny times, uncomment this line floorTiles[x, y] = tmpArray[i]; } #endregion for (int i = 0; i < 1; i++) { Vector3 pos = floorTiles[i * 11, 0].transform.position; ShopController.theScreens.Add(new ScreenObject((i + 1), 0)); ShopController.theScreens[i].SetPosition((int)pos.x, (int)pos.y); } ShopController.theScreens[0].Upgrade(); ShopController.theScreens[0].UpgradeComplete(); // NYAH NextDay(false, false); // do staff intro thing here popupController.ShowPopup(99, "Welcome!!! This is your cinema!\nLets get started by hiring some staff shall we?"); foodArea = null; } else { statusCode = 0; PlayerData data = ButtonScript.loadGame; carpetColour = new Color(data.carpetColour[0], data.carpetColour[1], data.carpetColour[2]); shopController.LoadDecorations(data.hasRedCarpet, data.posters); isMarbleFloor = data.marbleFloor; customerController.reputation = data.reputation; foodArea = data.foodArea; options.Load(data.options); int boxLevel = data.boxOfficeLevel; OtherObjectScript.CreateStaffSlot(1, new Vector3(37.8f, 12.3f, 0)); for (int i = 0; i < boxLevel - 1; i++) { OtherObjectScript.UpgradeBoxOffice(); } #region Floor Tiles // initialise the floor tiles floorTiles = new GameObject[40, 80]; for (int i = 0; i < tmpArray.Length; i++) { string name = tmpArray[i].name; string[] tmp = name.Split('~'); int x = int.Parse(tmp[1]); int y = int.Parse(tmp[2]); tmpArray[i].GetComponent<SpriteRenderer>().color = carpetColour; if (!isMarbleFloor) { tmpArray[i].GetComponent<SpriteRenderer>().sprite = ColourBackground; } else { tmpArray[i].GetComponent<SpriteRenderer>().sprite = marbleSquares[UnityEngine.Random.Range(0, 3)]; } floorTiles[x, y] = tmpArray[i]; } #endregion ShopController.theScreens = new List<ScreenObject>(data.theScreens); SaveableStaff[] s = data.staffMembers; for (int i = 0; i < s.Length; i++) { int id = s[i].index; string name = s[i].name; Transform transform = staffPrefab; int dayHired = s[i].dayHired; int tID = s[i].transformID; int[] attributes = s[i].attributes; float[,] cols = s[i].colourArrays; int hair = s[i].hairStyleID; int extras = s[i].extrasID; GameObject go = GameObject.Find("AppearanceController"); AppearanceScript aS = go.GetComponent<AppearanceScript>(); Sprite hairSprite = null; Sprite extraSprite = null; if (hair != 9) { hairSprite = aS.hairStyles[hair]; } if (extras != 5) { extraSprite = aS.extraImages[extras]; } Color[] c = new Color[3]; for (int colID = 0; colID < 3; colID++) { c[colID] = new Color(cols[colID, 0], cols[colID, 1], cols[colID, 2]); } StaffMember newStaff = new StaffMember(id, name, transform, dayHired, tID, hairSprite); newStaff.SetColours(c, hair, extras); newStaff.SetSprites(hairSprite, extraSprite); newStaff.SetAttributes(attributes); int x = 35 + (2 * (newStaff.GetIndex() % 6)); ; int y = 2 * (newStaff.GetIndex() / 6); staffMembers.Add(newStaff); CreateStaff(newStaff, x, y); } filmShowings = new List<FilmShowing>(data.filmShowings); currDay = data.currentDay; numScreens = ShopController.theScreens.Count; financeController.Inititalise(data.totalCoins, data.numPopcorn); ShopController.otherObjects = new List<OtherObject>(data.otherObjects); NextDay(false, false); currDay--; // needed for some reason // hopefully un-breaks things for (int i = 0; i < ShopController.theScreens.Count; i++) { Vector3 pos = new Vector3(ShopController.theScreens[i].GetX(), ShopController.theScreens[i].GetY(), 0); ShopController.theScreens[i].SetPosition((int)pos.x, (int)(pos.y)); } // sort staff appearance GameObject[] staffs = GameObject.FindGameObjectsWithTag("Staff"); for (int i = 0; i < staffs.Length; i++) { SpriteRenderer[] srs = staffs[i].GetComponentsInChildren<SpriteRenderer>(); srs[0].color = staffMembers[i].GetColourByIndex(0); srs[1].color = staffMembers[i].GetColourByIndex(2); srs[2].color = staffMembers[i].GetColourByIndex(2); srs[3].color = staffMembers[i].GetColourByIndex(1); srs[4].color = staffMembers[i].GetColourByIndex(1); srs[3].sprite = staffMembers[i].GetHairStyle(); srs[4].sprite = staffMembers[i].GetExtras(); } shopController.ShowPosters(0); shopController.ShowPosters(1); if (popcornSpent > 0) { financeController.RemovePopcorn(Controller.popcornSpent); financeController.popcornLabel.text = financeController.GetNumPopcorn().ToString(); Controller.popcornSpent = 0; DoAutosave(); } string fbID = FBScript.current.id; try { if (isOwned) { Gifting g = new Gifting(); List<String> gifts = g.GetGifts(fbID); if (gifts.Count > 0) { List<int> counts = new List<int>(); List<string> names = new List<string>(); // group together - i.e. Susan McDonaldman: 3 for (int i = 0; i < gifts.Count; i++) { bool found = false; for (int checkLoop = 0; checkLoop < names.Count; checkLoop++) { if (names[checkLoop].Equals(gifts[i])) { found = true; counts[checkLoop]++; break; } } if (!found) { names.Add(gifts[i]); counts.Add(1); } } financeController.AddPopcorn(gifts.Count); for (int i = 0; i < names.Count; i++) { // add the element / objects Transform t = Instantiate(giftObject, new Vector2(0, 0), Quaternion.identity) as Transform; // set parent to the element container Transform giftContainer = GameObject.Find("GiftContainer").transform; t.SetParent(giftContainer); // change the values Text[] txts = t.GetComponentsInChildren<Text>(); txts[0].text = names[i]; txts[1].text = counts[i].ToString(); } // show the popup GameObject giftPanel = GameObject.Find("GiftList"); giftPanel.GetComponent<Canvas>().enabled = true; DoAutosave(); } } } catch (Exception) { popupController.ShowPopup(0, "Error getting Gifts"); } } #endregion // create some test screens for (int i = 0; i < ShopController.theScreens.Count; i++) { Vector3 pos = new Vector3(ShopController.theScreens[i].GetX(), ShopController.theScreens[i].GetY() * 0.8f, 0); // change pos and element here pos.y += 0.8f; shopController.AddScreen(ShopController.theScreens[i], pos, height); SetTiles(2, (int)(ShopController.theScreens[i].GetX()), (int)(ShopController.theScreens[i].GetY()), 11, 15); } // do same for other objects for (int i = 0; i < ShopController.otherObjects.Count; i++) { Vector3 pos = new Vector3(ShopController.otherObjects[i].xPos, ShopController.otherObjects[i].yPos * 0.8f, 0); DimensionTuple t = shopController.GetBounds(ShopController.otherObjects[i].type); shopController.AddObject(pos, i, height, ShopController.otherObjects[i].type, true); SetTiles(2, (int)(ShopController.otherObjects[i].xPos), (int)(ShopController.otherObjects[i].yPos), t.width, t.height); } //createColourPicker(); if (updateTileState != null) { updateTileState(33, 0, 14, 16, 1, true); updateTileState(33, 16, 14, 4, 2, true); } GameObject[] pointers = GameObject.FindGameObjectsWithTag("Pointer"); for (int i = 0; i < pointers.Length; i++) { pointers[i].GetComponent<Transform>().GetComponent<SpriteRenderer>().enabled = false; } dayLabel.text = "DAY: " + currDay.ToString(); // create staff slots for food area if not null if (foodArea != null) { GameObject go = GameObject.FindGameObjectWithTag("Food Area"); Vector2 pos = go.transform.position; for (int i = 0; i < foodArea.tableStatus + 1; i++) { OtherObjectScript.CreateStaffSlot(2, pos + new Vector2(3 + (2.5f * i), 7.95f)); } if (foodArea.tableStatus == 1) { foodQueue.Upgrade(); } } NewShowTimes(); }
/// <summary> /// Add a new object to the cinema /// </summary> /// <param name="x">The x position to add it in</param> /// <param name="y">The y position to add it in</param> public void AddNewObject(int x, int y) { popupController.confirmMovePanel.SetActive(false); popupController.moveButtons.SetActive(false); Vector3 pos = new Vector3(x, y * 0.8f, 0); //float xCorrection = 0; //float yCorrection = 0; if (itemToAddID == 0) { //xCorrection = 4.6f; //yCorrection = 6.05f; int newID = ShopController.theScreens.Count; ScreenObject aScreen = new ScreenObject(newID + 1, 0); aScreen.SetPosition(x, y); aScreen.Upgrade(); ShopController.theScreens.Add(aScreen); //pos.x += xCorrection; //pos.y += yCorrection; pos.y += 0.8f; // gap at bottom GameObject screenThing = shopController.AddScreen(ShopController.theScreens[newID], pos, height); // check staff position CheckStaffPosition(screenThing); for (int i = 0; i < staffMembers.Count; i++) { staffMembers[i].GetTransform().Translate(new Vector3(0, 0, -1)); } } else { if (itemToAddID == 7) { foodArea = new FoodArea(); foodArea.hasHotFood = true; // give them 1 thing to start with foodQueue = new CustomerQueue(70, x + 3, ((y + 4) * 0.8f) - 1, 1); } OtherObject oo = new OtherObject(x, y, itemToAddID, ShopController.otherObjects.Count + 1); ShopController.otherObjects.Add(oo); GameObject theObject = shopController.AddObject(pos, ShopController.otherObjects.Count, height, itemToAddID, true); // check staff position CheckStaffPosition(theObject); for (int i = 0; i < staffMembers.Count; i++) { staffMembers[i].GetTransform().Translate(new Vector3(0, 0, -1)); } SpriteRenderer[] subImages = theObject.GetComponentsInChildren<SpriteRenderer>(); if (itemToAddID == 7) { try { subImages[1].enabled = foodArea.hasHotFood; subImages[2].enabled = foodArea.hasPopcorn; subImages[3].enabled = foodArea.hasIceCream; subImages[4].enabled = true; subImages[5].enabled = true; int baseOrder = subImages[0].sortingOrder; subImages[0].sortingOrder = baseOrder - 2; subImages[1].sortingOrder = baseOrder + 1; subImages[2].sortingOrder = baseOrder + 1; subImages[3].sortingOrder = baseOrder + 1; subImages[4].sortingOrder = baseOrder + 1; subImages[5].sortingOrder = baseOrder - 5; OtherObjectScript.CreateStaffSlot(2, theObject.transform.position + new Vector3(3, 7.95f, 0)); NewShowTimes(); } catch (Exception) { } } } itemToAddID = -1; SetTiles(2, theTileManager.toMoveX, theTileManager.toMoveY, theTileManager.fullWidth, theTileManager.fullHeight); ChangeColour(carpetColour, theTileManager.toMoveX, theTileManager.toMoveY, theTileManager.fullWidth, theTileManager.fullHeight); CheckForPath(); theTileManager.ResetStatusVariables(); statusCode = 0; //GameObject[] staff = GameObject.FindGameObjectsWithTag("Staff"); //for (int i = 0; i < staff.Length; i++) //{ // SpriteRenderer[] srs = staff[i].GetComponentsInChildren<SpriteRenderer>(); // for (int j = 0; j < 6; j++) // { // srs[j].enabled = true; // } // srs[5].enabled = false; // // sort z position // staff[i].transform.position = new Vector3(staff[i].transform.position.x, staff[i].transform.position.y, -1); //} ReShowStaffAndBuildings(); GameObject foodPlace = GameObject.FindGameObjectWithTag("Food Area"); if (foodPlace != null) { SpriteRenderer[] foodAreaRenderers = foodPlace.GetComponentsInChildren<SpriteRenderer>(); foreach (SpriteRenderer sr in foodAreaRenderers) { sr.color = new Color(1, 1, 1, 1); } } objectSelected = ""; tagSelected = ""; upgradeLevelSelected = 0; }