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); }
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; } } }
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]); } } } }
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); }
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(); } }
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); } }
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); } }
// 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); }
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); } }
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); }
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); } } } }
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); } } }
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); }
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); }
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];
public List<HashSet<uint>> GetMapping(CitizenInfo human) { int prefabID = human.m_prefabDataIndex; if (!_mapping.PrefabMapped(prefabID)) CategorizePrefab(human); return _mapping.GetMapping(prefabID); }
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); }
public void AddTurnedMapping(CitizenInfo human) { int prefabID = human.m_prefabDataIndex; if (!_mapping.PrefabMapped(prefabID)) { _mapping.AddMapping(prefabID, _data._TurnedHumans); } }
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); } }
public List<HashSet<ushort>> GetMapping(CitizenInfo animal) { int prefabID = animal.m_prefabDataIndex; if (!_mapping.PrefabMapped(prefabID)) CategorizePrefab(animal); return _mapping.GetMapping(prefabID); }
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); }
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); }
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); }
public List <HashSet <uint> > GetMapping(CitizenInfo human) { int prefabID = human.m_prefabDataIndex; if (!_mapping.PrefabMapped(prefabID)) { CategorizePrefab(human); } return(_mapping.GetMapping(prefabID)); }
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); } } } } } } }
public List <HashSet <ushort> > GetMapping(CitizenInfo animal) { int prefabID = animal.m_prefabDataIndex; if (!_mapping.PrefabMapped(prefabID)) { CategorizePrefab(animal); } return(_mapping.GetMapping(prefabID)); }
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); } }
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; } } }
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); } }
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); }
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); } } }
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); }
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); }
public void AddTurnedMapping(CitizenInfo human) { int prefabID = human.m_prefabDataIndex; if (!_mapping.PrefabMapped(prefabID)) _mapping.AddMapping(prefabID, _data._TurnedHumans); }
public Citizen(City city, CitizenInfo info, ActorPriority priority = ActorPriority.A) : base(city, priority) { _info = info; }
public Citizen(City city, CitizenInfo info) : base(city) { _info = info; }
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; }
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; }
public SlowCitizenInfo(CitizenInfo i) { this.i = i; BaseWalkSpeed = i.m_walkSpeed; }
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; }