Esempio n. 1
0
    // Update this to just take an apparel piece as it already contains the biped part data I think
    public void Equip(string model, ItemRecord itemData, BipedPart part)
    {
        ItemData = itemData;

        if (equipment != null)
        {
            foreach (var equipmentObject in equipment)
            {
                GameObject.Destroy(equipmentObject);
            }
        }

        // Hides body parts
        if (!isOverriden)
        {
            if (part == BipedPart.Chest)
            {
                var chest = parent.Find("Tri Chest");
                chest.gameObject.SetActive(false);
            }
            else
            {
                foreach (Transform transform in parent)
                {
                    transform.gameObject.SetActive(false);
                }
            }
        }

        var reader = BsaFileReader.LoadArchiveFileData($"meshes\\{model}");
        var niFile = new NiFile(reader);

        niFile.CreateGameObject(parent);
        equipment = niFile.CreatedObjects;
    }
Esempio n. 2
0
    private void Awake()
    {
        Camera.onPreCull += OnCameraPreCull;
        CellManager.OnFinishedLoadingCells += SwitchCell;

        // Night Sky
        //var nightNif = new Nif.NiFile(nightSkyPath);
        //var nightGo = nightNif.CreateGameObject();

        //nightCommandBuffer = new CommandBuffer();
        //var nightMeshes = nightGo.GetComponentsInChildren<MeshFilter>();
        //var nightMeshRenderers = nightGo.GetComponentsInChildren<MeshRenderer>();
        //for (var i = 0; i < nightMeshes.Length; i++)
        //{
        //	if (i > 3)
        //		continue;

        //	var material = nightMeshRenderers[i].sharedMaterial;
        //	material.shader = MaterialManager.Instance.NightSkyShader;

        //	var mesh = nightMeshes[i].sharedMesh;
        //	nightCommandBuffer.DrawMesh(mesh, Matrix4x4.identity, material);
        //}

        //Camera.main.AddCommandBuffer(CameraEvent.AfterForwardOpaque, nightCommandBuffer);
        //Destroy(nightGo);

        // Load skybox
        var reader = BsaFileReader.LoadArchiveFileData($"meshes\\{skyboxPath}");
        var nif    = new Nif.NiFile(reader);
        var go     = nif.CreateGameObject(Camera.main.transform);

        var renderer = go.GetComponentInChildren <Renderer>();

        skyboxMaterial = new Material(MaterialManager.Instance.SkyShader);
        //var skyCommandBuffer = new CommandBuffer();
        skyboxMesh = go.GetComponentInChildren <MeshFilter>().sharedMesh;
        //skyCommandBuffer.DrawMesh(skyboxMesh, Matrix4x4.TRS(new Vector3(0, -15, 0), Quaternion.identity, Vector3.one), skyboxMaterial);

        //Camera.main.AddCommandBuffer(CameraEvent.BeforeSkybox, skyCommandBuffer);
        if (!Application.isPlaying)
        {
            DestroyImmediate(go);
        }
        else
        {
            Destroy(go);
        }

        minimumTimeBetweenEnvironmentalSounds = IniManager.GetFloat("Weather", "Minimum Time Between Environmental Sounds");
        maximumTimeBetweenEnvironmentalSounds = IniManager.GetFloat("Weather", "Maximum Time Between Environmental Sounds");
    }
Esempio n. 3
0
    private void Start()
    {
        var reader = BsaFileReader.LoadArchiveFileData($"meshes\\raindrop.nif");
        var nif    = new Nif.NiFile(reader);
        var go     = nif.CreateGameObject();

        var mesh     = go.GetComponentInChildren <MeshFilter>().sharedMesh;
        var material = go.GetComponentInChildren <Renderer>().sharedMaterial;

        var particleSystemRenderer = GetComponent <ParticleSystemRenderer>();

        particleSystemRenderer.mesh     = mesh;
        particleSystemRenderer.material = material;

        Destroy(go);
    }
Esempio n. 4
0
    public override GameObject CreateGameObject(ReferenceData referenceData, Transform parent = null)
    {
        var model = this.model ?? "base_anim.nif";

        NiFile niFile;

        if (!niCache.TryGetValue(model, out niFile))
        {
            var reader = BsaFileReader.LoadArchiveFileData($"meshes\\{model}");
            niFile = new NiFile(reader);
            niCache.Add(model, niFile);
        }

        var gameObject = niFile.CreateGameObject(parent);

        if (gameObject == null)
        {
            return(null);
        }

        gameObject.name = name;

        CharacterInventory.Create(gameObject, this, referenceData);

        var equipment = gameObject.AddComponent <CharacterEquipment>();

        var animation = gameObject.AddComponent <CharacterAnimation>();

        var combat = gameObject.AddComponent <CharacterCombat>();

        var input = AddCharacterInput(gameObject);

        combat.Initialize(animation, equipment, input);
        input.Initialize(aiData, wanderData, animation, combat);

        var character = gameObject.AddComponent <CharacterMovement>();

        character.Initialize(animation, input);

        return(gameObject);
    }
Esempio n. 5
0
    public virtual GameObject CreateGameObject(ReferenceData referenceData, Transform parent = null)
    {
        // Used for lights which don't have a model
        if (string.IsNullOrEmpty(model))
        {
            return(new GameObject(name));
        }

        NiFile niFile;

        if (!niCache.TryGetValue(model, out niFile))
        {
            var reader = BsaFileReader.LoadArchiveFileData($"meshes\\{model}");
            niFile = new NiFile(reader);
            niCache.Add(model, niFile);
        }

        var gameObject = niFile.CreateGameObject(parent);

        // Why is this not being used? Problems with loading animation skeletons maybe?
        //gameObject.name = record.Id;

        if (gameObject.name.ToLower().Contains("marker"))
        {
            var transforms = gameObject.GetComponentsInChildren <Transform>();
            foreach (var transform in transforms)
            {
                transform.gameObject.tag   = "Marker";
                transform.gameObject.layer = LayerMask.NameToLayer("Hidden");
            }

            // Return because markers don't need collision meshes
            return(gameObject);
        }

        // If there is no rootcollisionnode, add a collider to evey visible mesh
        var rootCollision = gameObject.transform.Find("RootCollisionNode");

        if (rootCollision == null)
        {
            var meshFilters = gameObject.GetComponentsInChildren <MeshFilter>();
            foreach (var meshFilter in meshFilters)
            {
                switch (meshFilter.gameObject.tag)
                {
                case "Hidden":
                case "Marker":
                    meshFilter.gameObject.layer = LayerMask.NameToLayer("Hidden");
                    continue;

                case "No Collider":
                    meshFilter.gameObject.layer = LayerMask.NameToLayer("Raycast Only");
                    break;
                }

                var meshCollider = meshFilter.gameObject.AddComponent <MeshCollider>();
                meshCollider.sharedMesh = meshFilter.sharedMesh;
            }
        }
        else
        {
            // If a root collisionnode exists, set all it's children to ignore raycast, so they do not block crosshair targets, etc.
            var meshColliders = rootCollision.GetComponentsInChildren <MeshCollider>();
            foreach (var meshCollider in meshColliders)
            {
                meshCollider.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
            }

            // Also add a visible mesh collider for each mesh, but set to raycast only. This way, the rootcollisions will still only be used for collisions
            var meshFilters       = gameObject.GetComponentsInChildren <MeshFilter>();
            var meshFiltersLength = meshFilters.Length;
            for (var i = 0; i < meshFiltersLength; i++)
            {
                var meshFilter = meshFilters[i];
                switch (meshFilter.gameObject.tag)
                {
                case "Hidden":
                case "Marker":
                    meshFilter.gameObject.layer = LayerMask.NameToLayer("Hidden");
                    continue;
                }

                // Add a collider to each visible mesh. We only want this to affect raycasts
                meshFilter.gameObject.layer = LayerMask.NameToLayer("Raycast Only");
                var meshCollider = meshFilter.gameObject.AddComponent <MeshCollider>();
                meshCollider.sharedMesh = meshFilter.sharedMesh;
            }
        }

        return(gameObject);
    }
        public static GameObject Create(BodyPartRecord record, ReferenceData data, Transform parent = null)
        {
            var reader = BsaFileReader.LoadArchiveFileData($"meshes\\{record.Model}");

            return(new Nif.NiFile(reader).CreateGameObject(parent));
        }