private void Start() { int num = 0; foreach (object obj in base.transform) { Transform transform = (Transform)obj; TableNodes component = transform.GetComponent <TableNodes>(); nodes.Add(component); if (num < component.table.tableNumber) { num = component.table.tableNumber; } } tables = new TableGroup[num]; for (int i = 0; i < tables.Length; i++) { tables[i] = new TableGroup(); tables[i].capacity = 0; tables[i].tableMats = new List <Table>(); tables[i].tableNodes = new List <TableNodes>(); } foreach (TableNodes tableNodes in nodes) { int num2 = tableNodes.table.tableNumber - 1; tables[num2].tableNodes.Add(tableNodes); tables[num2].tableMats.Add(tableNodes.table); tables[num2].capacity++; } }
public static MultiNodes BuildTable(EntityDef e, List <Semantics.Node> l) { var Lines = l.Select(n => new TableLine { Nodes = n.Stem.Children.Select(c => TableLineNode.CreateSingleLineLiteral(new SingleLineLiteral { Text = c.Stem.Children.Single().Leaf })).ToList(), SingleLineComment = TreeFormat.Optional <SingleLineComment> .Empty }).ToList(); var TableNodes = new TableNodes { ChildHead = new SingleLineLiteral { Text = e.Name }, ChildFields = e.Fields.Where(f => f.Attribute.OnColumn).Select(c => new SingleLineLiteral { Text = c.Name }).ToList(), SingleLineComment = TreeFormat.Optional <SingleLineComment> .Empty, Children = Lines, EndDirective = TreeFormat.Optional <EndDirective> .Empty }; var Table = new MultiLineNode { Head = new SingleLineLiteral { Text = e.CollectionName }, SingleLineComment = TreeFormat.Optional <SingleLineComment> .Empty, Children = new List <MultiNodes> { MultiNodes.CreateTableNodes(TableNodes) }, EndDirective = TreeFormat.Optional <EndDirective> .Empty }; return(MultiNodes.CreateNode(Node.CreateMultiLineNode(Table))); }
/// <summary> /// Loads the database for this instance. /// may be called multiple times, if uploading multiple CSV files. /// </summary> /// <param name="fileName"></param> /// <returns></returns> public override bool LoadSchema(string fileName) { //enforce that the filename must be a known configuration. if (!FileIsKnown(fileName)) { return(false); } var dbPreview = new CsvReader(new StreamReader(fileName), true); if (CsvDataToImport == null) { CsvDataToImport = new List <CsvDataModel>(); TableNodes = new List <DatabaseNode>(); } //a local tableNode object, which will track this one of multiple CSV files that may be imported List <DatabaseNode> tableNodes = new List <DatabaseNode>(); CsvDataToImport.Add(new CsvDataModel(fileName) { TableNodes = tableNodes, RecordType = GetRecordTypeFromFilename(fileName) }); var tableItem = new DatabaseNode(); tableItem.Name = Path.GetFileNameWithoutExtension(fileName); int currentIndex = 0; var firstRow = dbPreview.ElementAtOrDefault(0); if (firstRow != null) { foreach (var columnName in dbPreview.GetFieldHeaders()) { var childItem = new DatabaseNode(); childItem.Name = columnName; childItem.NodeType = typeof(string); childItem.Value = firstRow[currentIndex] ?? string.Empty; childItem.Table.Add(tableItem); tableItem.Columns.Add(childItem); currentIndex++; } tableNodes.Add(tableItem); TableNodes.Add(tableItem); //this is to maintain compatibility with the base Excavator object. } return(tableNodes.Count() > 0 ? true : false); }
/// <summary> /// Transforms the data from the dataset. /// </summary> /// <returns></returns> public override int TransformData(string importUser = null) { ReportProgress(0, "Starting import..."); var rockContext = new RockContext(); var personService = new PersonService(rockContext); var importPerson = personService.GetByFullName(importUser, allowFirstNameOnly: true).FirstOrDefault(); if (importPerson == null) { importPerson = personService.Queryable().FirstOrDefault(); } ImportPersonAlias = new PersonAliasService(rockContext).Get(importPerson.Id); var tableList = TableNodes.Where(n => n.Checked != false).ToList(); ReportProgress(0, "Checking for existing attributes..."); LoadExistingRockData(); ReportProgress(0, "Checking for table dependencies..."); bool isValidImport = ImportedPeople.Any() || tableList.Any(n => n.Name.Equals("Individual_Household")); var tableDependencies = new List <string>(); tableDependencies.Add("Batch"); // needed to attribute contributions properly tableDependencies.Add("Users"); // needed for notes, user logins tableDependencies.Add("Company"); // needed to attribute any business items tableDependencies.Add("Individual_Household"); // needed for just about everything tableDependencies.Add("ActivityMinistry"); // needed for RLC and Attendance tableDependencies.Add("RLC"); // needed for Attendance if (isValidImport) { // Order tables so non-dependents are imported first if (tableList.Any(n => tableDependencies.Contains(n.Name))) { tableList = tableList.OrderByDescending(n => tableDependencies.IndexOf(n.Name)).ToList(); } var scanner = new DataScanner(Database); foreach (var table in tableList) { if (!tableDependencies.Contains(table.Name)) { switch (table.Name) { case "Account": MapBankAccount(scanner.ScanTable(table.Name).AsQueryable()); break; case "Communication": MapCommunication(scanner.ScanTable(table.Name).AsQueryable()); break; case "Contribution": MapContribution(scanner.ScanTable(table.Name).AsQueryable()); break; case "Household_Address": MapFamilyAddress(scanner.ScanTable(table.Name).AsQueryable()); break; case "Notes": MapNotes(scanner.ScanTable(table.Name).AsQueryable()); break; case "Pledge": MapPledge(scanner.ScanTable(table.Name).AsQueryable()); break; case "Attribute": MapAttributes(scanner.ScanTable(table.Name).AsQueryable()); break; case "Groups": MapGroups(scanner.ScanTable(table.Name).AsQueryable()); break; //case "ActivityMinistry": // MapActivityMinistry( scanner.ScanTable( table.Name ).AsQueryable() ); // break; //case "RLC": // MapRLC( scanner.ScanTable( table.Name ).AsQueryable() ); // break; case "Attendance": MapAttendance(scanner.ScanTable(table.Name).AsQueryable()); break; case "IndividualContactNotes": MapIndividualContactNotes(scanner.ScanTable(table.Name).AsQueryable()); break; case "GiftednessProgram": MapGiftednessProgram(scanner.ScanTable(table.Name).AsQueryable()); break; case "IndividualGiftedness": MapIndividualGiftedness(scanner.ScanTable(table.Name).AsQueryable()); break; case "Authorizations": MapAuthorizations(scanner.ScanTable(table.Name).AsQueryable()); break; case "ActivityAssignment": MapActivityAssignment(scanner.ScanTable(table.Name).AsQueryable()); break; case "GroupsAttendance": MapGroupsAttendance(scanner.ScanTable(table.Name).AsQueryable()); break; default: break; } } else { if (table.Name == "Batch") { MapBatch(scanner.ScanTable(table.Name).AsQueryable()); } else if (table.Name == "Company") { MapCompany(scanner.ScanTable(table.Name).AsQueryable()); } else if (table.Name == "Individual_Household") { MapPerson(scanner.ScanTable(table.Name).AsQueryable()); } else if (table.Name == "Users") { MapUsers(scanner.ScanTable(table.Name).AsQueryable()); } else if (table.Name == "ActivityMinistry") { MapActivityMinistry(scanner.ScanTable(table.Name).AsQueryable()); } else if (table.Name == "RLC") { MapRLC(scanner.ScanTable(table.Name).AsQueryable()); } } } ReportProgress(100, "Import completed. "); } else { ReportProgress(0, "No imported people exist. Please include the Individual_Household table during the import."); } return(0); // return total number of rows imported? }
/// <summary> /// Transforms the data from the dataset. /// </summary> public override int TransformData(string importUser = null) { // Report progress to the main thread so it can update the UI ReportProgress(0, "Starting import..."); // Instantiate the object model service var rockContext = new RockContext(); // Connects to the source database (already loaded in memory by the UI) var scanner = new DataScanner(Database); // List of tables the user would like to import var tableList = TableNodes.Where(n => n.Checked != false).Select(n => n.Name).ToList(); // Supplies a lazy-loaded database queryable var tableData = scanner.ScanTable("TableName").AsQueryable(); // Hold a count of how many records have been imported int completed = 0; // Pick a method to save data to Rock: #1 (simple) or #2 (fast) // Option #1. Standard way to put data in Rock foreach (var dataRow in tableData) { // Get a value from the row. This has to be a nullable type. string columnValue = dataRow["ColumnName"] as string; // Create a Rock model and assign data to it Person person = new Person(); person.LastName = columnValue; rockContext.WrapTransaction(() => { // If it's a new model, add it to the database first rockContext.People.Add(person); // Save the data to the database rockContext.SaveChanges(DisableAudit); }); completed++; } // end option #1 // Option #2. More efficient way to import large data sets var newPersonList = new List <Person>(); foreach (var dataRow in tableData) { // Get a value from the row. This has to be a nullable type. string columnValue = dataRow["ColumnName"] as string; // Create a Rock model and assign data to it Person person = new Person(); newPersonList.Add(new Person()); completed++; // Save 100 people at a time if (completed % ReportingNumber < 1) { SaveModel(newPersonList); } } // Outside foreach, save any that haven't been saved yet if (newPersonList.Any()) { SaveModel(newPersonList); } // end option #2 // Report the final imported count ReportProgress(100, string.Format("Completed import: {0:N0} records imported.", completed)); return(completed); }
private void Update() { if (currentlyWants == wants.toEnter) { if (pathToFollow == null || pathToFollow.Count == 0) { CreatePath(graph.enterance.transform.position); } else { if ((pathToFollow[0].transform.position + randomDistanceFromNodeBias - transform.position).magnitude < 10f) { if (Enterance.npcsWaiting < 6) { pathToFollow.RemoveAt(0); } else { setWants(wants.toExitScene); pathToFollow = new List <NavigationScript>(); FindExit(false); CreatePath(exitNode.transform.position); } if (UnityEngine.Random.value > 0.5f) { randomDistanceFromNodeBias = UnityEngine.Random.insideUnitSphere * 5f; randomDistanceFromNodeBias.y = 0f; } } RaycastHit raycastHit; if (pathToFollow.Count == 0) { Enterance.npcsWaiting++; // System if (SceneManager.GetSceneAt(0).buildIndex == 2) { setWants(wants.toFindSeat); } else { pathToFollow.Add(graph.nodes.ToArray()[12]); setWants(wants.toOrder); //setWants(wants.toFindSeat); } } else if (Time.time > lastLinecastCheck + linecastCheckDelay && Physics.Linecast(transform.position, pathToFollow[0].transform.position, out raycastHit, pathfindLayerMask) && raycastHit.distance < 3f) { if (timesStuckPathfinding > 4) { gameObject.layer = 16; } randomDistanceFromNodeBias = UnityEngine.Random.insideUnitSphere * 0.2f; randomDistanceFromNodeBias.y = 0f; CreatePath(graph.enterance.transform.position); timesStuckPathfinding++; lastLinecastCheck = Time.time; } else { Vector3 vector = Vector3.zero; Vector3 a = Vector3.zero; vector += Seek(pathToFollow[0].transform.position + randomDistanceFromNodeBias) * followWeight; a = vector; a.y = 0f; vector += SeparateAvoidNodes() * avoidNodesWeight; vector.y = 0f; if (vector != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a + transform.forward); } GetComponent <Rigidbody>().AddForce(vector.normalized * maxSpeed * 10f * Time.deltaTime); } } } else if (currentlyWants == NPC.wants.toExitScene) { if (pathToFollow == null || pathToFollow.Count == 0) { CreatePath(exitNode.transform.position); } else { if ((pathToFollow[0].transform.position + randomDistanceFromNodeBias - transform.position).magnitude < 10f) { pathToFollow.RemoveAt(0); if (UnityEngine.Random.value > 0.5f) { randomDistanceFromNodeBias = UnityEngine.Random.insideUnitSphere * 5f; randomDistanceFromNodeBias.y = 0f; } } RaycastHit raycastHit2; if (pathToFollow.Count == 0) { SpawnNPC.currentNPCs--; Destroy(gameObject); } else if (Time.time > lastLinecastCheck + linecastCheckDelay && Physics.Linecast(transform.position, pathToFollow[0].transform.position, out raycastHit2, layerMask) && raycastHit2.distance < 3f) { if (timesStuckPathfinding > 4) { gameObject.layer = 15; } randomDistanceFromNodeBias = UnityEngine.Random.insideUnitSphere * 0.2f; randomDistanceFromNodeBias.y = 0f; CreatePath(exitNode.transform.position); timesStuckPathfinding++; lastLinecastCheck = Time.time; } else { Vector3 vector2 = Vector3.zero; Vector3 a2 = Vector3.zero; vector2 += Seek(pathToFollow[0].transform.position + randomDistanceFromNodeBias) * followWeight; a2 = vector2; a2.y = 0f; vector2 += SeparateAvoidNodes() * avoidNodesWeight; vector2.y = 0f; if (vector2 != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a2 + transform.forward); } GetComponent <Rigidbody>().AddForce(vector2.normalized * maxSpeed * 10f * Time.deltaTime); } } } else if (currentlyWants == wants.toIdle) { transform.rotation = Quaternion.LookRotation(transform.forward); Vector3 zero = Vector3.zero; GetComponent <Rigidbody>().AddForce(zero.normalized * maxSpeed * 10f * Time.deltaTime); if (Time.time > idleTimeMin + idleTimeRand + idleStartTime) { currentlyWants = previouslyWanted; if (currentlyWants == wants.toExitScene) { FindExit(false); CreatePath(exitNode.transform.position); } } } else if (currentlyWants == wants.toOrder) { GameObject orderPoint = GameObject.Find("OrderPoint"); Vector3 pointOrder = Vector3.zero; for (int i = 0; i < orderPoint.GetComponent <OrderScript>().npcs.ToArray().Length; i++) { if (orderPoint.GetComponent <OrderScript>().npcs.ToArray()[i] == gameObject) { pointOrder += Vector3.forward * i * 3; } } Vector3 vector3 = Vector3.zero; Vector3 a3 = Vector3.zero; if (pathToFollow.Count > 0) { vector3 += Seek(pathToFollow[0].transform.position + pointOrder) * followWeight * 1.5f; a3 = vector3; a3.y = 0f; vector3 += SeparateAvoidNodes() * avoidNodesWeight; vector3.y = 0f; if (vector3 != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a3 + transform.forward); } GetComponent <Rigidbody>().AddForce(vector3.normalized * maxSpeed * 10f * Time.deltaTime); // Move if ((transform.position - pathToFollow[0].transform.position).magnitude < 3) { pathToFollow.RemoveAt(0); } } else { vector3 += Seek(orderPoint.transform.position + pointOrder) * followWeight * 1.5f; a3 = vector3; a3.y = 0f; vector3 += SeparateAvoidNodes() * avoidNodesWeight; vector3.y = 0f; if ((transform.position - (orderPoint.transform.position + pointOrder)).magnitude > 1) { if (vector3 != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a3 + transform.forward); } GetComponent <Rigidbody>().AddForce(vector3.normalized * maxSpeed * 10f * Time.deltaTime); // Move } else { Transform tryGetObject = LookAtPlayer(15); if (tryGetObject) { transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(0, Quaternion.LookRotation(tryGetObject.position - transform.position).eulerAngles.y, 0), 4 * Time.deltaTime); } else { transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.Euler(180, 0, 180), 4 * Time.deltaTime); } } //Debug.Log((transform.position - (orderPoint.transform.position + pointOrder)).magnitude); } } else if (currentlyWants == wants.toFindSeat) { List <NPC> list = new List <NPC>(); int num = 0; int num2 = 0; list.Add(this); if (this.desiredGroupSize > 1) { GameObject[] array = GameObject.FindGameObjectsWithTag("NPC"); for (int i = 0; i < array.Length; i++) { GameObject gameObject = array[i]; //Debug.Log(gameObject.name + "; " + base.gameObject.name); //Debug.Log((gameObject != base.gameObject) + "; " + ((transform.position - gameObject.transform.position).magnitude < 40f)); if (gameObject != base.gameObject && (transform.position - gameObject.transform.position).magnitude < 40f) { NPC component = gameObject.GetComponent <NPC>(); if (num2 < desiredGroupSize - 1 && (component.currentlyWants == wants.toFindSeat || component.currentlyWants == wants.toIdle) && component.desiredGroupSize == desiredGroupSize) { list.Add(component); num2++; } } } } // System if (SceneManager.GetSceneAt(0).buildIndex == 3) { int randomNumber = 0; while (randomNumber != int.Parse(orderNumber.name.Substring(orderNumber.name.Length - 1))) { if (randomNumber == int.Parse(orderNumber.name.Substring(orderNumber.name.Length - 1))) { break; } randomNumber = UnityEngine.Random.Range(1, TableGraph.tables.Length + 1); } myNPCGroup = list; if (tableGraph == null) { tableGraph = GameObject.Find("!TableNodes").GetComponent <TableGraph>(); } num = randomNumber; print("Goal table: " + num); if (num >= 0) { foreach (NPC current in list) { if (current != this) { current.myNPCGroupLeader = this; current.setWants(wants.toGetToSeat); } foreach (TableNodes current2 in TableGraph.tables[num - 1].tableNodes) { if (!current2.occupied) { current.targetSeat = current2; current2.SetOccupied(true); current.setWants(wants.toGetToSeat); current.pathToFollow = graph.FindPath(FindClosestNode(current.transform.position), FindClosestVisibleNode(current.targetSeat.transform)); print(string.Concat(new object[] { "Found a seat for id[", list.IndexOf(current), "] @ ", num, " : ", TableGraph.tables[num - 1].tableNodes.IndexOf(current2) })); Enterance.npcsWaiting--; break; } } if (targetSeat == null) { print("Error: no free seat found?"); } } } else { if (desiredGroupSize == 4 && UnityEngine.Random.value > 0.8f) { setGroupSize(gameObject, 2); } myNPCGroup = new List <NPC>(); myNPCGroupLeader = null; setWants(wants.toIdle); idleStartTime = Time.time; idleTimeRand = UnityEngine.Random.Range(20f, 40f); } } else { if ((list.Count > 1 && list.Count == desiredGroupSize) || SceneManager.GetSceneAt(0).buildIndex == 3) { myNPCGroup = list; if (tableGraph == null) { tableGraph = GameObject.Find("!TableNodes").GetComponent <TableGraph>(); } num = TableGraph.FindUnoccupiedTableForGroup(myNPCGroup.Count); print("Goal table: " + num); if (num >= 0) { foreach (NPC current in list) { if (current != this) { current.myNPCGroupLeader = this; current.setWants(wants.toGetToSeat); } foreach (TableNodes current2 in TableGraph.tables[num - 1].tableNodes) { if (!current2.occupied) { current.targetSeat = current2; current2.SetOccupied(true); current.setWants(wants.toGetToSeat); current.pathToFollow = graph.FindPath(FindClosestNode(current.transform.position), FindClosestVisibleNode(current.targetSeat.transform)); print(string.Concat(new object[] { "Found a seat for id[", list.IndexOf(current), "] @ ", num, " : ", TableGraph.tables[num - 1].tableNodes.IndexOf(current2) })); Enterance.npcsWaiting--; break; } } if (targetSeat == null) { print("Error: no free seat found?"); } } } else { if (/*Network.isServer && */ desiredGroupSize == 4 && UnityEngine.Random.value > 0.8f) { setGroupSize(gameObject, 2); } myNPCGroup = new List <NPC>(); myNPCGroupLeader = null; setWants(wants.toIdle); idleStartTime = Time.time; idleTimeRand = UnityEngine.Random.Range(20f, 40f); } } else if (desiredGroupSize == 1) { if (tableGraph == null) { tableGraph = GameObject.Find("!TableNodes").GetComponent <TableGraph>(); } num = TableGraph.FindUnoccupiedTableForGroup(myNPCGroup.Count); if (num >= 0) { foreach (TableNodes current3 in TableGraph.tables[num - 1].tableNodes) { if (!current3.occupied) { targetSeat = current3; current3.SetOccupied(true); setWants(wants.toGetToSeat); pathToFollow = graph.FindPath(FindClosestNode(transform.position), FindClosestVisibleNode(targetSeat.transform)); Enterance.npcsWaiting--; break; } } } setWants(wants.toIdle); idleStartTime = Time.time; idleTimeRand = UnityEngine.Random.Range(20f, 40f); } else { myNPCGroup = new List <NPC>(); myNPCGroupLeader = null; setWants(wants.toIdle); idleStartTime = Time.time; idleTimeRand = UnityEngine.Random.Range(10f, 30f); } } //Debug.Log((list.Count > 1) + " " + (list.Count == desiredGroupSize)); //Debug.Log(list.Count + " " + desiredGroupSize); } else if (currentlyWants == wants.toGetToSeat) { Vector3 vector3 = Vector3.zero; Vector3 a3 = Vector3.zero; if (pathToFollow.Count > 0 && (pathToFollow[0].transform.position - transform.position).magnitude < 3f) { pathToFollow.RemoveAt(0); } RaycastHit raycastHit3; if (Physics.Linecast(transform.position, targetSeat.transform.position, out raycastHit3, layerMask)) { if (pathToFollow.Count > 0) { vector3 += Seek(pathToFollow[0].transform.position) * followWeight; a3 = vector3; a3.y = 0f; vector3 += SeparateAvoidNodes() * avoidNodesWeight; vector3.y = 0f; if (vector3 != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a3 + transform.forward); } GetComponent <Rigidbody>().AddForce(vector3.normalized * maxSpeed * 8f * Time.deltaTime); } else { float num3 = 1f; if ((transform.position - targetSeat.transform.position).magnitude < 6f) { num3 = 0.2f; } if ((transform.position - targetSeat.transform.position).magnitude < 1f) { targetSeat.table.SetNPCAtTable(targetSeat.table.gameObject, gameObject); GetComponent <Rigidbody>().velocity = Vector3.zero; setWants(wants.toEat); /*if (Network.peerType == NetworkPeerType.Server) * { * targetSeat.table.GenerateFoodOrder(); * }*/ if (SceneManager.GetSceneAt(0).buildIndex == 3) { targetSeat.table.GenerateFoodOrder(burgerIndex); } else { targetSeat.table.GenerateFoodOrder(-1); } //targetSeat.table.GenerateFoodOrder(); foodWaitStartTime = Time.time; } vector3 += Seek(targetSeat.transform.position) * followWeight; a3 = vector3; a3.y = 0f; vector3 += SeparateAvoidNodes() * (avoidNodesWeight * num3); vector3.y = 0f; if (vector3 != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a3 + transform.forward); } GetComponent <Rigidbody>().AddForce(vector3.normalized * maxSpeed * 10f * Time.deltaTime); } } else { if ((transform.position - targetSeat.transform.position).magnitude < 1f) { targetSeat.table.SetNPCAtTable(targetSeat.table.gameObject, gameObject); GetComponent <Rigidbody>().velocity = Vector3.zero; setWants(wants.toEat); /*if (Network.peerType == NetworkPeerType.Server) * { * targetSeat.table.GenerateFoodOrder(); * }*/ if (SceneManager.GetSceneAt(0).buildIndex == 3) { targetSeat.table.GenerateFoodOrder(burgerIndex); } else { targetSeat.table.GenerateFoodOrder(-1); } //targetSeat.table.GenerateFoodOrder(); foodWaitStartTime = Time.time; } vector3 += Seek(targetSeat.transform.position) * followWeight * 1.5f; a3 = vector3; a3.y = 0f; vector3 += SeparateAvoidNodes() * avoidNodesWeight; vector3.y = 0f; if (vector3 != Vector3.zero) { transform.rotation = Quaternion.LookRotation(a3 + transform.forward); } GetComponent <Rigidbody>().AddForce(vector3.normalized * maxSpeed * 10f * Time.deltaTime); } } else if (currentlyWants == wants.toLeave) { if (myNPCGroupLeader == null) { int num4 = 0; foreach (NPC current4 in myNPCGroup) { if (current4.currentlyWants == wants.toLeave) { num4++; } } if (num4 == myNPCGroup.Count) { print("Entire group wants to leave"); if (desiredGroupSize > 1) { foreach (NPC current5 in myNPCGroup) { current5.targetSeat.table.npcAtTable = null; //current5.targetSeat.table.ClearOrder(); current5.targetSeat.SetOccupied(false); current5.FindExit(false); current5.CreatePath(current5.exitNode.transform.position); current5.setWants(wants.toExitScene); } } else { targetSeat.table.npcAtTable = null; //targetSeat.table.ClearOrder(); targetSeat.SetOccupied(false); FindExit(false); CreatePath(exitNode.transform.position); setWants(wants.toExitScene); } } } } else if (currentlyWants == wants.toGetMenu) { if (Time.time > menuWaitStartTime + menuWaitBaseDuration) { currentlyWants = wants.toLeave; } } else if (currentlyWants == wants.toEat && Time.time > foodWaitStartTime + foodWaitBaseDuration) { currentlyWants = wants.toLeave; } if (SceneManager.GetSceneAt(0).buildIndex == 3) { gameObject.GetComponent <Collider>().enabled = currentlyWants != wants.toEat; gameObject.GetComponent <Rigidbody>().isKinematic = currentlyWants == wants.toEat; if (currentlyWants == wants.toEat) { transform.rotation = Quaternion.Euler(0, Quaternion.LookRotation(orderNumber.transform.position - transform.position).eulerAngles.y, 0); } } // System Scenes if (orderNumber) { switch (currentlyWants) { case wants.toGetToSeat: orderNumber.GetComponent <Rigidbody>().isKinematic = true; orderNumber.GetComponent <Collider>().enabled = false; orderNumber.transform.position = Vector3.Lerp(orderNumber.transform.position, transform.position + transform.forward * 2, 0.5f); orderNumber.transform.rotation = Quaternion.Lerp(orderNumber.transform.rotation, transform.rotation, 0.5f); break; case wants.toEat: orderNumber.transform.position = Vector3.Lerp(orderNumber.transform.position, targetSeat.table.transform.position + targetSeat.table.transform.up * 1.1f + targetSeat.table.transform.right * 3, 0.5f); orderNumber.transform.rotation = Quaternion.Lerp(orderNumber.transform.rotation, targetSeat.table.transform.rotation, 0.5f); break; case wants.toExitScene: orderNumber.GetComponent <Rigidbody>().isKinematic = false; orderNumber.GetComponent <Collider>().enabled = true; orderNumber = null; break; } } // If he got Order Number }
private ExtInfo GetDescriptionExtension(string link) { ExtInfo ext = new ExtInfo(); HtmlDocument allHTML = new HtmlDocument(); HtmlDocument currentHTML = new HtmlDocument(); string siteAddress = ""; if (link.Contains(this.siteAddress)) { siteAddress = link; } else { siteAddress = this.siteAddress + link; } ext.Link = siteAddress; fileTempAddress = siteAddress.Replace("http://open-file.ru/types/", ""); fileTempAddress = "types\\" + fileTempAddress + ".txt"; if (File.Exists(fileTempAddress)) { allHTML.LoadHtml(HtmlToString.ReadCacheFile(fileTempAddress, encoding)); } else { string s = HtmlToString.Read(siteAddress, encoding, fileTempAddress); if (s == "") { return(ext); } allHTML.LoadHtml(s); } //xPathQuery //table class="desc" HtmlNodeCollection TableNodes; HtmlNodeCollection TableHaderNodes; string xpq_allWorks = "//table[@class=\"desc\"]/*/*/*/td|//table[@class=\"desc\"]/*/*/td|//table[@class=\"desc\"]/*/td|//table[@class=\"desc\"]/td|//table[@class=\"desc\"]/th"; string xpq_HeaderExt = "//table[@class=\"desc\"]/td|//table[@class=\"desc\"]/th"; TableNodes = allHTML.DocumentNode.SelectNodes(xpq_allWorks); TableHaderNodes = allHTML.DocumentNode.SelectNodes(xpq_HeaderExt); if (TableNodes == null) { //MessageBox.Show("Ошибка - " + link); return(null); } string key = null; key = TableHaderNodes[0].InnerText; if (key.Contains("Формат")) { Match m = Regex.Match(key, @"\.[a-zа-я0-9]*"); if (m.Value != string.Empty) { ext.Name = m.Value.Remove(0, 1); } } else { MessageBox.Show("Заголовок таблицы: " + key); } foreach (var tdNode in TableNodes) { key = null; key = tdNode.InnerText; key = key.Replace("<", "<"); key = key.Replace(" ", " "); int index = TableNodes.IndexOf(tdNode); if (key.Contains("Тип файла")) { if (ext.TypeFile == string.Empty) { ext.TypeFile = TableNodes[index + 1].InnerText; } else { ext.TypeFile += ",\n" + TableNodes[index + 1].InnerText; } } else if (key.Contains("на русском")) { if (ext.RusDescription == string.Empty) { ext.RusDescription = TableNodes[index + 1].InnerText; } else { ext.RusDescription += ",\n" + TableNodes[index + 1].InnerText; } } else if (key.Contains("на английском")) { if (ext.EngDescription == string.Empty) { ext.EngDescription = TableNodes[index + 1].InnerText; } else { ext.EngDescription += ",\n" + TableNodes[index + 1].InnerText; } } else if (key.Contains("Подробное описание")) { string description = TableNodes[index + 1].InnerText; description = description.Replace("<", "<"); description = description.Replace(">", ">"); description = description.Replace(" ", " "); if (ext.DetailedDescription == string.Empty) { ext.DetailedDescription = description; } else { ext.DetailedDescription += ",\n " + description; } } else if (key.Contains("ASCII:")) { ext.InfoHeaderFile.Add(key); } else if (key.Contains("HEX:")) { ext.InfoHeaderFile.Add(key); } else if (key == " Windows" || key == "Windows") { ext.WhatOpen = TableNodes[index + 1].InnerText; HtmlNodeCollection li_s = TableNodes[index + 1].SelectNodes("*/li|*/*/li"); foreach (HtmlNode li in li_s) { ext.WhatOpenWindows.Add(li.InnerText); } } else if (key == " Linux" || key == "Linux") { ext.WhatOpen += TableNodes[index + 1].InnerText; HtmlNodeCollection li_s = TableNodes[index + 1].SelectNodes("*/li"); foreach (HtmlNode li in li_s) { ext.WhatOpenLinux.Add(li.InnerText); } } else if (key == " MacOS") { ext.WhatOpen += TableNodes[index + 1].InnerText; HtmlNodeCollection li_s = TableNodes[index + 1].SelectNodes("*/li"); foreach (HtmlNode li in li_s) { ext.WhatOpenMac.Add(li.InnerText); } } } if (ext.EngDescription == null || ext.RusDescription == null || ext.Name == null || ext.TypeFile == null || ext.Link == null ) { MessageBox.Show("Не найдены данные"); } return(ext); }