public static PersonState GetState(PersonStateType type) { switch (type) { case PersonStateType.Wandering: return(PersonWanderingState.Instance); case PersonStateType.Attacking: return(PersonAttackingState.Instance); case PersonStateType.Searching: return(PersonSearchingState.Instance); case PersonStateType.Patrolling: return(PersonPatrollingState.Instance); case PersonStateType.Standing: return(PersonStandingState.Instance); case PersonStateType.Running: return(PersonStandingState.Instance); } return(PersonGlobalState.Instance); }
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]); }