コード例 #1
0
        private void CreateAnimal(ushort buildingID, ref Building data)
        {
            SimulationManager instance1       = Singleton <SimulationManager> .instance;
            CitizenManager    instance2       = Singleton <CitizenManager> .instance;
            CitizenInfo       groupAnimalInfo = instance2.GetGroupAnimalInfo(ref instance1.m_randomizer, this.m_info.m_class.m_service, this.m_info.m_class.m_subService);
            //begin mod
            var animalIndex = WildlifeSpawnManager.instance.SpawnMap.ContainsKey(buildingID) ? WildlifeSpawnManager.instance.SpawnMap[buildingID] : 0;

            animalIndex--;
            groupAnimalInfo = WildlifeSpawnManager.instance.GetGroupAnimalInfo(ref instance1.m_randomizer, this.m_info.m_class.m_service, this.m_info.m_class.m_subService, animalIndex);
            //end mod
            ushort instance3;

            if (groupAnimalInfo == null || !instance2.CreateCitizenInstance(out instance3, ref instance1.m_randomizer, groupAnimalInfo, 0U))
            {
                return;
            }
            //begin mod
            PetAIDetour.isCaged = true;
            //end mod
            groupAnimalInfo.m_citizenAI.SetSource(instance3, ref instance2.m_instances.m_buffer[(int)instance3], buildingID);
            groupAnimalInfo.m_citizenAI.SetTarget(instance3, ref instance2.m_instances.m_buffer[(int)instance3], buildingID);
            //begin mod
            PetAIDetour.isCaged = false;
            //end mod
        }
        public bool CustomStartPathFind(ushort vehicleID, ref Vehicle vehicleData, Vector3 startPos, Vector3 endPos, bool startBothWays, bool endBothWays, bool undergroundTarget)
        {
#if PATHRECALC
            VehicleState state           = VehicleStateManager._GetVehicleState(vehicleID);
            bool         recalcRequested = state.PathRecalculationRequested;
            state.PathRecalculationRequested = false;
#endif

            VehicleInfo info           = this.m_info;
            ushort      driverInstance = CustomPassengerCarAI.GetDriverInstance(vehicleID, ref vehicleData);
            if (driverInstance == 0)
            {
                return(false);
            }
            CitizenManager          instance    = Singleton <CitizenManager> .instance;
            CitizenInfo             info2       = instance.m_instances.m_buffer[(int)driverInstance].Info;
            NetInfo.LaneType        laneTypes   = NetInfo.LaneType.Vehicle | NetInfo.LaneType.Pedestrian;
            VehicleInfo.VehicleType vehicleType = this.m_info.m_vehicleType;
            bool   allowUnderground             = (vehicleData.m_flags & Vehicle.Flags.Underground) != 0;
            bool   randomParking  = false;
            ushort targetBuilding = instance.m_instances.m_buffer[(int)driverInstance].m_targetBuilding;
            if (targetBuilding != 0 && Singleton <BuildingManager> .instance.m_buildings.m_buffer[(int)targetBuilding].Info.m_class.m_service > ItemClass.Service.Office)
            {
                randomParking = true;
            }
            PathUnit.Position startPosA;
            PathUnit.Position startPosB;
            float             num;
            float             num2;
            PathUnit.Position endPosA;
            if (CustomPathManager.FindPathPosition(startPos, ItemClass.Service.Road, NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle, info.m_vehicleType, allowUnderground, false, 32f, out startPosA, out startPosB, out num, out num2) &&
                info2.m_citizenAI.FindPathPosition(driverInstance, ref instance.m_instances.m_buffer[(int)driverInstance], endPos, laneTypes, vehicleType, undergroundTarget, out endPosA))
            {
                if (!startBothWays || num < 10f)
                {
                    startPosB = default(PathUnit.Position);
                }
                PathUnit.Position endPosB   = default(PathUnit.Position);
                SimulationManager instance2 = Singleton <SimulationManager> .instance;
                uint path;
                PathUnit.Position def = default(PathUnit.Position);
                if (Singleton <CustomPathManager> .instance.CreatePath(
#if PATHRECALC
                        recalcRequested
#else
                        false
#endif
                        , ExtVehicleType.PassengerCar, out path, ref instance2.m_randomizer, instance2.m_currentBuildIndex, ref startPosA, ref startPosB, ref endPosA, ref endPosB, ref def, laneTypes, vehicleType, 20000f, false, false, false, false, randomParking))
                {
                    if (vehicleData.m_path != 0u)
                    {
                        Singleton <PathManager> .instance.ReleasePath(vehicleData.m_path);
                    }
                    vehicleData.m_path   = path;
                    vehicleData.m_flags |= Vehicle.Flags.WaitingPath;
                    return(true);
                }
            }
            return(false);
        }
コード例 #3
0
        private void UnloadPassengers(ushort vehicleID, ref Vehicle data)
        {
            CitizenManager instance = Singleton <CitizenManager> .instance;
            uint           num      = data.m_citizenUnits;
            int            num2     = 0;

            while (num != 0u)
            {
                uint nextUnit = instance.m_units.m_buffer[(int)((UIntPtr)num)].m_nextUnit;
                for (int i = 0; i < 5; i++)
                {
                    uint citizen = instance.m_units.m_buffer[(int)((UIntPtr)num)].GetCitizen(i);
                    if (citizen != 0u)
                    {
                        ushort instance2 = instance.m_citizens.m_buffer[(int)((UIntPtr)citizen)].m_instance;
                        if (instance2 != 0)
                        {
                            CitizenInfo info = instance.m_instances.m_buffer[(int)instance2].Info;
                            info.m_citizenAI.SetCurrentVehicle(instance2, ref instance.m_instances.m_buffer[(int)instance2], 0, 0u, data.m_targetPos0);
                        }
                    }
                }
                num = nextUnit;
                if (++num2 > 524288)
                {
                    CODebugBase <LogChannel> .Error(LogChannel.Core, "Invalid list detected!\n" + Environment.StackTrace);

                    break;
                }
            }
        }
コード例 #4
0
        public void OnAfterSimulationFrame()
        {
            if (Singleton <GameSpeedManager> .instance.Parameters.TimeFlowDice())
            {
                return;
            }

            CitizenManager cm = Singleton <CitizenManager> .instance;

            int num  = (int)(Singleton <SimulationManager> .instance.m_currentFrameIndex & 4095u);
            int num2 = num * 256;
            int num3 = (num + 1) * 256 - 1;

            for (int i = num2; i <= num3; i++)
            {
                if ((cm.m_citizens.m_buffer[i].m_flags & Citizen.Flags.Created) != Citizen.Flags.None)
                {
                    CitizenInfo citizenInfo = cm.m_citizens.m_buffer[i].GetCitizenInfo((uint)i);
                    if (citizenInfo != null)
                    {
                        updateAge((uint)i, ref cm.m_citizens.m_buffer[i]);
                    }
                }
            }
        }
コード例 #5
0
    void newCitizen()
    {
        CitizenInfo newCitizen = ScriptableObject.CreateInstance <CitizenInfo> ();

        //setName
        newCitizen.name = names[Random.Range(0, names.Length)] + " " + alphabet[Random.Range(0, alphabet.Length)] + ".";

        newCitizen.healthLevel = 1;
        newCitizen.energyLevel = 1;

        newCitizen.headColorVal = Random.Range(0.0f, 1.0f);
        newCitizen.headColor    = Color.Lerp(minHeadColor, maxHeadColor, newCitizen.headColorVal);
        newCitizen.headTexture  = (int)Random.Range(0, headTextures.Count);

        newCitizen.bodyColorVal = Random.Range(0.0f, 1.0f);
        newCitizen.bodyColor    = Color.Lerp(minBodyColor, maxBodyColor, newCitizen.bodyColorVal);
        newCitizen.bodyTexture  = (int)Random.Range(0, bodyTextures.Count);

        newCitizen.mouthColorVal = Random.Range(0.0f, 1.0f);
        newCitizen.mouthColor    = Color.Lerp(minMouthColor, maxMouthColor, newCitizen.mouthColorVal);
        newCitizen.mouthTexture  = (int)Random.Range(0, mouthTextures.Count);



        newCitizen.eyeSpacingY = Random.Range(-2.0f, 0.0f);
        newCitizen.eyeSpacingX = Random.Range(10.0f, 25.0f);

        newCitizen.job = Random.Range(0, 3);

        Debug.Log("New citizen!");
        newCitizen.Print();
        cits.Add(newCitizen);
    }
コード例 #6
0
    public void saveCits()
    {
        //clear cits in player prefs
        int citNo = PlayerPrefs.GetInt("citNo");

        for (int i = 0; i < citNo; i++)
        {
            PlayerPrefs.DeleteKey("cit" + i + "name");
            PlayerPrefs.DeleteKey("cit" + i + "healthLevel");
            PlayerPrefs.DeleteKey("cit" + i + "energyLevel");



            PlayerPrefs.DeleteKey("cit" + i + "headColor");
            PlayerPrefs.DeleteKey("cit" + i + "bodyColor");
            PlayerPrefs.DeleteKey("cit" + i + "mouthColor");

            PlayerPrefs.DeleteKey("cit" + i + "headTexture");
            PlayerPrefs.DeleteKey("cit" + i + "bodyTexture");
            PlayerPrefs.DeleteKey("cit" + i + "mouthTexture");


            PlayerPrefs.DeleteKey("cit" + i + "eyeSpacingY");
            PlayerPrefs.DeleteKey("cit" + i + "eyeSpacingX");

            PlayerPrefs.DeleteKey("cit" + i + "job");
        }

        //save cits to player prefs
        PlayerPrefs.SetInt("citNo", cits.Count);

        for (int i = 0; i < cits.Count; i++)
        {
            CitizenInfo newCitizen = cits[i];

            PlayerPrefs.SetString("cit" + i + "name", newCitizen.name);
            //Debug.Log ("Saving "+newCitizen.name+" local hp is "+newCitizen.healthLevel);
            PlayerPrefs.SetFloat("cit" + i + "healthLevel", newCitizen.healthLevel);
            //Debug.Log ("Saved "+newCitizen.name+" saved hp is "+PlayerPrefs.GetFloat("cit"+i+"healthLevel"));
            PlayerPrefs.SetFloat("cit" + i + "energyLevel", newCitizen.energyLevel);


            PlayerPrefs.SetFloat("cit" + i + "headColor", newCitizen.headColorVal);
            PlayerPrefs.SetFloat("cit" + i + "bodyColor", newCitizen.bodyColorVal);
            PlayerPrefs.SetFloat("cit" + i + "mouthColor", newCitizen.mouthColorVal);

            PlayerPrefs.SetInt("cit" + i + "headTexture", newCitizen.headTexture);
            PlayerPrefs.SetInt("cit" + i + "bodyTexture", newCitizen.bodyTexture);
            PlayerPrefs.SetInt("cit" + i + "mouthTexture", newCitizen.mouthTexture);


            PlayerPrefs.SetFloat("cit" + i + "eyeSpacingY", newCitizen.eyeSpacingY);
            PlayerPrefs.SetFloat("cit" + i + "eyeSpacingX", newCitizen.eyeSpacingX);

            PlayerPrefs.SetInt("cit" + i + "job", newCitizen.job);

            Debug.Log("Saved citizen!");
            newCitizen.Print();
        }
    }
コード例 #7
0
        void MaybeFlunkUniversity(uint citizenIndex, CitizenInfo citizenInfo)
        {
            CitizenManager citizenManager = Singleton <CitizenManager> .instance;

            if (citizenManager.m_citizens.m_buffer[citizenIndex].m_workBuilding != 0 &&
                (citizenManager.m_citizens.m_buffer[citizenIndex].m_flags & Citizen.Flags.Student) == Citizen.Flags.None)
            {
                // Already has a job
                return;
            }

            int grade = TakeExam(citizenIndex);

            #if DROPOUTS_DEBUG
            Debug.Log(String.Format("Considering flunking citizen {0} from university with grade {1} and education {2} {3}",
                                    citizenIndex,
                                    grade,
                                    citizenManager.m_citizens.m_buffer[citizenIndex].Education1,
                                    citizenManager.m_citizens.m_buffer[citizenIndex].Education2));
            #endif

            if (!citizenManager.m_citizens.m_buffer[citizenIndex].Education1 ||
                !citizenManager.m_citizens.m_buffer[citizenIndex].Education2 ||
                grade < 50)
            {
                // This student flunked university.  Now they need to cut their hair and get a job.
                m_residentAI.LeaveSchool(citizenIndex, citizenInfo);
                m_residentAI.UpdateEducationLevel(citizenIndex, -1);
                m_residentAI.RemoveSchoolOffers(citizenIndex);
                m_residentAI.RemoveWorkOffers(citizenIndex);
                m_residentAI.GetAJob(citizenIndex);
            }
        }
コード例 #8
0
        private void LoadTrackedPrefabs()
        {
            for (uint i = 0; i < PrefabCollection <CitizenInfo> .PrefabCount(); i++)
            {
                CitizenInfo prefab = PrefabCollection <CitizenInfo> .GetPrefab(i);

                if (prefab == null)
                {
                    continue;
                }

                string name = prefab.GetLocalizedTitle();

                if (String.IsNullOrEmpty(name))
                {
                    continue;
                }

                if (!_settings.Animals.Contains(name))
                {
                    continue;
                }

                if (_prefabs.ContainsKey(name))
                {
                    continue;
                }

                _prefabs.Add(name, (int)i);
            }
        }
コード例 #9
0
        // CHECKME: check if this method allows to make people get away from traffic
        private static ushort CheckCitizen(Segment3 segment, float lastLen, float nextLen, ref float maxSpeed, ref bool blocked, float maxBraking, ushort otherID, ref CitizenInstance otherData, Vector3 min, Vector3 max)
        {
            CitizenInfo info = otherData.Info;

            CitizenInstance.Frame lastFrameData = otherData.GetLastFrameData();
            Vector3  position = lastFrameData.m_position;
            Vector3  b        = lastFrameData.m_position + lastFrameData.m_velocity;
            Segment3 segment2 = new Segment3(position, b);
            Vector3  vector   = segment2.Min();

            vector.x -= info.m_radius;
            vector.z -= info.m_radius;
            Vector3 vector2 = segment2.Max();

            vector2.x += info.m_radius;
            vector2.y += info.m_height;
            vector2.z += info.m_radius;
            float num;
            float num2;

            if (min.x < vector2.x + 1f && min.y < vector2.y && min.z < vector2.z + 1f && vector.x < max.x + 1f && vector.y < max.y + 2f && vector.z < max.z + 1f && segment.DistanceSqr(segment2, out num, out num2) < (1f + info.m_radius) * (1f + info.m_radius))
            {
                float num3 = lastLen + nextLen * num;
                if (num3 >= 0.01f)
                {
                    num3 -= 2f;
                    float b2 = Mathf.Max(1f, CalculateMaxSpeed(num3, 0f, maxBraking));
                    maxSpeed = Mathf.Min(maxSpeed, b2);
                }
            }
            return(otherData.m_nextGridInstance);
        }
コード例 #10
0
        private void CategorizePrefab(CitizenInfo human)
        {
            CitizenAI ai = human.m_citizenAI;
            int prefabID = human.m_prefabDataIndex;

            /*
             * Create a blank entry. This way, even if this prefab does not belong here
             * for some bizarre reason, we will have a record of it. This eliminates
             * the chance of a prefab getting evaluated more than once, ever.
             */
            _mapping.AddEntry(prefabID);

            if (ai is HumanAI)
            {
                _mapping.AddMapping(prefabID, _data._Humans);

                if (ai is ResidentAI)
                    _mapping.AddMapping(prefabID, _data._Residents);
                else if (ai is ServicePersonAI)
                    _mapping.AddMapping(prefabID, _data._ServicePersons);
                else if (ai is TouristAI)
                    _mapping.AddMapping(prefabID, _data._Tourists);
                else
                    _mapping.AddMapping(prefabID, _data._HumanOther);
            }
        }
コード例 #11
0
        internal bool Accepts(CitizenInfo info)
        {
            switch (RuleCheckType)
            {
            case RuleCheckTypeCitizen.ITEM_CLASS:
                return(info.m_class.name == ItemClassName);

            case RuleCheckTypeCitizen.SERVICE:
                return(Service == ItemClass.Service.None || info.m_class.m_service == Service);

            case RuleCheckTypeCitizen.SERVICE_SUBSERVICE:
                return((Service == ItemClass.Service.None || info.m_class.m_service == Service) && info.m_class.m_subService == SubService);

            case RuleCheckTypeCitizen.SERVICE_LEVEL:
                return((Service == ItemClass.Service.None || info.m_class.m_service == Service) && info.m_class.m_level == Level);

            case RuleCheckTypeCitizen.SERVICE_SUBSERVICE_LEVEL:
                return((Service == ItemClass.Service.None || info.m_class.m_service == Service) && info.m_class.m_subService == SubService && info.m_class.m_level == Level);

            case RuleCheckTypeCitizen.ASSET_NAME:
                return(info.name == AssetName);

            case RuleCheckTypeCitizen.AI:
                return(AiClassName == "HumanAI" ? info.m_citizenAI is HumanAI : AiClassName == "AnimalAI" ? info.m_citizenAI is AnimalAI : info.m_citizenAI.GetType().Name == AiClassName);
            }
            return(false);
        }
コード例 #12
0
        private void CreateFireman(ushort vehicleID, ref Vehicle data, Citizen.AgePhase agePhase)
        {
            SimulationManager instance         = Singleton <SimulationManager> .instance;
            CitizenManager    instance2        = Singleton <CitizenManager> .instance;
            CitizenInfo       groupCitizenInfo = instance2.GetGroupCitizenInfo(ref instance.m_randomizer, this.m_info.m_class.m_service, Citizen.Gender.Male, Citizen.SubCulture.Generic, agePhase);

            if (groupCitizenInfo != null)
            {
                int  family = instance.m_randomizer.Int32(256u);
                uint num    = 0u;
                if (instance2.CreateCitizen(out num, 90, family, ref instance.m_randomizer, groupCitizenInfo.m_gender))
                {
                    ushort num2;
                    if (instance2.CreateCitizenInstance(out num2, ref instance.m_randomizer, groupCitizenInfo, num))
                    {
                        Vector3 randomDoorPosition = data.GetRandomDoorPosition(ref instance.m_randomizer, VehicleInfo.DoorType.Exit);
                        groupCitizenInfo.m_citizenAI.SetCurrentVehicle(num2, ref instance2.m_instances.m_buffer[(int)num2], 0, 0u, randomDoorPosition);
                        groupCitizenInfo.m_citizenAI.SetTarget(num2, ref instance2.m_instances.m_buffer[(int)num2], data.m_targetBuilding);
                        instance2.m_citizens.m_buffer[(int)((UIntPtr)num)].SetVehicle(num, vehicleID, 0u);
                    }
                    else
                    {
                        instance2.ReleaseCitizen(num);
                    }
                }
            }
        }
コード例 #13
0
        private void CategorizePrefab(CitizenInfo human)
        {
            CitizenAI ai       = human.m_citizenAI;
            int       prefabID = human.m_prefabDataIndex;

            /*
             * Create a blank entry. This way, even if this prefab does not belong here
             * for some bizarre reason, we will have a record of it. This eliminates
             * the chance of a prefab getting evaluated more than once, ever.
             */
            _mapping.AddEntry(prefabID);

            if (ai is HumanAI)
            {
                _mapping.AddMapping(prefabID, _data._Humans);

                if (ai is ResidentAI)
                {
                    _mapping.AddMapping(prefabID, _data._Residents);
                }
                else if (ai is ServicePersonAI)
                {
                    _mapping.AddMapping(prefabID, _data._ServicePersons);
                }
                else if (ai is TouristAI)
                {
                    _mapping.AddMapping(prefabID, _data._Tourists);
                }
                else
                {
                    _mapping.AddMapping(prefabID, _data._HumanOther);
                }
            }
        }
コード例 #14
0
        private bool GetHuman()
        {
            _human = _instance.m_citizens.m_buffer[(int)_id];

            if (_human.Dead)
            {
                return(false);
            }

            if ((_human.m_flags & Citizen.Flags.Created) == Citizen.Flags.None)
            {
                return(false);
            }

            if ((_human.m_flags & Citizen.Flags.DummyTraffic) != Citizen.Flags.None)
            {
                return(false);
            }

            _info = _human.GetCitizenInfo(_id);

            if (_info == null)
            {
                return(false);
            }

            if (_info.m_citizenAI.IsAnimal())
            {
                return(false);
            }

            return(true);
        }
コード例 #15
0
        public HttpResponseMessage Post([FromBody] jsonCheckCitizen injson)
        {
            HttpResponseMessage  message  = null;
            responseCheckCitizen response = new responseCheckCitizen();

            try
            {
                XmlSerializer xmlser  = new XmlSerializer(typeof(CitizenInfo));
                string        request = string.Format("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:cit='http://citizen.xyp.gov.mn/'><soapenv:Header/><soapenv:Body><cit:WS100107_checkCitizenInfo><request><firstName>{0}</firstName><lastName>{1}</lastName><regnum>{2}</regnum></request></cit:WS100107_checkCitizenInfo></soapenv:Body></soapenv:Envelope>", injson.customerFirstName, injson.customerLastName, injson.customerRegNo);
                string        responseCheckCitizen = string.Empty;
                if (httpPoster.Poster(request, out responseCheckCitizen))
                {
                    LogWriter._xypCheckCitizen(TAG, string.Format("WS: [{0}], OPERATOR:[{1}], RESPONSE: [{2}], REQUEST:[{3}]", constantValue.CHECKCITIZENINFO, injson.loginName, responseCheckCitizen, request));
                    XNamespace nsS             = "http://schemas.xmlsoap.org/soap/envelope/";
                    XNamespace ns2             = "http://citizen.xyp.gov.mn/";
                    XElement   xcitizenInfo    = XElement.Parse(responseCheckCitizen);
                    var        soapResponseXml = xcitizenInfo.Element(nsS + "Body").Element(ns2 + "WS100107_checkCitizenInfoResponse").Element("return");
                    string     orgCheckCitizen = soapResponseXml.ToString().Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "").Replace("xsi:type=\"ns2:checkCitizenInfoRequestData\"", "").Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "").Replace("xsi:type=\"ns2:checkCitizenData\"", "");
                    using (TextReader sertext = new StringReader(orgCheckCitizen))
                    {
                        CitizenInfo idcard = (CitizenInfo)xmlser.Deserialize(sertext);
                        try
                        {
                            if (idcard.ResultCode == "0")
                            {
                                response.isSuccess     = true;
                                response.resultMessage = "success";
                                response.matched       = idcard.citizenResponse.matched;
                            }
                            else
                            {
                                response.isSuccess     = false;
                                response.resultMessage = string.Format("[XYP] CODE: [{0}], MESSAGE: [{1}]", idcard.ResultCode, idcard.ResultMessage);
                            }
                        }
                        catch (Exception ex)
                        {
                            exceptionManager.ManageException(ex, TAG);
                            response.isSuccess     = false;
                            response.resultMessage = "Иргэний мэдээлэл тулгахад алдаа гарлаа. Та систем админд хандана уу.";
                        }
                    }
                }
                else
                {
                    response.isSuccess     = false;
                    response.resultMessage = "Иргэний мэдээлэл тулгахад алдаа гарлаа. Та систем админд хандана уу.";
                }
            }
            catch (Exception ex)
            {
                exceptionManager.ManageException(ex, TAG);
                response.isSuccess     = false;
                response.resultMessage = ex.Message;
            }
            message = Request.CreateResponse(HttpStatusCode.OK, response);
            LogWriter._service(TAG, string.Format("IP: [{0}], REQUEST: [{1}], RESPONSE: [{2}]", httpPoster.GetClientIPAddress(HttpContext.Current.Request), serialzer.Serialize(injson), serialzer.Serialize(response)));
            return(message);
        }
コード例 #16
0
 private static void ColorParametersGetter(
     ushort id,
     out ACERulesetContainer <CitizenCityDataRuleXml> rulesGlobal,
     out Dictionary <string, CitizenAssetFolderRuleXml> assetRules,
     out CitizenInfo info,
     out Vector3 pos)
 {
     ref CitizenInstance data = ref CitizenManager.instance.m_instances.m_buffer[id];
コード例 #17
0
        public List<HashSet<uint>> GetMapping(CitizenInfo human)
        {
            int prefabID = human.m_prefabDataIndex;

            if (!_mapping.PrefabMapped(prefabID))
                CategorizePrefab(human);

            return _mapping.GetMapping(prefabID);
        }
コード例 #18
0
        private bool GetHuman()
        {
            _human = _citizenManager.m_citizens.m_buffer[(int)_id];

            if (_human.Dead)
            {
                if (!_data.IsTurnedHuman(_id) && _lastId != _id)  // only spawn zombie if not yet turned.
                {
                    _lastId = _id;
                    Vector3 position = GetPosition(_human);
                    /// Logger.Log(_citizenManager.GetCitizenName(_id) + " died at location " + _human.CurrentLocation + " at world posistion " + position);

                    uint   zombieId;
                    ushort zombieInstanceID;
                    if (Singleton <ZombieManager> .instance.CreateZombie(out zombieId, ref Singleton <SimulationManager> .instance.m_randomizer))
                    {
                        //Logger.Log("1");
                        // ZombieInfo zombieInfo = new ZombieInfo();
                        // Logger.Log("2");
                        // zombieInfo.InitializePrefab();
                        // Logger.Log("3");
                        // zombieInfo.InitializePrefabInstance();
                        // Logger.Log("4");
                        // Singleton<ZombieManager>.instance.CreateZombieInstance(out zombieInstanceID, ref Singleton<SimulationManager>.instance.m_randomizer, zombieInfo, zombieId);
                        //  Logger.Log("5");
                    }
                    // _zombieManager.SpawnZombie(position);
                    _mapping.AddTurnedMapping(_human.GetCitizenInfo(_id));
                }

                return(false);
            }

            if ((_human.m_flags & Citizen.Flags.Created) == Citizen.Flags.None)
            {
                return(false);
            }

            if ((_human.m_flags & Citizen.Flags.DummyTraffic) != Citizen.Flags.None)
            {
                return(false);
            }

            _info = _human.GetCitizenInfo(_id);

            if (_info == null)
            {
                return(false);
            }

            if (_info.m_citizenAI.IsAnimal())
            {
                return(false);
            }

            return(true);
        }
コード例 #19
0
        public void AddTurnedMapping(CitizenInfo human)
        {
            int prefabID = human.m_prefabDataIndex;

            if (!_mapping.PrefabMapped(prefabID))
            {
                _mapping.AddMapping(prefabID, _data._TurnedHumans);
            }
        }
コード例 #20
0
        private void CategorizePrefab(CitizenInfo animal)
        {
            CitizenAI ai = animal.m_citizenAI;
            int prefabID = animal.m_prefabDataIndex;

            /*
             * Create a blank entry. This way, even if this prefab does not belong here
             * for some bizarre reason, we will have a record of it. This eliminates
             * the chance of a prefab getting evaluated more than once, ever.
             */
            _mapping.AddEntry(prefabID);

            if (ai is AnimalAI)
            {
                _mapping.AddMapping(prefabID, _data._Animals);

                if (ai is BirdAI)
                {
                    _mapping.AddMapping(prefabID, _data._Birds);

                    if (_prefabs.ContainsKey("Seagull") && _prefabs["Seagull"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Seagulls);
                }
                else if (ai is LivestockAI)
                {
                    _mapping.AddMapping(prefabID, _data._Livestock);

                    if (_prefabs.ContainsKey("Cow") && _prefabs["Cow"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Cows);

                    if (_prefabs.ContainsKey("Pig") && _prefabs["Pig"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Pigs);
                }
                else if (ai is PetAI)
                {
                    _mapping.AddMapping(prefabID, _data._Pets);

                    if (_prefabs.ContainsKey("Dog") && _prefabs["Dog"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Dogs);
                }
                else if (ai is WildlifeAI)
                {
                    _mapping.AddMapping(prefabID, _data._Wildlife);

                    if (_prefabs.ContainsKey("Wolf") && _prefabs["Wolf"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Wolves);

                    if (_prefabs.ContainsKey("Bear") && _prefabs["Bear"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Bears);

                    if (_prefabs.ContainsKey("Moose") && _prefabs["Moose"] == prefabID)
                        _mapping.AddMapping(prefabID, _data._Moose);
                }
                else
                    _mapping.AddMapping(prefabID, _data._AnimalOther);
            }
        }
コード例 #21
0
        public List<HashSet<ushort>> GetMapping(CitizenInfo animal)
        {
            int prefabID = animal.m_prefabDataIndex;

            if (!_mapping.PrefabMapped(prefabID))
                CategorizePrefab(animal);

            return _mapping.GetMapping(prefabID);
        }
コード例 #22
0
 private void RegisterCitizenConfig(CitizenAssetFolderRuleXml config, CitizenInfo info)
 {
     if (config.AssetName?.Split(new char[] { '.' }, 2)?[1] == info.name?.Split(new char[] { '.' }, 2)?[1])
     {
         config.AssetName = info.name;
         config.Source    = RuleSource.ASSET;
         m_colorConfigDataCitizens[info.name] = config;
     }
 }
        public bool CustomStartPathFind(ushort vehicleID, ref Vehicle vehicleData, Vector3 startPos, Vector3 endPos, bool startBothWays, bool endBothWays, bool undergroundTarget)
        {
#if DEBUG
            //Log._Debug($"CustomTaxiAI.CustomStartPathFind called for vehicle {vehicleID}");
#endif

            CitizenManager instance            = Singleton <CitizenManager> .instance;
            ushort         passengerInstanceId = CustomTaxiAI.GetPassengerInstance(vehicleID, ref vehicleData);
            if (passengerInstanceId == 0 || (instance.m_instances.m_buffer[(int)passengerInstanceId].m_flags & CitizenInstance.Flags.Character) != CitizenInstance.Flags.None)
            {
                return(base.StartPathFind(vehicleID, ref vehicleData, startPos, endPos, startBothWays, endBothWays, undergroundTarget));
            }
            VehicleInfo             info        = this.m_info;
            CitizenInfo             info2       = instance.m_instances.m_buffer[(int)passengerInstanceId].Info;
            NetInfo.LaneType        laneTypes   = NetInfo.LaneType.Vehicle | NetInfo.LaneType.Pedestrian | NetInfo.LaneType.TransportVehicle;
            VehicleInfo.VehicleType vehicleType = this.m_info.m_vehicleType;
            bool allowUnderground = (vehicleData.m_flags & Vehicle.Flags.Underground) != 0;
            PathUnit.Position startPosA;
            PathUnit.Position startPosB;
            float             startSqrDistA;
            float             startSqrDistB;
            PathUnit.Position endPosA;
            if (CustomPathManager.FindPathPosition(startPos, ItemClass.Service.Road, NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle, info.m_vehicleType, allowUnderground, false, 32f, out startPosA, out startPosB, out startSqrDistA, out startSqrDistB) &&
                info2.m_citizenAI.FindPathPosition(passengerInstanceId, ref instance.m_instances.m_buffer[(int)passengerInstanceId], endPos, laneTypes, vehicleType, undergroundTarget, out endPosA))
            {
                if ((instance.m_instances.m_buffer[(int)passengerInstanceId].m_flags & CitizenInstance.Flags.CannotUseTransport) == CitizenInstance.Flags.None)
                {
                    laneTypes |= NetInfo.LaneType.PublicTransport;

                    uint citizenId = instance.m_instances.m_buffer[passengerInstanceId].m_citizen;
                    if (citizenId != 0u && (instance.m_citizens.m_buffer[citizenId].m_flags & Citizen.Flags.Evacuating) != Citizen.Flags.None)
                    {
                        laneTypes |= NetInfo.LaneType.EvacuationTransport;
                    }
                }
                if (!startBothWays || startSqrDistA < 10f)
                {
                    startPosB = default(PathUnit.Position);
                }
                PathUnit.Position endPosB   = default(PathUnit.Position);
                SimulationManager instance2 = Singleton <SimulationManager> .instance;
                uint path;
                if (CustomPathManager._instance.CreatePath(
                        ExtVehicleType.Taxi, vehicleID, 0, out path, ref instance2.m_randomizer, instance2.m_currentBuildIndex, startPosA, startPosB, endPosA, endPosB, laneTypes, vehicleType, 20000f, IsHeavyVehicle(), IgnoreBlocked(vehicleID, ref vehicleData), false, (vehicleData.m_flags & Vehicle.Flags.Spawned) != 0))
                {
                    if (vehicleData.m_path != 0u)
                    {
                        Singleton <PathManager> .instance.ReleasePath(vehicleData.m_path);
                    }
                    vehicleData.m_path   = path;
                    vehicleData.m_flags |= Vehicle.Flags.WaitingPath;
                    return(true);
                }
            }
            return(false);
        }
        public bool CustomStartPathFind(ushort vehicleID, ref Vehicle vehicleData, Vector3 startPos, Vector3 endPos, bool startBothWays, bool endBothWays, bool undergroundTarget)
        {
#if PATHRECALC
            VehicleState state           = VehicleStateManager._GetVehicleState(vehicleID);
            bool         recalcRequested = state.PathRecalculationRequested;
            state.PathRecalculationRequested = false;
#endif

            CitizenManager instance          = Singleton <CitizenManager> .instance;
            ushort         passengerInstance = CustomTaxiAI.GetPassengerInstance(vehicleID, ref vehicleData);
            if (passengerInstance == 0 || (instance.m_instances.m_buffer[(int)passengerInstance].m_flags & CitizenInstance.Flags.Character) != CitizenInstance.Flags.None)
            {
                return(base.StartPathFind(vehicleID, ref vehicleData, startPos, endPos, startBothWays, endBothWays, undergroundTarget));
            }
            VehicleInfo             info        = this.m_info;
            CitizenInfo             info2       = instance.m_instances.m_buffer[(int)passengerInstance].Info;
            NetInfo.LaneType        laneType    = NetInfo.LaneType.Vehicle | NetInfo.LaneType.Pedestrian | NetInfo.LaneType.TransportVehicle;
            VehicleInfo.VehicleType vehicleType = this.m_info.m_vehicleType;
            bool allowUnderground = (vehicleData.m_flags & Vehicle.Flags.Underground) != 0;
            PathUnit.Position startPosA;
            PathUnit.Position startPosB;
            float             num;
            float             num2;
            PathUnit.Position endPosA;
            if (CustomPathManager.FindPathPosition(startPos, ItemClass.Service.Road, NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle, info.m_vehicleType, allowUnderground, false, 32f, out startPosA, out startPosB, out num, out num2) &&
                info2.m_citizenAI.FindPathPosition(passengerInstance, ref instance.m_instances.m_buffer[(int)passengerInstance], endPos, laneType, vehicleType, undergroundTarget, out endPosA))
            {
                if ((instance.m_instances.m_buffer[(int)passengerInstance].m_flags & CitizenInstance.Flags.CannotUseTransport) == CitizenInstance.Flags.None)
                {
                    laneType |= NetInfo.LaneType.PublicTransport;
                }
                if (!startBothWays || num < 10f)
                {
                    startPosB = default(PathUnit.Position);
                }
                PathUnit.Position endPosB   = default(PathUnit.Position);
                SimulationManager instance2 = Singleton <SimulationManager> .instance;
                uint path;
                if (Singleton <CustomPathManager> .instance.CreatePath(
#if PATHRECALC
                        recalcRequested,
#endif
                        ExtVehicleType.Taxi, out path, ref instance2.m_randomizer, instance2.m_currentBuildIndex, ref startPosA, ref startPosB, ref endPosA, ref endPosB, laneType, vehicleType, 20000f))
                {
                    if (vehicleData.m_path != 0u)
                    {
                        Singleton <PathManager> .instance.ReleasePath(vehicleData.m_path);
                    }
                    vehicleData.m_path   = path;
                    vehicleData.m_flags |= Vehicle.Flags.WaitingPath;
                    return(true);
                }
            }
            return(false);
        }
コード例 #25
0
        private ushort CheckCollisions(ushort instanceID, ref CitizenInstance citizenData, Segment3 segment, Vector3 min, Vector3 max, ushort otherID, ref CitizenInstance otherData, ref Vector3 pushAmount, ref float pushDivider)
        {
            if (otherID == instanceID)
            {
                return(otherData.m_nextGridInstance);
            }
            if (((citizenData.m_flags | otherData.m_flags) & CitizenInstance.Flags.Transition) == CitizenInstance.Flags.None && (citizenData.m_flags & CitizenInstance.Flags.Underground) != (citizenData.m_flags & CitizenInstance.Flags.Underground))
            {
                return(otherData.m_nextGridInstance);
            }
            CitizenInfo info = otherData.Info;

            CitizenInstance.Frame lastFrameData = otherData.GetLastFrameData();
            Vector3  position = lastFrameData.m_position;
            Vector3  b        = lastFrameData.m_position + lastFrameData.m_velocity;
            Segment3 segment2 = new Segment3(position, b);
            Vector3  vector   = segment2.Min();

            vector.x -= info.m_radius;
            vector.z -= info.m_radius;
            Vector3 vector2 = segment2.Max();

            vector2.x += info.m_radius;
            vector2.y += info.m_height;
            vector2.z += info.m_radius;
            if (min.x < vector2.x && max.x > vector.x && min.z < vector2.z && max.z > vector.z && min.y < vector2.y && max.y > vector.y)
            {
                float num = this.m_info.m_radius + info.m_radius;
                float num3;
                float t;
                float num2 = segment.DistanceSqr(segment2, out num3, out t);
                if (num2 < num * num)
                {
                    float   num4 = num - Mathf.Sqrt(num2);
                    float   num5 = 1f - num2 / (num * num);
                    Vector3 a    = segment.Position(num3 * 0.9f);
                    Vector3 b2   = segment2.Position(t);
                    a.y  = 0f;
                    b2.y = 0f;
                    Vector3 vector3 = a - b2;
                    Vector3 vector4 = new Vector3(segment.b.z - segment.a.z, 0f, segment.a.x - segment.b.x);
                    if (Vector3.Dot(vector3, vector4) >= 0f)
                    {
                        vector3 += vector4;
                    }
                    else
                    {
                        vector3 -= vector4;
                    }
                    pushAmount  += vector3.normalized * (num4 * num5);
                    pushDivider += num5;
                }
            }
            return(otherData.m_nextGridInstance);
        }
コード例 #26
0
        protected override bool StartPathFind(ushort vehicleID, ref Vehicle vehicleData, Vector3 startPos, Vector3 endPos, bool startBothWays, bool endBothWays)
        {
            VehicleInfo info           = this.m_info;
            ushort      driverInstance = this.GetDriverInstance(vehicleID, ref vehicleData);

            if (driverInstance == 0)
            {
                return(false);
            }
            CitizenManager instance = Singleton <CitizenManager> .instance;
            CitizenInfo    info2    = instance.m_instances.m_buffer[(int)driverInstance].Info;

            NetInfo.LaneType        laneTypes   = NetInfo.LaneType.Vehicle | NetInfo.LaneType.Pedestrian;
            VehicleInfo.VehicleType vehicleType = this.m_info.m_vehicleType;
            bool allowUnderground = (vehicleData.m_flags & Vehicle.Flags.Underground) != Vehicle.Flags.None;

            PathUnit.Position startPosA;
            PathUnit.Position startPosB;
            float             num;
            float             num2;

            PathUnit.Position endPosA;
            //    if (PathManager.FindPathPosition(startPos, ItemClass.Service.Road, NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle, info.m_vehicleType, allowUnderground, false, 32f, out startPosA, out startPosB, out num, out num2)                     && info2.m_citizenAI.FindPathPosition(driverInstance, ref instance.m_instances.m_buffer[(int)driverInstance], endPos, laneTypes, vehicleType, false, out endPosA))
            if (CustomPathManager.FindPathPosition(startPos, ItemClass.Service.Road, NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle, info.m_vehicleType, allowUnderground, false, 32f, out startPosA, out startPosB, out num, out num2, RoadManager.VehicleType.PassengerCar) && FindPathPosition(driverInstance, ref instance.m_instances.m_buffer[(int)driverInstance], endPos, laneTypes, vehicleType, false, out endPosA))
            {
                if (!startBothWays || num < 10f)
                {
                    startPosB = default(PathUnit.Position);
                }
                PathUnit.Position endPosB   = default(PathUnit.Position);
                SimulationManager instance2 = Singleton <SimulationManager> .instance;
                uint path;
                bool createPathResult;
                CustomPathManager customPathManager = Singleton <PathManager> .instance as CustomPathManager;
                if (customPathManager != null)
                {
                    createPathResult = customPathManager.CreatePath(out path, ref instance2.m_randomizer, instance2.m_currentBuildIndex, startPosA, startPosB, endPosA, endPosB, laneTypes, vehicleType, 20000f, RoadManager.VehicleType.PassengerCar);
                }
                else
                {
                    createPathResult = Singleton <PathManager> .instance.CreatePath(out path, ref instance2.m_randomizer, instance2.m_currentBuildIndex, startPosA, startPosB, endPosA, endPosB, laneTypes, vehicleType, 20000f);
                }
                if (createPathResult)
                {
                    if (vehicleData.m_path != 0u)
                    {
                        Singleton <PathManager> .instance.ReleasePath(vehicleData.m_path);
                    }
                    vehicleData.m_path   = path;
                    vehicleData.m_flags |= Vehicle.Flags.WaitingPath;
                    return(true);
                }
            }
            return(false);
        }
コード例 #27
0
        public List <HashSet <uint> > GetMapping(CitizenInfo human)
        {
            int prefabID = human.m_prefabDataIndex;

            if (!_mapping.PrefabMapped(prefabID))
            {
                CategorizePrefab(human);
            }

            return(_mapping.GetMapping(prefabID));
        }
コード例 #28
0
        public override void OnAfterSimulationFrame()
        {
            SimulationManager simulationManager = Singleton <SimulationManager> .instance;
            CitizenManager    citizenManager    = Singleton <CitizenManager> .instance;

            uint frameOffset = simulationManager.m_currentFrameIndex & 4095u;
            uint startIndex  = frameOffset * 256;
            uint endIndex    = (frameOffset + 1) * 256 - 1;

            for (uint index = startIndex; index <= endIndex; ++index)
            {
                if ((citizenManager.m_citizens.m_buffer[index].m_flags & Citizen.Flags.Created) != Citizen.Flags.None)
                {
                    CitizenInfo citizenInfo = citizenManager.m_citizens.m_buffer[index].GetCitizenInfo(index);
                    if (citizenInfo != null && citizenInfo.m_citizenAI is ResidentAI)
                    {
                        if (citizenManager.m_citizens.m_buffer[index].Age == Citizen.AGE_LIMIT_TEEN)
                        {
                            //(citizenManager.m_citizens.m_buffer[index].Age
                            MaybeFlunkHighSchool(index, citizenInfo);
                        }
                        if (citizenManager.m_citizens.m_buffer[index].Age == Citizen.AGE_LIMIT_YOUNG)
                        {
                            MaybeFlunkUniversity(index, citizenInfo);
                        }
                        if (citizenManager.m_citizens.m_buffer[index].Age >= Citizen.AGE_LIMIT_TEEN &&
                            citizenManager.m_citizens.m_buffer[index].Age < Citizen.AGE_LIMIT_ADULT)
                        {
                            if (citizenManager.m_citizens.m_buffer[index].EducationLevel < Citizen.Education.TwoSchools)
                            {
                                if (citizenManager.m_citizens.m_buffer[index].m_workBuilding != 0 &&
                                    (citizenManager.m_citizens.m_buffer[index].m_flags & Citizen.Flags.Student) != Citizen.Flags.None)
                                {
                                    #if DROPOUTS_DEBUG
                                    Debug.Log(String.Format("Expelling citizen {0} from university for lack of quals", index));
                                    #endif
                                    m_residentAI.LeaveSchool(index, citizenInfo);
                                    m_residentAI.RemoveSchoolOffers(index);
                                    m_residentAI.RemoveWorkOffers(index);
                                    m_residentAI.GetAJob(index);
                                }
                                else if (citizenManager.m_citizens.m_buffer[index].m_workBuilding == 0)
                                {
                                    #if DROPOUTS_DEBUG
                                    Debug.Log(String.Format("Removing citizen {0}'s university applications", index));
                                    #endif
                                    m_residentAI.RemoveSchoolOffers(index);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #29
0
        public List <HashSet <ushort> > GetMapping(CitizenInfo animal)
        {
            int prefabID = animal.m_prefabDataIndex;

            if (!_mapping.PrefabMapped(prefabID))
            {
                CategorizePrefab(animal);
            }

            return(_mapping.GetMapping(prefabID));
        }
コード例 #30
0
        private static void StartMoving(uint citizenId, ushort sourceBuildingId, ushort targetBuildingId)
        {
            CitizenInfo citizenInfo = CitizenManager.instance.m_citizens.m_buffer[citizenId].GetCitizenInfo(citizenId);
            Citizen     citizen     = CitizenManager.instance.m_citizens.m_buffer[citizenId];
            ResidentAI  resident    = citizenInfo.m_citizenAI as ResidentAI;

            if (resident.StartMoving(citizenId, ref citizen, sourceBuildingId, targetBuildingId))
            {
                Debug.Log("PfS: Citizen is moving...");
                _citizens.Add(citizenId);
            }
        }
コード例 #31
0
        public void OnLevelUnloading()
        {
            if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds)
            {
                for (uint i = 0; i < PrefabCollection <CitizenInfo> .LoadedCount(); i++)
                {
                    CitizenInfo cit = PrefabCollection <CitizenInfo> .GetLoaded(i);

                    cit.m_walkSpeed /= 0.25f;
                }
            }
        }
コード例 #32
0
        private void ProcessHumansUpdated()
        {
            //Nothing to do if we have no target
            //if (m_tb == null) return;

            uint[] entries = SkylinesOverwatch.Data.Instance.HumansUpdated;

            if (entries.Length == 0)
            {
                return;
            }

            CitizenManager instance = Singleton <CitizenManager> .instance;

            foreach (uint i in entries)
            {
                Citizen resident = instance.m_citizens.m_buffer[(int)i];

                if (resident.Dead)
                {
                    continue;
                }

                if ((resident.m_flags & Citizen.Flags.Created) == Citizen.Flags.None)
                {
                    continue;
                }

                CitizenInfo info = resident.GetCitizenInfo(i);

                if (info == null)
                {
                    continue;
                }

                if (!(info.m_citizenAI is ResidentAI))
                {
                    continue;
                }

                if (info.m_gender == Citizen.Gender.Female)
                {
                    info.m_gender = Citizen.Gender.Male;
                    ChirpLog.Info("Updated resident: " + resident.ToString() + " " + i);
                    ChirpLog.Flush();
                }

                // Do something with resident
                CitizenAI ai = (CitizenAI)info.GetAI();
                // TODO: How to get the CitizenInstance ?
                //ai.SetTarget(resident.m_instance, 0, m_tb);
            }
        }
コード例 #33
0
 public static void Deploy()
 {
     if (_redirects != null)
     {
         return;
     }
     _redirects = RedirectionUtil.RedirectType(typeof(CitizenInstanceDetour));
     _policeOfficer = Resources.FindObjectsOfTypeAll<CitizenInfo>().First(c => c.name == "Police Officer");
     _fireman = Resources.FindObjectsOfTypeAll<CitizenInfo>().First(c => c.name == "Fireman Default");
     _paramedic = Resources.FindObjectsOfTypeAll<CitizenInfo>().First(c => c.name == "Paramedic Default");
     _hearseDriver = Resources.FindObjectsOfTypeAll<CitizenInfo>().First(c => c.name == "Hearse Driver Default");
     _isDlcEnabled = Steam.IsDlcInstalled(369150U);
 }
コード例 #34
0
        public void deleteSelectedVehicle()
        {
            if (!remove_init)
            {
                InstanceID _selected;
                if (WorldInfoPanel.AnyWorldInfoPanelOpen())
                {
                    _selected = WorldInfoPanel.GetCurrentInstanceID();

                    if (_selected.IsEmpty || _selected.ParkedVehicle == 0)
                    {
                        _selected = default(InstanceID);
                    }
                }
                else
                {
                    _selected = default(InstanceID);
                }
                remove_init = true;
            }

            if (!_selected.IsEmpty)
            {
                uint citizen = _selected.Citizen;

                if (!SkylinesOverwatch.Data.Instance.IsResident(citizen))
                {
                    return;
                }

                CitizenInfo citizenInfo = Singleton <CitizenManager> .instance.m_citizens.m_buffer[(int)((UIntPtr)citizen)].GetCitizenInfo(citizen);
                InstanceID  instanceID2;
                if (citizenInfo.m_citizenAI.GetLocalizedStatus(citizen, ref Singleton <CitizenManager> .instance.m_citizens.m_buffer[(int)((UIntPtr)citizen)], out instanceID2) == _citizen_confused)
                {
                    WorldInfoPanel.HideAllWorldInfoPanels();

                    if (!InstanceManager.IsValid(_dummy) || _dummy.ParkedVehicle == _selected.ParkedVehicle)
                    {
                        _dummy      = default(InstanceID);
                        _dummy.Type = InstanceType.ParkedVehicle;
                    }

                    Singleton <InstanceManager> .instance.SelectInstance(_dummy);

                    Singleton <InstanceManager> .instance.FollowInstance(_dummy);

                    deleteParkedVehicle(_selected.ParkedVehicle);
                }
            }
        }
コード例 #35
0
        protected override bool StartPathFind(ushort vehicleID, ref Vehicle vehicleData, Vector3 startPos, Vector3 endPos, bool startBothWays, bool endBothWays, bool undergroundTarget)
        {
            VehicleInfo info           = this.m_info;
            ushort      driverInstance = this.GetDriverInstance(vehicleID, ref vehicleData);

            if (driverInstance == 0)
            {
                return(false);
            }
            CitizenManager instance = Singleton <CitizenManager> .instance;
            CitizenInfo    info2    = instance.m_instances.m_buffer[(int)driverInstance].Info;

            NetInfo.LaneType        laneTypes   = NetInfo.LaneType.Vehicle | NetInfo.LaneType.Pedestrian;
            VehicleInfo.VehicleType vehicleType = this.m_info.m_vehicleType;
            bool   allowUnderground             = (vehicleData.m_flags & (Vehicle.Flags.Underground | Vehicle.Flags.Transition)) != (Vehicle.Flags) 0;
            bool   randomParking  = false;
            ushort targetBuilding = instance.m_instances.m_buffer[(int)driverInstance].m_targetBuilding;

            if (targetBuilding != 0 && Singleton <BuildingManager> .instance.m_buildings.m_buffer[(int)targetBuilding].Info.m_class.m_service > ItemClass.Service.Office)
            {
                randomParking = true;
            }
            PathUnit.Position startPosA;
            PathUnit.Position startPosB;
            float             num;
            float             num2;

            PathUnit.Position endPosA;
            if (PathManager.FindPathPosition(startPos, ItemClass.Service.Road, NetInfo.LaneType.Vehicle | NetInfo.LaneType.TransportVehicle, info.m_vehicleType, allowUnderground, false, 32f, out startPosA, out startPosB, out num, out num2) && info2.m_citizenAI.FindPathPosition(driverInstance, ref instance.m_instances.m_buffer[(int)driverInstance], endPos, laneTypes, vehicleType, undergroundTarget, out endPosA))
            {
                if (!startBothWays || num < 10f)
                {
                    startPosB = default(PathUnit.Position);
                }
                PathUnit.Position endPosB   = default(PathUnit.Position);
                SimulationManager instance2 = Singleton <SimulationManager> .instance;
                uint path;
                if (Singleton <PathManager> .instance.CreatePath(ExtendedVehicleType.PassengerCar, out path, ref instance2.m_randomizer, instance2.m_currentBuildIndex, startPosA, startPosB, endPosA, endPosB, default(PathUnit.Position), laneTypes, vehicleType, 20000f, false, false, false, false, randomParking))
                {
                    if (vehicleData.m_path != 0u)
                    {
                        Singleton <PathManager> .instance.ReleasePath(vehicleData.m_path);
                    }
                    vehicleData.m_path   = path;
                    vehicleData.m_flags |= Vehicle.Flags.WaitingPath;
                    return(true);
                }
            }
            return(false);
        }
コード例 #36
0
        private static void AdjustResidentAI(CitizenInfo bi, Dictionary<Type, Type> componentRemap, HashSet<string> loaded)
        {
            if (bi == null)
            {
                return;
            }

            var oldAI = bi.GetComponent<CitizenAI>();
            if (oldAI == null)
                return;
            var compType = oldAI.GetType();

            Type newCompType = GetValue(componentRemap,compType);
            if (newCompType == null)
            {
                return;
            }

            //UnityEngine.Object.Destroy(oldAI,1f);
            CitizenAI newAI = bi.gameObject.AddComponent(newCompType) as CitizenAI;

            if (newAI != null)
            {
                    newAI.m_info = bi;
                    bi.m_citizenAI = newAI;
                    newAI.InitializeAI();
            }
            loaded.Add(newCompType.Name);
        }
コード例 #37
0
 public void AddTurnedMapping(CitizenInfo human)
 {
     int prefabID = human.m_prefabDataIndex;
     if (!_mapping.PrefabMapped(prefabID))
         _mapping.AddMapping(prefabID, _data._TurnedHumans);
 }
コード例 #38
0
ファイル: Citizen.cs プロジェクト: SanityPlea/SanityPleaCore
 public Citizen(City city, CitizenInfo info, ActorPriority priority = ActorPriority.A)
     : base(city, priority)
 {
     _info = info;
 }
コード例 #39
0
ファイル: Citizen.cs プロジェクト: SanityPlea/SanityPleaCore
 public Citizen(City city, CitizenInfo info)
     : base(city)
 {
     _info = info;
 }
コード例 #40
0
        public override void LateUpdate()
        {
            if (FavCimsMainClass.UnLoading)
                return;
            if (this.MyInstanceID.IsEmpty || !FavCimsCore.RowID.ContainsKey (citizenINT)) {
                if(this.MyFamily != null) {
                    this.MyFamily.Hide();
                    this.MyFamily.MyInstanceID = InstanceID.Empty;
                    this.MyFamily = null;
                }
                GameObject.Destroy (this.gameObject);
                return;
            }

            if (this.DeadOrGone || this.HomeLess) {
                this.OtherInfoButton.isEnabled = false;
                this.OtherInfoButton.tooltip = FavCimsLang.text ("Citizen_Details_NoUnit");
            }else if(GetTemplate() == -1 && (this.MyFamily == null || this.MyFamily.MyInstanceID != MyInstanceID)) {
                if(this.MyFamily != null && this.MyFamily.MyInstanceID != MyInstanceID) {
                    this.MyFamily = null;
                }
                this.OtherInfoButton.isEnabled = false;
                this.OtherInfoButton.tooltip = FavCimsLang.text ("Citizen_Details_fullTemplate");
            } else {
                if(this.MyFamily != null && this.MyFamily.MyInstanceID == this.MyInstanceID && this.MyFamily.isVisible) {
                    this.OtherInfoButton.normalBgSprite = "CityInfoFocused";
                }else{
                    this.OtherInfoButton.normalBgSprite = "CityInfo";
                }
                this.OtherInfoButton.isEnabled = true;
                this.OtherInfoButton.tooltip = FavCimsLang.text ("Citizen_Details");
            }

            uint citizen = this.MyInstanceID.Citizen;

            //Is dead?
            if((citizen != 0) && this.MyCitizen.m_citizens.m_buffer[citizen].Dead && !this.CitizenIsDead) {
                this.CitizenIsDead = true;
                this.CitizenRowData ["deathrealage"] = "0";
            }

            if (this.execute) {

                try {

                    this.CitizenName = this.MyInstance.GetName (this.MyInstanceID);

                    citizenINT = (int)((UIntPtr)citizen);

                    if (this.CitizenName != null && this.CitizenName.Length > 0 && this.CitizenName != this.MyInstancedName) {
                        this.MyInstancedName = this.CitizenName;
                    }

                    this.citizenInfo = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].GetCitizenInfo (citizen);

                    this.FavCimsRowCloseButton.tooltip = FavCimsLang.text ("FavStarButton_disable_tooltip");

                    if (this.FavCimsCitizenSingleRowPanel != null && citizen != 0 && this.CitizenName == this.MyInstancedName && FavCimsCore.RowID.ContainsKey (citizenINT)) {

                        //Citizen Gender
                        this.CitizenRowData ["gender"] = Citizen.GetGender (citizen).ToString ();

                        //Name
                        this.CitizenRowData ["name"] = this.MyCitizen.GetCitizenName (citizen);
                        this.FavCimsCitizenName.text = this.CitizenRowData ["name"];
                        if (this.CitizenRowData ["gender"] == "Female") {
                            this.FavCimsCitizenName.textColor = new Color32 (255, 102, 204, 213); //r,g,b,a
                        }

                        if (this.CitizenDistrict == 0) {
                            this.FavCimsCitizenName.tooltip = FavCimsLang.text ("NowInThisDistrict") + FavCimsLang.text ("DistrictNameNoDistrict");
                        } else {
                            this.FavCimsCitizenName.tooltip = FavCimsLang.text ("NowInThisDistrict") + MyDistrict.GetDistrictName (this.CitizenDistrict);
                        }

                        //Citizen Health
                        this.tmp_health = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].m_health;
                        this.CitizenRowData ["health"] = Citizen.GetHealthLevel (this.tmp_health).ToString ();

                        //Citizen Education
                        var tmp_education = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].EducationLevel;
                        this.CitizenRowData ["education"] = tmp_education.ToString ();
                        this.FavCimsEducation.text = FavCimsLang.text ("Education_" + this.CitizenRowData ["education"] + "_" + this.CitizenRowData ["gender"]);

                        if (this.CitizenRowData ["education"] == "ThreeSchools") {
                            this.FavCimsEducation.textColor = new Color32 (102, 204, 0, 60); //r,g,b,a
                        } else if (this.CitizenRowData ["education"] == "TwoSchools") {
                            this.FavCimsEducation.textColor = new Color32 (255, 204, 0, 32);
                        } else if (this.CitizenRowData ["education"] == "OneSchool") {
                            this.FavCimsEducation.textColor = new Color32 (255, 102, 0, 16); //r,g,b,a
                        } else {
                            this.FavCimsEducation.textColor = new Color32 (153, 0, 0, 0); //r,g,b,a
                        }

                        //Citizen Wellbeing
                        this.tmp_wellbeing = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].m_wellbeing;
                        this.CitizenRowData ["wellbeing"] = Citizen.GetWellbeingLevel (tmp_education, this.tmp_wellbeing).ToString ();

                        //Citizen Happiness
                        this.tmp_happiness = Citizen.GetHappiness (this.tmp_health, this.tmp_wellbeing);
                        //this.CitizenRowData ["happiness"] = Citizen.GetHappinessLevel (this.tmp_happiness).ToString (); //Bad, Poor, Good, Excellent, Suberb
                        this.CitizenRowData ["happiness_icon"] = GetHappinessString (Citizen.GetHappinessLevel (this.tmp_happiness));
                        this.FavCimsHappyIcon.normalBgSprite = this.CitizenRowData ["happiness_icon"];
                        this.FavCimsHappyIcon.tooltip = FavCimsLang.text (this.CitizenRowData ["happiness_icon"]);

                        //Age Group (Age Phase)
                        this.tmp_age = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].m_age;
                        this.CitizenRowData ["agegroup"] = Citizen.GetAgeGroup (this.tmp_age).ToString ();
                        this.FavCimsAgePhase.text = FavCimsLang.text ("AgePhase_" + this.CitizenRowData ["agegroup"] + "_" + this.CitizenRowData ["gender"]);

                        //Real Age
                        this.RealAge = FavCimsCore.CalculateCitizenAge (this.tmp_age);

                        if (this.RealAge <= 12) { //CHILD
                            this.FavCimsRealAge.text = this.RealAge.ToString ();
                            this.FavCimsRealAge.textColor = new Color32 (102, 204, 0, 60); //r,g,b,a
                            this.FavCimsAgePhase.textColor = new Color32 (102, 204, 0, 60); //r,g,b,a
                        } else if (this.RealAge <= 19) { //TEEN
                            this.FavCimsRealAge.text = this.RealAge.ToString ();
                            this.FavCimsRealAge.textColor = new Color32 (0, 102, 51, 100); //r,g,b,a
                            this.FavCimsAgePhase.textColor = new Color32 (0, 102, 51, 100); //r,g,b,a
                        } else if (this.RealAge <= 25) { //YOUNG
                            this.FavCimsRealAge.text = this.RealAge.ToString ();
                            this.FavCimsRealAge.textColor = new Color32 (255, 204, 0, 32); //r,g,b,a
                            this.FavCimsAgePhase.textColor = new Color32 (255, 204, 0, 32); //r,g,b,a
                        } else if (this.RealAge <= 65) { //ADULT
                            this.FavCimsRealAge.text = this.RealAge.ToString ();
                            this.FavCimsRealAge.textColor = new Color32 (255, 102, 0, 16); //r,g,b,a
                            this.FavCimsAgePhase.textColor = new Color32 (255, 102, 0, 16); //r,g,b,a
                        } else if (this.RealAge <= 90) { //SENIOR
                            this.FavCimsRealAge.text = this.RealAge.ToString ();
                            this.FavCimsRealAge.textColor = new Color32 (153, 0, 0, 0); //r,g,b,a
                            this.FavCimsAgePhase.textColor = new Color32 (153, 0, 0, 0); //r,g,b,a
                        } else { //FINAL
                            this.FavCimsRealAge.text = this.RealAge.ToString ();
                            this.FavCimsRealAge.textColor = new Color32 (255, 0, 0, 0); //r,g,b,a
                            this.FavCimsAgePhase.textColor = new Color32 (255, 0, 0, 0); //r,g,b,a
                        }

                        //Citizen Home
                        this.CitizenHome = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].m_homeBuilding;
                        if (this.CitizenHome != 0) {
                            this.HomeLess = false;
                            this.CitizenHomeID.Building = this.CitizenHome;
                            this.FavCimsCitizenHome.text = this.MyBuilding.GetBuildingName (this.CitizenHome, this.MyInstanceID);
                            this.FavCimsCitizenHome.isEnabled = true;
                            this.FavCimsCitizenHomeSprite.texture = TextureDB.FavCimsCitizenHomeTexture;
                            this.HomeInfo = this.MyBuilding.m_buildings.m_buffer [CitizenHomeID.Index].Info;

                            if (this.HomeInfo.m_class.m_service == ItemClass.Service.Residential) {

                                this.FavCimsCitizenHome.tooltip = null;

                                if (this.HomeInfo.m_class.m_subService == ItemClass.SubService.ResidentialHigh) {
                                    this.FavCimsCitizenHome.textColor = new Color32 (0, 102, 51, 100); //r,g,b,a
                                    this.FavCimsCitizenHomeSprite.texture = TextureDB.FavCimsCitizenHomeTextureHigh;
                                    this.FavCimsCitizenHome.tooltip = Locale.Get ("ZONEDBUILDING_TITLE", ItemClass.SubService.ResidentialHigh.ToString ());
                                } else if (this.HomeInfo.m_class.m_subService == ItemClass.SubService.ResidentialLow) {
                                    this.FavCimsCitizenHome.textColor = new Color32 (0, 153, 0, 80); //r,g,b,a
                                    this.FavCimsCitizenHomeSprite.texture = TextureDB.FavCimsCitizenHomeTexture;
                                    this.FavCimsCitizenHome.tooltip = Locale.Get ("ZONEDBUILDING_TITLE", ItemClass.SubService.ResidentialLow.ToString ());
                                }

                                switch (this.HomeInfo.m_class.m_level)
                                {
                                    case ItemClass.Level.Level5:
                                        this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [5];
                                        break;
                                    case ItemClass.Level.Level4:
                                        this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [4];
                                        break;
                                    case ItemClass.Level.Level3:
                                        this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [3];
                                        break;
                                    case ItemClass.Level.Level2:
                                        this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [2];
                                        break;
                                    default:
                                        this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [1];
                                        break;
                                }

                                /*
                                if (this.HomeInfo.m_class.m_level == ItemClass.Level.Level5) {
                                    this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [5];
                                } else if (this.HomeInfo.m_class.m_level == ItemClass.Level.Level4) {
                                    this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [4];
                                } else if (this.HomeInfo.m_class.m_level == ItemClass.Level.Level3) {
                                    this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [3];
                                } else if (this.HomeInfo.m_class.m_level == ItemClass.Level.Level2) {
                                    this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [2];
                                } else {
                                    this.FavCimsCitizenResidentialLevelSprite.texture = TextureDB.FavCimsResidentialLevel [1];
                                }
                                */

                                //District
                                this.HomeDistrict = (int)MyDistrict.GetDistrict (this.MyBuilding.m_buildings.m_buffer [CitizenHomeID.Index].m_position);

                                if (this.HomeDistrict == 0) {
                                    this.FavCimsCitizenHomeSprite.tooltip = FavCimsLang.text ("DistrictLabel") + FavCimsLang.text ("DistrictNameNoDistrict");
                                } else {
                                    this.FavCimsCitizenHomeSprite.tooltip = FavCimsLang.text ("DistrictLabel") + MyDistrict.GetDistrictName (this.HomeDistrict);
                                }
                            }
                        } else {
                            this.FavCimsCitizenHome.text = FavCimsLang.text ("Citizen_HomeLess");
                            this.FavCimsCitizenHome.isEnabled = false;
                            this.FavCimsCitizenHomeSprite.texture = TextureDB.FavCimsCitizenHomeTextureHomeless;
                            this.FavCimsCitizenHomeSprite.tooltip = FavCimsLang.text ("DistrictNameNoDistrict");
                            this.FavCimsCitizenHome.tooltip = FavCimsLang.text ("Citizen_HomeLess_tooltip");
                            this.FavCimsCitizenResidentialLevelSprite.texture = null;
                            this.HomeLess = true;
                        }

                        //Working Place
                        this.WorkPlace = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].m_workBuilding;
                        if (this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].GetCurrentSchoolLevel (citizen) != ItemClass.Level.None) {
                            this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = null;
                            this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsWorkingPlaceTextureStudent;
                            this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                            this.FavCimsWorkingPlace.tooltip = Locale.Get ("CITIZEN_SCHOOL_LEVEL", this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].GetCurrentSchoolLevel (citizen).ToString ());
                        } else if (this.WorkPlace == 0) {
                            this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = null;

                            if (this.tmp_age >= 180) {
                                //In Pensione
                                this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsWorkingPlaceTextureRetired;
                                this.FavCimsWorkingPlace.text = FavCimsLang.text ("Citizen_Retired");
                                this.FavCimsWorkingPlace.isEnabled = false;
                                this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Citizen_Retired_tooltip");
                                this.FavCimsWorkingPlaceSprite.tooltip = null;
                                this.FavCimsWorkingPlaceButtonGamDefImg.tooltip = null;
                                this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                            } else {
                                this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsWorkingPlaceTexture; //unemployed
                                this.FavCimsWorkingPlace.text = Locale.Get ("CITIZEN_OCCUPATION_UNEMPLOYED");
                                this.FavCimsWorkingPlace.isEnabled = false;
                                this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Unemployed_tooltip");
                                this.FavCimsWorkingPlaceSprite.tooltip = null;
                                this.FavCimsWorkingPlaceButtonGamDefImg.tooltip = null;
                                this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                            }
                        }

                        if (this.WorkPlace != 0) {
                            this.WorkPlaceID.Building = this.WorkPlace;
                            this.FavCimsWorkingPlace.text = this.MyBuilding.GetBuildingName (this.WorkPlace, this.MyInstanceID);
                            this.FavCimsWorkingPlace.isEnabled = true;
                            this.WorkInfo = this.MyBuilding.m_buildings.m_buffer [WorkPlaceID.Index].Info;

                            if (this.WorkInfo.m_class.m_service == ItemClass.Service.Commercial) {
                                this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = null;
                                if (this.WorkInfo.m_class.m_subService == ItemClass.SubService.CommercialHigh) {
                                    this.FavCimsWorkingPlace.textColor = new Color32 (0, 51, 153, 147); //r,g,b,a
                                    this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsCitizenCommercialHighTexture;
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("ZONEDBUILDING_TITLE", ItemClass.SubService.CommercialHigh.ToString ());
                                } else {
                                    this.FavCimsWorkingPlace.textColor = new Color32 (0, 153, 204, 130); //r,g,b,a
                                    this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsCitizenCommercialLowTexture;
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("ZONEDBUILDING_TITLE", ItemClass.SubService.CommercialLow.ToString ());
                                }

                                switch (this.WorkInfo.m_class.m_level)
                                {
                                    case ItemClass.Level.Level3:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [3];
                                        break;
                                    case ItemClass.Level.Level2:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [2];
                                        break;
                                    default:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [1];
                                        break;
                                }

                                /*
                                if (this.WorkInfo.m_class.m_level == ItemClass.Level.Level3) {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [3];
                                } else if (this.WorkInfo.m_class.m_level == ItemClass.Level.Level2) {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [2];
                                } else {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [1];
                                }
                                */

                            } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Industrial) {

                                this.FavCimsWorkingPlace.textColor = new Color32 (255, 204, 0, 32); //r,g,b,a
                                this.FavCimsWorkingPlace.tooltip = Locale.Get ("ZONEDBUILDING_TITLE", "Industrial");

                                switch (this.WorkInfo.m_class.m_subService)
                                {
                                    case ItemClass.SubService.IndustrialFarming:
                                        this.FavCimsWorkingPlaceSprite.texture = null;
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyFarming";
                                        break;
                                    case ItemClass.SubService.IndustrialForestry:
                                        this.FavCimsWorkingPlaceSprite.texture = null;
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ResourceForestry";
                                        break;
                                    case ItemClass.SubService.IndustrialOil:
                                        this.FavCimsWorkingPlaceSprite.texture = null;
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyOil";
                                        break;
                                    case ItemClass.SubService.IndustrialOre:
                                        this.FavCimsWorkingPlaceSprite.texture = null;
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyOre";
                                        break;
                                    default:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = null;
                                        this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsCitizenIndustrialGenericTexture;
                                        break;
                                }
                                /*
                                if (this.WorkInfo.m_class.m_subService == ItemClass.SubService.IndustrialFarming) {
                                    this.FavCimsWorkingPlaceSprite.texture = null;
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyFarming";
                                } else if (this.WorkInfo.m_class.m_subService == ItemClass.SubService.IndustrialForestry) {
                                    this.FavCimsWorkingPlaceSprite.texture = null;
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ResourceForestry";
                                } else if (this.WorkInfo.m_class.m_subService == ItemClass.SubService.IndustrialOil) {
                                    this.FavCimsWorkingPlaceSprite.texture = null;
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyOil";
                                } else if (this.WorkInfo.m_class.m_subService == ItemClass.SubService.IndustrialOre) {
                                    this.FavCimsWorkingPlaceSprite.texture = null;
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyOre";
                                } else {
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = null;
                                    this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsCitizenIndustrialGenericTexture;
                                }
                                */

                                switch (this.WorkInfo.m_class.m_level)
                                {
                                    case ItemClass.Level.Level3:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [3];
                                        break;
                                    case ItemClass.Level.Level2:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [2];
                                        break;
                                    default:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [1];
                                        break;
                                }

                                /*
                                if (this.WorkInfo.m_class.m_level == ItemClass.Level.Level3) {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [3];
                                } else if (this.WorkInfo.m_class.m_level == ItemClass.Level.Level2) {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [2];
                                } else {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [1];
                                }
                                */

                            } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Office) {
                                this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = null;
                                this.FavCimsWorkingPlace.textColor = new Color32 (0, 204, 255, 128); //r,g,b,a
                                this.FavCimsWorkingPlaceSprite.texture = TextureDB.FavCimsCitizenOfficeTexture;
                                this.FavCimsWorkingPlace.tooltip = Locale.Get ("ZONEDBUILDING_TITLE", "Office");

                                switch (this.WorkInfo.m_class.m_level)
                                {
                                    case ItemClass.Level.Level3:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [3];
                                        break;
                                    case ItemClass.Level.Level2:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [2];
                                        break;
                                    default:
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsCommercialLevel [1];
                                        break;
                                }

                                /*
                                if (this.WorkInfo.m_class.m_level == ItemClass.Level.Level3) {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [3];
                                } else if (this.WorkInfo.m_class.m_level == ItemClass.Level.Level2) {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [2];
                                } else {
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = TextureDB.FavCimsIndustrialLevel [1];
                                }
                                */

                            } else {
                                this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                                this.FavCimsWorkingPlace.textColor = new Color32 (153, 102, 51, 20); //r,g,b,a

                                switch (this.WorkInfo.m_class.m_service)
                                {
                                    case ItemClass.Service.FireDepartment:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "InfoIconFireSafety";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "FireDepartment");
                                        break;
                                    case ItemClass.Service.HealthCare:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ToolbarIconHealthcareFocused";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Healthcare");
                                        break;
                                    case ItemClass.Service.PoliceDepartment:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ToolbarIconPolice";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Police");
                                        break;
                                    case ItemClass.Service.Garbage:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyRecycling";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Garbage");
                                        break;
                                    case ItemClass.Service.Electricity:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyPowerSaving";
                                        this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Electricity_job");
                                        break;
                                    case ItemClass.Service.Education:
                                        this.FavCimsWorkingPlace.textColor = new Color32 (0, 102, 51, 100); //r,g,b,a
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "InfoIconEducationPressed";
                                        break;
                                    case ItemClass.Service.Beautification:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "SubBarBeautificationParksnPlazas";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Beautification");
                                        break;
                                    case ItemClass.Service.Government:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ToolbarIconGovernment";
                                        this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Government_job");
                                        break;
                                    case ItemClass.Service.Water:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyWaterSaving";
                                        this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Water_job");
                                        break;
                                    case ItemClass.Service.PublicTransport:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyFreePublicTransport";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "PublicTransport");
                                        break;
                                    case ItemClass.Service.Monument:
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "FeatureMonumentLevel6";
                                        this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Monuments");
                                        break;
                                    default:
                                        this.FavCimsWorkingPlace.textColor = new Color32 (255, 204, 0, 32); //r,g,b,a
                                        this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyNone";
                                        this.FavCimsWorkingPlace.tooltip = null;
                                        break;
                                }

                                /*
                                if (this.WorkInfo.m_class.m_service == ItemClass.Service.FireDepartment) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "InfoIconFireSafety";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "FireDepartment");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.HealthCare) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ToolbarIconHealthcareFocused";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Healthcare");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.PoliceDepartment) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ToolbarIconPolice";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Police");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Garbage) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyRecycling";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Garbage");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Electricity) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyPowerSaving";
                                    this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Electricity_job");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Education) {

                                    this.FavCimsWorkingPlace.textColor = new Color32 (0, 102, 51, 100); //r,g,b,a
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "InfoIconEducationPressed";

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Beautification) { //parchi

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "SubBarBeautificationParksnPlazas";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Beautification");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Government) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "ToolbarIconGovernment";
                                    this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Government_job");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Water) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyWaterSaving";
                                    this.FavCimsWorkingPlace.tooltip = FavCimsLang.text ("Water_job");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.PublicTransport) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyFreePublicTransport";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "PublicTransport");

                                } else if (this.WorkInfo.m_class.m_service == ItemClass.Service.Monument) {

                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "FeatureMonumentLevel6";
                                    this.FavCimsWorkingPlace.tooltip = Locale.Get ("SERVICE_DESC", "Monuments");

                                } else if (this.WorkInfo.m_class.m_service != ItemClass.Service.None) {

                                    this.FavCimsWorkingPlace.textColor = new Color32 (255, 204, 0, 32); //r,g,b,a
                                    this.FavCimsWorkingPlaceButtonGamDefImg.normalBgSprite = "IconPolicyNone";
                                    this.FavCimsWorkingPlace.tooltip = null;
                                }
                                */
                                this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                            }

                            //District
                            this.WorkDistrict = (int)MyDistrict.GetDistrict (this.MyBuilding.m_buildings.m_buffer [WorkPlaceID.Index].m_position);

                            if (this.WorkDistrict == 0) {
                                this.FavCimsWorkingPlaceSprite.tooltip = FavCimsLang.text ("DistrictLabel") + FavCimsLang.text ("DistrictNameNoDistrict");
                            } else {
                                this.FavCimsWorkingPlaceSprite.tooltip = FavCimsLang.text ("DistrictLabel") + MyDistrict.GetDistrictName (this.WorkDistrict);
                            }

                        } else {
                            this.FavCimsWorkingPlace.isEnabled = false;
                            this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                            this.FavCimsWorkingPlaceButtonGamDefImg.tooltip = null;
                            this.FavCimsWorkingPlaceSprite.tooltip = null;
                        }

                        this.InstanceCitizenID = this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index].m_instance;
                        this.citizenInstance = this.MyCitizen.m_instances.m_buffer [InstanceCitizenID];

                        if (this.citizenInstance.m_targetBuilding != 0) {

                            this.CitizenVehicle = this.MyCitizen.m_citizens.m_buffer [citizen].m_vehicle;
                            this.MyVehicleID = InstanceID.Empty;

                            GoingOutside = (MyBuilding.m_buildings.m_buffer [this.citizenInstance.m_targetBuilding].m_flags & Building.Flags.IncomingOutgoing) != Building.Flags.None;

                            if (this.CitizenVehicle != 0) {

                                this.MyVehicleID.Vehicle = this.CitizenVehicle;

                                this.FavCimsLastActivityVehicleButton.isEnabled = true;

                                this.VehInfo = this.MyVehicle.m_vehicles.m_buffer [this.CitizenVehicle].Info;

                                this.CitizenVehicleName = this.MyVehicle.GetVehicleName (this.CitizenVehicle);

                                if (this.VehInfo.m_class.m_service == ItemClass.Service.Residential) {
                                    //sta usando una macchina
                                    if (this.VehInfo.m_vehicleAI.GetOwnerID (this.CitizenVehicle, ref MyVehicle.m_vehicles.m_buffer [this.CitizenVehicle]).Citizen == citizen) {
                                        //sta usando la sua macchina.
                                        if (GoingOutside)
                                            LeaveCity = true;

                                        this.FavCimsLastActivityVehicleButton.normalBgSprite = "IconCitizenVehicle";
                                        this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "IconTouristVehicle";

                                        this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName;
                                    }

                                } else if (this.VehInfo.m_class.m_service == ItemClass.Service.PublicTransport) {
                                    //sta usando un mezzo pubblico
                                    if (GoingOutside)
                                        LeaveCity = true;

                                    switch (this.VehInfo.m_class.m_subService)
                                    {
                                        case ItemClass.SubService.PublicTransportBus:

                                            this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportBus";
                                            this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportBusHovered";
                                            this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportBusFocused";
                                            this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportBusPressed";
                                            this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Bus");

                                            break;

                                        case ItemClass.SubService.PublicTransportMetro:

                                            this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportMetro";
                                            this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportMetroHovered";
                                            this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportMetroFocused";
                                            this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportMetroPressed";

                                            this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Metro");

                                            break;

                                        case ItemClass.SubService.PublicTransportPlane:

                                            this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportPlane";
                                            this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportPlaneHovered";
                                            this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportPlaneFocused";
                                            this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportPlanePressed";

                                            this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Plane");

                                            break;
                                        case ItemClass.SubService.PublicTransportShip:

                                            this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportShip";
                                            this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportShipHovered";
                                            this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportShipFocused";
                                            this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportShipPressed";

                                            this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Ship");

                                            break;
                                        case ItemClass.SubService.PublicTransportTrain:

                                            this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportTrain";
                                            this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportTrainHovered";
                                            this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportTrainFocused";
                                            this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportTrainPressed";

                                            if (this.CitizenVehicleName == "VEHICLE_TITLE[Train Passenger]:0")
                                                this.CitizenVehicleName = Locale.Get ("VEHICLE_TITLE", "Train Engine");

                                            this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Train");

                                            break;
                                    }
                                    /*
                                    if (this.VehInfo.m_class.m_subService == ItemClass.SubService.PublicTransportBus) {

                                        this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportBus";
                                        this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportBusHovered";
                                        this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportBusFocused";
                                        this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportBusPressed";

                                        this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Bus");

                                    } else if (this.VehInfo.m_class.m_subService == ItemClass.SubService.PublicTransportMetro) {

                                        this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportMetro";
                                        this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportMetroHovered";
                                        this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportMetroFocused";
                                        this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportMetroPressed";

                                        this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Metro");

                                    } else if (this.VehInfo.m_class.m_subService == ItemClass.SubService.PublicTransportPlane) {

                                        this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportPlane";
                                        this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportPlaneHovered";
                                        this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportPlaneFocused";
                                        this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportPlanePressed";

                                        this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Plane");

                                    } else if (this.VehInfo.m_class.m_subService == ItemClass.SubService.PublicTransportShip) {

                                        this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportShip";
                                        this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportShipHovered";
                                        this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportShipFocused";
                                        this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportShipPressed";

                                        this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Ship");

                                    } else if (this.VehInfo.m_class.m_subService == ItemClass.SubService.PublicTransportTrain) {

                                        this.FavCimsLastActivityVehicleButton.normalBgSprite = "SubBarPublicTransportTrain";
                                        this.FavCimsLastActivityVehicleButton.hoveredBgSprite = "SubBarPublicTransportTrainHovered";
                                        this.FavCimsLastActivityVehicleButton.focusedBgSprite = "SubBarPublicTransportTrainFocused";
                                        this.FavCimsLastActivityVehicleButton.pressedBgSprite = "SubBarPublicTransportTrainPressed";

                                        if (this.CitizenVehicleName == "VEHICLE_TITLE[Train Passenger]:0")
                                            this.CitizenVehicleName = Locale.Get ("VEHICLE_TITLE", "Train Engine");

                                        this.FavCimsLastActivityVehicleButton.tooltip = this.CitizenVehicleName + " - " + Locale.Get ("SUBSERVICE_DESC", "Train");
                                    }
                                    */
                                }
                            } else {
                                if (GoingOutside)
                                    LeaveCity = true;

                                this.FavCimsLastActivityVehicleButton.disabledBgSprite = "InfoIconPopulationDisabled";
                                this.FavCimsLastActivityVehicleButton.isEnabled = false;
                                this.FavCimsLastActivityVehicleButton.tooltip = FavCimsLang.text ("Vehicle_on_foot");
                            }
                        } else {

                            this.FavCimsLastActivityVehicleButton.disabledBgSprite = "InfoIconPopulationDisabled";
                            this.FavCimsLastActivityVehicleButton.isEnabled = false;
                            this.FavCimsLastActivityVehicleButton.tooltip = null;
                        }

                        //Citizen Status
                        this.CitizenStatus = citizenInfo.m_citizenAI.GetLocalizedStatus (citizen, ref this.MyCitizen.m_citizens.m_buffer [MyInstanceID.Index], out this.MyTargetID);
                        this.CitizenTarget = this.MyBuilding.GetBuildingName (this.MyTargetID.Building, this.MyInstanceID);
                        this.FavCimsLastActivity.text = this.CitizenStatus + " " + this.CitizenTarget;

                        if (!this.MyTargetID.IsEmpty) {

                            //District
                            this.TargetDistrict = (int)MyDistrict.GetDistrict (this.MyBuilding.m_buildings.m_buffer [MyTargetID.Index].m_position);

                            if (this.TargetDistrict == 0) {
                                this.FavCimsLastActivity.tooltip = FavCimsLang.text ("DistrictLabel") + FavCimsLang.text ("DistrictNameNoDistrict");
                            } else {
                                this.FavCimsLastActivity.tooltip = FavCimsLang.text ("DistrictLabel") + MyDistrict.GetDistrictName (this.TargetDistrict);
                            }
                        }

                        //Now in this District
                        this.CitizenDistrict = (int)MyDistrict.GetDistrict (citizenInstance.GetSmoothPosition (InstanceCitizenID));

                        //Il carro funebre lo ha caricato
                        //if (((citizen != 0) && MyCitizen.m_citizens.m_buffer[citizen].Dead) && (MyCitizen.m_citizens.m_buffer[citizen].CurrentLocation == Citizen.Location.Moving)) {
                        if(this.CitizenIsDead) {
                            //try
                            //{
                            this.FavCimsHappyIcon.normalBgSprite = "NotificationIconDead";
                            this.FavCimsHappyIcon.tooltip = FavCimsLang.text ("People_Life_Status_Dead");

                            if(this.CitizenRowData ["deathrealage"] == "0")
                                this.CitizenRowData ["deathrealage"] = this.RealAge.ToString();

                            this.FavCimsRealAge.text = this.CitizenRowData ["deathrealage"];

                            if (this.DeathDate == null) {
                                this.DeathDate = GameTime.FavCimsDate (FavCimsLang.text ("time_format"),"n/a");
                                this.DeathTime = GameTime.FavCimsTime ();
                            }
                            this.FavCimsCitizenName.tooltip =
                                FavCimsLang.text ("People_Life_Status_Dead") + " " +
                                    FavCimsLang.text ("People_Life_Status_Dead_date") + " " + this.DeathDate + " " +
                                    FavCimsLang.text ("People_Life_Status_Dead_time") + " " + this.DeathTime;

                            if(MyCitizen.m_citizens.m_buffer[citizen].CurrentLocation == Citizen.Location.Moving) {
                                this.hearse = this.MyCitizen.m_citizens.m_buffer [citizen].m_vehicle;

                                if(hearse != 0) {
                                    this.CitizenDead.Citizen = citizen;
                                    this.MyVehicleID.Vehicle = hearse;

                                    this.FavCimsLastActivityVehicleButton.normalBgSprite = "NotificationIconVerySick";
                                    this.FavCimsLastActivityVehicleButton.isEnabled = true;
                                    this.FavCimsLastActivityVehicleButton.playAudioEvents = true;
                                    this.FavCimsLastActivityVehicleButton.tooltip = Locale.Get ("VEHICLE_TITLE", "Hearse");
                                    this.FavCimsLastActivity.text = FavCimsLang.text("Citizen_on_hearse");
                                }
                            } else if(MyCitizen.m_citizens.m_buffer[citizen].CurrentLocation != Citizen.Location.Moving && this.hearse == 0) { //Verificare con unspawn
                                //aspetta il carro funebre
                                this.FavCimsLastActivity.text = FavCimsLang.text("Citizen_wait_hearse");
                                this.FavCimsLastActivityVehicleButton.disabledBgSprite = "NotificationIconVerySick";
                                this.FavCimsLastActivityVehicleButton.isEnabled = false;
                            } else {
                                //lo stanno seppellendo
                                this.FavCimsLastActivity.text = FavCimsLang.text("Citizen_hisfuneral");
                                this.FavCimsLastActivityVehicleButton.disabledBgSprite = "NotificationIconVerySick";
                                this.FavCimsLastActivityVehicleButton.isEnabled = false;
                            }
                            //}catch (Exception e) {
                            //	Debug.Log("error + " + e.ToString());
                            //}
                        }

                    } else {
                        if(this.rowLang == null || this.rowLang != FavCimsLang.GameLanguage)
                            this.DeadOrGone = false;

                        if (!this.DeadOrGone) {
                            this.rowLang = FavCimsLang.GameLanguage;
                            this.DeadOrGone = true;

                            if (this.FavCimsCitizenSingleRowPanel != null && FavCimsCore.RowID.ContainsKey (citizenINT) && this.MyInstancedName.Length > 0) {

                                if(this.DeathDate != null) {
                                    this.DeathDate = GameTime.FavCimsDate (FavCimsLang.text ("time_format"), this.DeathDate);
                                }

                                if (this.DeathDate == null) {
                                    this.DeathDate = GameTime.FavCimsDate (FavCimsLang.text ("time_format"),"n/a");
                                    this.DeathTime = GameTime.FavCimsTime ();
                                }

                                //if(this.citflags != null)
                                    //Debug.Log(this.citflags);

                                //Debug.Log(this.FavCimsCitizenName.text + " is dead on date " + this.DeathDate + " at time " + this.DeathTime);

                                this.FavCimsCitizenName.disabledTextColor = new Color32 (51, 51, 51, 160); //r,g,b,a
                                this.FavCimsCitizenName.isEnabled = false;
                                this.FavCimsEducation.textColor = new Color32 (51, 51, 51, 160); //r,g,b,a
                                this.FavCimsRealAge.textColor = new Color32 (51, 51, 51, 160); //r,g,b,a
                                this.FavCimsAgePhase.textColor = new Color32 (51, 51, 51, 160); //r,g,b,a

                                if (!LeaveCity && (this.CitizenIsDead || this.RealAge > 65)) { //Dead Peoples (this.CitizenDead == this.MyInstanceID || this.RealAge > 65)

                                    try
                                    {
                                        //Citizen Life Status
                                        //this.CitizenRowData ["lifestatus"] = "People_Life_Status_Dead";

                                        //Happiness x.x
                                        //this.CitizenRowData ["happiness_icon"] = "NotificationIconDead";
                                        this.FavCimsHappyIcon.normalBgSprite = "NotificationIconDead";
                                        this.FavCimsHappyIcon.tooltip = FavCimsLang.text ("People_Life_Status_Dead");

                                        //Name
                                        //this.CitizenRowData ["name"] = this.MyInstancedName;
                                        this.FavCimsCitizenName.text = this.MyInstancedName;
                                        this.FavCimsCitizenName.tooltip =
                                            FavCimsLang.text ("People_Life_Status_Dead") + " " +
                                            FavCimsLang.text ("People_Life_Status_Dead_date") + " " + this.DeathDate + " " +
                                            FavCimsLang.text ("People_Life_Status_Dead_time") + " " + this.DeathTime;

                                        //Info Button
                                        this.OtherInfoButton.isEnabled = false;

                                        //AgePhase
                                        //this.CitizenRowData ["agegroup"] = "Dead";
                                        this.FavCimsAgePhase.text = FavCimsLang.text ("AgePhaseDead_" + this.CitizenRowData ["gender"]);

                                        //Home
                                        this.FavCimsCitizenHome.text = FavCimsLang.text ("Home_Location_Dead");
                                        this.FavCimsCitizenHomeSprite.texture = TextureDB.FavCimsCitizenHomeTextureDead;
                                        this.FavCimsCitizenHome.tooltip = null;
                                        this.FavCimsCitizenHome.isEnabled = false;
                                        this.FavCimsCitizenResidentialLevelSprite.texture = null;
                                        this.FavCimsCitizenHomeSprite.tooltip = null;

                                        //Working Place
                                        this.FavCimsWorkingPlace.isEnabled = false;
                                        this.FavCimsWorkingPlace.tooltip = null;
                                        this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;
                                        this.FavCimsWorkingPlaceSprite.tooltip = null;
                                        this.FavCimsWorkingPlaceButtonGamDefImg.tooltip = null;

                                        //Last Activity
                                        this.FavCimsLastActivity.isEnabled = false;
                                        this.FavCimsLastActivityVehicleButton.isEnabled = false;
                                        this.FavCimsLastActivityVehicleButton.disabledBgSprite = "NotificationIconDead";
                                        this.FavCimsLastActivityVehicleButton.tooltip = null;
                                        this.FavCimsLastActivity.tooltip = null;
                                        this.FavCimsLastActivity.text = FavCimsLang.text("Citizen_buried");

                                        this.CitizenRowData.Clear ();
                                    }catch (Exception e) {
                                        Debug.Error("error " + e.ToString());
                                    }

                                } else {

                                    //Citizen Life Status
                                    //this.CitizenRowData ["lifestatus"] = "People_Life_Status_IsGone";

                                    //Happiness ==>
                                    //this.CitizenRowData ["happiness_icon"] = "";
                                    this.FavCimsHappyIcon.normalBgSprite = "";
                                    this.FavCimsHappyIcon.tooltip = null;

                                    //Happiness Icon Override (For leaving people)
                                    this.FavCimsHappyOverride.texture = TextureDB.FavCimsHappyOverride_texture;
                                    this.FavCimsHappyOverride.relativePosition = new Vector3 (0, 0);
                                    this.FavCimsHappyOverride.tooltip = FavCimsLang.text ("People_Life_Status_IsGone");

                                    //Name
                                    //this.CitizenRowData ["name"] = this.MyInstancedName;
                                    this.FavCimsCitizenName.text = this.MyInstancedName;
                                    this.FavCimsCitizenName.tooltip =
                                        FavCimsLang.text ("People_Life_Status_IsGone") + " " +
                                        FavCimsLang.text ("People_Life_Status_Dead_date") + " " + this.DeathDate + " " +
                                        FavCimsLang.text ("People_Life_Status_Dead_time") + " " + this.DeathTime;

                                    //Info Button
                                    this.OtherInfoButton.isEnabled = false;

                                    //Home
                                    this.FavCimsCitizenHome.text = FavCimsLang.text ("HomeOutsideTheCity");
                                    this.FavCimsCitizenHomeSprite.texture = TextureDB.FavCimsCitizenHomeTextureHomeless;
                                    this.FavCimsCitizenHome.tooltip = null;
                                    this.FavCimsCitizenHome.isEnabled = false;
                                    this.FavCimsCitizenResidentialLevelSprite.texture = null;
                                    this.FavCimsCitizenHomeSprite.tooltip = null;

                                    //Working Place
                                    this.FavCimsWorkingPlace.isEnabled = false;
                                    this.FavCimsWorkingPlace.tooltip = null;
                                    this.FavCimsCitizenWorkPlaceLevelSprite.texture = null;

                                    //Last Activity
                                    //Ha lasciato la citta'.
                                    this.FavCimsLastActivity.isEnabled = false;
                                    this.FavCimsLastActivityVehicleButton.isEnabled = false;
                                    this.FavCimsLastActivityVehicleButton.disabledBgSprite = "NotificationIconDead";
                                    this.FavCimsLastActivity.tooltip = null;

                                    this.CitizenRowData.Clear ();
                                }

                            } else {

                                try {
                                    if(this.MyFamily != null) {
                                        this.MyFamily.Hide();
                                        this.MyFamily.MyInstanceID = InstanceID.Empty;
                                        this.MyFamily = null;
                                    }
                                    GameObject.Destroy (this.gameObject);
                                } catch { /*(Exception e)*/
                                    //Debug.Log ("CitizenName Error Destroy Object" + e.ToString ());
                                }
                            }
                        }
                    }
                } catch { /*(Exception e)*/
                    //Debug.Error ("Update Row Error" + e.ToString ());
                }
            }
            return;
        }
コード例 #41
0
        private bool GetHuman()
        {
            _human = _instance.m_citizens.m_buffer[(int)_id];

            if (_human.Dead)
                return false;

            if ((_human.m_flags & Citizen.Flags.Created) == Citizen.Flags.None)
                return false;

            if ((_human.m_flags & Citizen.Flags.DummyTraffic) != Citizen.Flags.None)
                return false;

            _info = _human.GetCitizenInfo(_id);

            if (_info == null)
                return false;

            if (_info.m_citizenAI.IsAnimal())
                return false;

            return true;
        }
コード例 #42
0
ファイル: SlowCitizenInfo.cs プロジェクト: Jeihun/SlowSpeed
 public SlowCitizenInfo(CitizenInfo i)
 {
     this.i = i;
     BaseWalkSpeed = i.m_walkSpeed;
 }
コード例 #43
0
        private bool GetHuman()
        {
            _human = _citizenManager.m_citizens.m_buffer[(int)_id];

            if (_human.Dead)
            {
                if (! _data.IsTurnedHuman(_id) && _lastId != _id) // only spawn zombie if not yet turned.
                {
                    _lastId = _id;
                    Vector3 position = GetPosition(_human);
                   /// Logger.Log(_citizenManager.GetCitizenName(_id) + " died at location " + _human.CurrentLocation + " at world posistion " + position);

                    uint zombieId;
                    ushort zombieInstanceID;
                    if(Singleton<ZombieManager>.instance.CreateZombie(out zombieId, ref Singleton<SimulationManager>.instance.m_randomizer))
                    {
                        //Logger.Log("1");
                       // ZombieInfo zombieInfo = new ZombieInfo();
                       // Logger.Log("2");
                       // zombieInfo.InitializePrefab();
                       // Logger.Log("3");
                       // zombieInfo.InitializePrefabInstance();
                       // Logger.Log("4");
                       // Singleton<ZombieManager>.instance.CreateZombieInstance(out zombieInstanceID, ref Singleton<SimulationManager>.instance.m_randomizer, zombieInfo, zombieId);
                      //  Logger.Log("5");
                    }
                   // _zombieManager.SpawnZombie(position);
                    _mapping.AddTurnedMapping(_human.GetCitizenInfo(_id));
                }

                return false;
            }

            if ((_human.m_flags & Citizen.Flags.Created) == Citizen.Flags.None)
                return false;

            if ((_human.m_flags & Citizen.Flags.DummyTraffic) != Citizen.Flags.None)
                return false;

            _info = _human.GetCitizenInfo(_id);

            if (_info == null)
                return false;

            if (_info.m_citizenAI.IsAnimal())
                return false;

            return true;
        }