コード例 #1
0
    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);
    }
コード例 #2
0
    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]);
    }