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++;
        }
    }
예제 #2
0
        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)));
        }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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
    }
예제 #7
0
        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("&lt;", "<");
                key = key.Replace("&nbsp;", " ");

                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("&lt;", "<");
                    description = description.Replace("&gt;", ">");
                    description = description.Replace("&nbsp;", " ");

                    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);
        }