private Texture2D[][] RenderTexture(PersonTypeInfo info, int gender) { Color[] shadowPixels = shadowSprite.GetPixels(); Color bodyColor = skinTones[Random.Range(0, skinTones.Length)]; Color[] bodyPixels = bodySprite.GetPixels(); Color topColor = Color.white; Color[] topPixels = new Color[0]; Color bottomColor = Color.white; Color[] bottomPixels = new Color[0]; Color shoesColor = Color.white; Color[] shoesPixels = new Color[0]; Color hairColor = Color.white; Color[] hairPixels = new Color[0]; if (gender == 0) { if (info.femaleTopStyles.Count() > 0) { topPixels = info.femaleTopStyles[Random.Range(0, info.femaleTopStyles.Length)].GetPixels(); } if (info.femaleBottomStyles.Count() > 0) { bottomPixels = info.femaleBottomStyles[Random.Range(0, info.femaleBottomStyles.Length)].GetPixels(); } if (info.femaleShoeStyles.Count() > 0) { shoesPixels = info.femaleShoeStyles[Random.Range(0, info.femaleShoeStyles.Length)].GetPixels(); } hairPixels = femaleHairStyles[Random.Range(0, femaleHairStyles.Length)].GetPixels(); } else { if (info.maleTopStyles.Count() > 0) { topPixels = info.maleTopStyles[Random.Range(0, info.maleTopStyles.Length)].GetPixels(); } if (info.maleBottomStyles.Count() > 0) { bottomPixels = info.maleBottomStyles[Random.Range(0, info.maleBottomStyles.Length)].GetPixels(); } if (info.maleShoeStyles.Count() > 0) { shoesPixels = info.maleShoeStyles[Random.Range(0, info.maleShoeStyles.Length)].GetPixels(); } hairPixels = maleHairStyles[Random.Range(0, maleHairStyles.Length)].GetPixels(); } if (info.colorRandomly) { topColor = Random.ColorHSV(); bottomColor = Random.ColorHSV(); shoesColor = Random.ColorHSV(); } hairColor = Random.ColorHSV(); Texture2D[][] anims = new Texture2D[2][]; // Idle anims[0] = RenderAnimationTexture(1, 96, bodySprite.width, bodySprite.height, shadowPixels, bodyColor, bodyPixels, topColor, topPixels, bottomColor, bottomPixels, shoesColor, shoesPixels, hairColor, hairPixels); // Walking anims[1] = RenderAnimationTexture(6, 96, bodySprite.width, bodySprite.height, shadowPixels, bodyColor, bodyPixels, topColor, topPixels, bottomColor, bottomPixels, shoesColor, shoesPixels, hairColor, hairPixels); return(anims); }
public Person SpawnPerson(Vector2 pos, PersonType type = PersonType.Regular, string name = "", BoxCollider2D col = null, PersonStateType defaultState = PersonStateType.Other, PatrolRoute route = null) { GameObject obj = GameObject.Instantiate(worldObj, new Vector3(pos.x, pos.y, (pos.y / 10) - 0.01f), Quaternion.identity, personParent); obj.name = "Person" + name; Transform objChild = obj.transform.GetChild(0); PersonTypeInfo info = personTypesMap[type]; int gender = Random.Range(0, 2); Texture2D[][] anims = RenderTexture(info, gender); CityManager.Instance.BuildMesh(objChild.gameObject, 1, 1); MeshRenderer renderer = objChild.GetComponent <MeshRenderer>(); renderer.material.mainTexture = anims[0][0]; renderer.material.shader = Shader.Find("Transparent/Diffuse"); float scale = BuildingInteriorManager.Instance.PersonScale(); obj.transform.localScale = new Vector3(scale, scale, scale); if (route != null) { PatrolRoute newRoute = obj.AddComponent <PatrolRoute>(); newRoute.patrolStops = route.patrolStops; } if (col != null) { if ((pos.x < col.bounds.min.x) || (pos.y < col.bounds.min.y) || (pos.x > col.bounds.max.x) || (pos.y > col.bounds.max.y)) { objChild.gameObject.SetActive(false); } else { objChild.gameObject.SetActive(true); } } PersonState state = PersonState.GetState(defaultState == PersonStateType.Other ? info.defaultState : defaultState); List <Item> inventory = new List <Item>(); inventory.AddRange(ItemManager.Instance.GenerateItems(ItemManager.Instance.GetEmptyItem(), objChild)); ItemManager.Instance.FindItemObjInWorld(inventory[0].id).SetActive(true); inventory.AddRange(ItemManager.Instance.GenerateItems(Random.Range(minInventoryItems, maxInventoryItems + 1), objChild, new List <ItemType>(new ItemType[] { ItemType.Artifact }))); if (info.requiredItems != null && info.requiredItems.Count > 0) { List <Item> requiredInventory = ItemManager.Instance.GenerateItems(info.requiredItems, objChild); ItemManager.Instance.FindItemObjInWorld(requiredInventory[Random.Range(0, requiredInventory.Count)].id).SetActive(true); inventory.AddRange(requiredInventory); } int personSpeed = Random.Range(minPersonSpeed, maxPersonSpeed - minPersonSpeed); int personStrength = Random.Range(minPersonStrength, maxPersonStrength); int personResilience = Random.Range(minPersonResilience, maxPersonResilience); AudioClip[] hurtSounds = (gender == 0 ? femaleHurtSounds : maleHurtSounds); people.Add(new Person(obj, anims, PersonGlobalState.Instance, state, inventory, personSpeed, personStrength, personResilience, playerManager.maxHealth, hurtSounds, info.attacks)); return(people[people.Count - 1]); }