示例#1
0
        private PrefabSets GetAvailablePrefabSetsForLocation(ChassisLocations location)
        {
            var locationString = VHLUtils.GetStringFromLocation(location);
            var weaponsData    = chassisDef.HardpointDataDef.HardpointData.FirstOrDefault(x => x.location == locationString);
            var sets           = new PrefabSets();

            if (weaponsData.weapons == null)
            {
                //Control.mod.Logger.LogDebug($"no hardpoint data found for {chassisDef.Description.Id} at {location}");
            }
            else
            {
                foreach (var weapons in weaponsData.weapons)
                {
                    var index = sets.Count;
                    try
                    {
                        var set = new PrefabSet(index, weapons);
                        sets.Add(set);
                    }
                    catch (Exception e)
                    {
                        Control.mod.Logger.LogDebug($"error processing hardpoint data for {chassisDef.Description.Id} at {location}: index={index} weapons=[{weapons?.JoinAsString()}]", e);
                        throw;
                    }
                }
            }
            return(sets);
        }
    private List <PrefabSet> GetAvailablePrefabSetsForLocation(ChassisLocations location)
    {
        var weaponsData = GetWeaponData(location);
        var sets        = new List <PrefabSet>();

        if (weaponsData.weapons == null)
        {
            Control.Logger.Debug?.Log($"no hardpoint data found for {chassisDef.Description.Id} at {location}");
        }
        else
        {
            foreach (var weapons in weaponsData.weapons)
            {
                var index = sets.Count;
                try
                {
                    var set = new PrefabSet(index, weapons.Where(x => !preMappedPrefabNames.Contains(x)));
                    sets.Add(set);
                }
                catch (Exception e)
                {
                    Control.Logger.Warning?.Log($"error processing hardpoint data for {chassisDef.Description.Id} at {location}: index={index} weapons=[{weapons?.JoinAsString()}]", e);
                    //throw;
                }
            }
        }
        return(sets);
    }
    public static PrefabSet PopulateFromDisk()
    {
        string    path      = Application.persistentDataPath + serializationPath;
        PrefabSet prefabSet = null;

        try{
            prefabSet = (PrefabSet)SerializationUtil.Deserialize(path);
            if (prefabSet != null)
            {
                prefabSet.OnDeserialization();
            }
        }catch (System.Exception ex)
        {
            Debug.LogError("Issue deserializing:" + ex);
        }
        if (prefabSet == null)
        {
            prefabSet = new PrefabSet();
            prefabSet.OnDeserialization();
            return(prefabSet);
        }
        else
        {
            return(prefabSet);
        }
    }
示例#4
0
    private int GetRandomPrefabIndex()
    {
        PrefabSet set = ActiveSet;

        if (set?.Prefabs == null || set.Prefabs.Count == 0)
        {
            return(-1);
        }

        IList <PrefabEntry> activePrefabSet = set.Prefabs;
        float selectionValue = Random.value;

        for (int index = 0; index < activePrefabSet.Count; index++)
        {
            PrefabEntry entry = activePrefabSet[index];

            if (entry.OccurrenceFactor > selectionValue)
            {
                return(index);
            }

            selectionValue -= entry.OccurrenceFactor;
        }

        return(activePrefabSet.Count - 1);
    }
示例#5
0
            internal PrefabSelectionCandidate CreateWithoutSet(PrefabSet exclude, PrefabMapping newMapping)
            {
                var sets     = FreeSets.Except(exclude);
                var mappings = new List <PrefabMapping>(Mappings)
                {
                    newMapping
                };

                return(new PrefabSelectionCandidate(sets, mappings));
            }
示例#6
0
    private GameObject GetActivePrefab(int index)
    {
        PrefabSet set = ActiveSet;

        if (index < 0 || set?.Prefabs == null || index >= set.Prefabs.Count)
        {
            return(null);
        }

        return(set.Prefabs[index].Prefab);
    }
    void init()
    {
        // Why the flag? Frequently initialization stuff has to happen in OnGui.
        if (!_initialized)
        {
            _initialized = true;

            selectedObject = new GUIStyle();
            selectedObject.normal.background = MakeTex(8, 8, new Color32(75, 96, 145, 255));
            unselectedObject = new GUIStyle();

            foldoutClosed                 = new GUIStyle(EditorStyles.foldout);
            foldoutClosed.margin          = new RectOffset();
            foldoutOpen                   = new GUIStyle(foldoutClosed);
            foldoutOpen.normal.background = foldoutOpen.onNormal.background;
            foldoutOpen.active.background = foldoutOpen.onActive.background;
            foldoutOpen.hover.background  = foldoutOpen.onHover.background;

            views = new List <ObjectView>();

            prefabSet = PopulateFromDisk();
        }
    }
示例#8
0
        void SpawnPrefabs(PrefabSet set)
        {
            Dictionary<Type, string> prefabSet = null;
            var rootName = "Undefined";
            switch (set)
            {
                case PrefabSet.Undefined:
                    Debug.LogError("Tried to spawn an undefined prefab set");
                    break;
                case PrefabSet.Player:
                    prefabSet = _playerPrefabs;
                    rootName = "Player";
                    break;
                case PrefabSet.Manager:
                    prefabSet = _managerPrefabs;
                    rootName = "Managers";
                    break;
                default:
                    throw new ArgumentOutOfRangeException("set");
            }

            var root = FindRootByName(rootName);

            foreach (var prefabToSpawn in prefabSet)
            {
                if (!ObjectOfTypeExistsInScene(prefabToSpawn.Key))
                {
                    var createdGameObject = Instantiate(Resources.Load(prefabToSpawn.Value, typeof(GameObject)), Vector3.zero, new Quaternion()) as GameObject;
                    Debug.Log("Creating: " + createdGameObject.name);
                    //Anything created by the bootstrapper should persist between scenes
                    if (createdGameObject != null)
                    {
                        createdGameObject.transform.parent = root.transform;
                        DontDestroyOnLoad(createdGameObject);
                    }
                }
            }
        }
    GameObject OffsetPrefab(PrefabSet sectionItem, GameObject obs)
    {
        Vector3 ori = obs.transform.position;
        Vector3 pos = ori;

        if (sectionItem.Origin != OriginPara.Center)
        {
            float xo = 0;
            float yo = 0;

            switch (sectionItem.Origin)
            {
            case OriginPara.NorthEast:
                xo = levelUnits / 2;
                yo = levelUnits / 2;
                break;

            case OriginPara.NorthWest:
                xo = -levelUnits / 2;
                yo = levelUnits / 2;
                break;

            case OriginPara.SouthEast:
                xo = levelUnits / 2;
                yo = -levelUnits / 2;
                break;

            case OriginPara.SouthWest:
                xo = -levelUnits / 2;
                yo = -levelUnits / 2;
                break;

            case OriginPara.RandomCorner:
                xo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                yo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                break;

            case OriginPara.Random:
                if (Lehmer.Next() > 0.5)
                {
                    xo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                    yo = levelUnits / 2 * ((Lehmer.Next() > 0.5) ? -1 : 1);
                }
                break;
            }

            float ao = (start == 1 || start == 3) ? yo : xo;
            float bo = (start == 1 || start == 3) ? xo : yo;

            switch (start)
            {
            case 1:
                ao *= -1;
                break;

            case 2:
                ao *= -1;
                bo *= -1;
                break;

            case 3:
                bo *= -1;
                break;
            }

            pos.x += ao;
            pos.z += bo;
        }

        Vector2 d = Vector2.zero;

        if (sectionItem.UseCustomPos)
        {
            d = (sectionItem.EndPos - sectionItem.StartPos);
        }
        else
        {
            d = (levelUnits * Vector2.one) - sectionItem.Size;
        }

        float x = (int)(Lehmer.Next() * d.x);
        float y = (int)(Lehmer.Next() * d.y);

        float a = (start == 1 || start == 3) ? y : x;
        float b = (start == 1 || start == 3) ? x : y;

        switch (start)
        {
        case 1:
            a *= -1;
            break;

        case 2:
            a *= -1;
            b *= -1;
            break;

        case 3:
            b *= -1;
            break;
        }

        a -= ((pos - ori).x == 0.0f) ? a : (((pos - ori).x > 0) ? (sectionItem.Size.x / 2) : -(sectionItem.Size.y / 2));
        b -= ((pos - ori).z == 0.0f) ? b : (((pos - ori).z > 0) ? (sectionItem.Size.y / 2) : -(sectionItem.Size.y / 2));

        pos.x += a;
        pos.z += b;

        if (sectionItem.Offset != OffsetPara.None)
        {
            float offset = 4.0f;
            int   dir    = 0;

            switch (sectionItem.Offset)
            {
            case OffsetPara.Closer:
                dir = 1;
                break;

            case OffsetPara.Further:
                dir = -1;
                break;

            case OffsetPara.Random:
                dir = (Lehmer.Next() > 0.5) ? -1 : 1;
                break;
            }

            switch (start)
            {
            case 0:
                pos.z -= offset * dir;
                break;

            case 1:
                pos.x += offset * dir;
                break;

            case 2:
                pos.z += offset * dir;
                break;

            case 3:
                pos.x -= offset * dir;
                break;
            }
        }

        pos.y = 0.0f;
        obs.transform.position = pos;

        if (start == 1 || start == 3)
        {
            obs.transform.rotation = Quaternion.AngleAxis(90.0f, Vector3.up);
        }

        return(obs);
    }