Пример #1
0
    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);
    }
Пример #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]);
    }