예제 #1
0
 public AlienTorsoLimb(TorsoLimbType in_Limb)
 {
     Limb = in_Limb;
 }
예제 #2
0
    public void Randomize()
    {
        //Work out the max
        foreach (var ele in headLimbs)
        {
            if (ele.LocationID != 0)
            {
                if (!VisibilityTable.ContainsKey(ele.LocationID))
                {
                    VisibilityTable.Add(ele.LocationID, false);
                }
            }

            if (!HeadMaxes.ContainsKey(ele.Limb))
            {
                HeadMaxes.Add(ele.Limb, 0);
            }

            HeadMaxes[ele.Limb]++;
        }

        foreach (var ele in armLimbs)
        {
            if (ele.LocationID != 0)
            {
                if (!VisibilityTable.ContainsKey(ele.LocationID))
                {
                    VisibilityTable.Add(ele.LocationID, false);
                }
            }

            if (!ArmMaxes.ContainsKey(ele.Limb))
            {
                ArmMaxes.Add(ele.Limb, 0);
            }

            ArmMaxes[ele.Limb]++;
        }

        int seed = System.DateTime.Now.Millisecond + System.DateTime.Now.Minute + System.DateTime.Now.Hour;

        Random.InitState(seed);

        RegenerateRacialName();

        //Randomize the home, effecting language and audio
        GalacticHome = (AlienGalacticHome)Random.Range((int)0, (int)TorsoLimbType.MAX_TYPES);

        //Randomize the skin color
        var previous = TorsoColor;

        while (TorsoColor == previous)
        {
            TorsoColor = (TorsoLimbType)Random.Range((int)1, (int)TorsoLimbType.MAX_TYPES);
        }

        switch (TorsoColor)
        {
        case TorsoLimbType.Blue:
            AlienSkinMaterial.color = SkinBlue;
            break;

        case TorsoLimbType.Green:
            AlienSkinMaterial.color = SkinGreen;
            break;

        case TorsoLimbType.Red:
            AlienSkinMaterial.color = SkinRed;
            break;
        }

        HeadLimbCount.Clear();
        ArmLimbCount.Clear();

        HeadLimbCount.Add(HeadLimbType.Eye_Stalk, Random.Range(0, HeadMaxes[HeadLimbType.Eye_Stalk]));
        HeadLimbCount.Add(HeadLimbType.EyeBalls, Random.Range(0, HeadMaxes[HeadLimbType.EyeBalls]));
        HeadLimbCount.Add(HeadLimbType.Ears, Random.Range(0, HeadMaxes[HeadLimbType.Ears]));
        HeadLimbCount.Add(HeadLimbType.Warts, Random.Range(0, HeadMaxes[HeadLimbType.Warts]));
        HeadLimbCount.Add(HeadLimbType.Mouth, Random.Range(0, HeadMaxes[HeadLimbType.Mouth]));
        HeadLimbCount.Add(HeadLimbType.Antennae, Random.Range(0, HeadMaxes[HeadLimbType.Antennae]));

        ArmLimbCount.Add(ArmLimbType.Robot, Random.Range(0, ArmMaxes[ArmLimbType.Robot]));
        ArmLimbCount.Add(ArmLimbType.Tentacle, Random.Range(0, ArmMaxes[ArmLimbType.Tentacle]));

        //Now we set up the rendering of the alien to match!
        foreach (var ele in armLimbs)
        {
            if (!ele.gameObject.active)
            {
                continue;
            }

            if (ele.LocationID != 0)
            {
                if (VisibilityTable[(ele.LocationID)])
                {
                    ele.gameObject.SetActive(false);
                    continue;
                }
            }

            if (ArmLimbCount[ele.Limb] <= 0)
            {
                ele.gameObject.SetActive(false);
            }
            else
            {
                //Disable any arms occupying the same slot
                if (ele.LocationID != 0)
                {
                    VisibilityTable[ele.LocationID] = true;
                }

                ArmLimbCount[ele.Limb]--;
            }
        }

        foreach (var ele in headLimbs)
        {
            if (!ele.gameObject.active)
            {
                continue;
            }

            if (ele.LocationID != 0)
            {
                if (VisibilityTable.ContainsKey(ele.LocationID))
                {
                    ele.gameObject.SetActive(false);
                    continue;
                }
            }

            switch (ele.Limb)
            {
            default:
                if (HeadLimbCount[ele.Limb] <= 0)
                {
                    ele.gameObject.SetActive(false);
                }
                else
                {
                    HeadLimbCount[ele.Limb]--;
                }
                break;

            case HeadLimbType.EyeBalls:
                if (HeadLimbCount[ele.Limb] <= 0)
                {
                    ele.gameObject.SetActive(false);
                }
                else
                {
                    //Disable any eye stalks occupying the same slot
                    if (ele.LocationID != 0)
                    {
                        VisibilityTable.Add(ele.LocationID, true);
                    }
                }
                HeadLimbCount[ele.Limb]--;
                break;

            case HeadLimbType.Eye_Stalk:
                if (HeadLimbCount[ele.Limb] <= 0)
                {
                    ele.gameObject.SetActive(false);
                }
                else
                {
                    //Disable any eye balls occupying the same slot
                    if (ele.LocationID != 0)
                    {
                        VisibilityTable.Add(ele.LocationID, true);
                    }
                    HeadLimbCount[ele.Limb]--;
                }
                break;
            }
        }
    }