Exemplo 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;
    }
Exemplo n.º 2
0
    protected void CreateSprite(string fileName)
    {
        var texture = BsaFileReader.LoadTexture("icons/" + fileName) as Texture2D;
        var rect    = new Rect(0, 0, texture.width, texture.height);
        var pivot   = new Vector2(0.5f, 0.5f);

        this.icon = Sprite.Create(texture, rect, pivot);
    }
Exemplo n.º 3
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");
    }
Exemplo n.º 4
0
        public Texture LoadTexture()
        {
            var     path = "textures\\" + FileName;
            Texture texture;

            if (!textureCache.TryGetValue(path, out texture))
            {
                texture = BsaFileReader.LoadTexture(path);
                textureCache.Add(path, texture);
            }

            return(texture);
        }
Exemplo n.º 5
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);
    }
        public static Texture2D GetTexture(int index)
        {
            if (index - 1 < 0)
            {
                index = records.Count - 1;
            }
            else
            {
                index -= 1;
            }

            var record          = records[index];
            var textureFilePath = record.texture;

            return(BsaFileReader.LoadTexture("textures\\" + textureFilePath) as Texture2D);
        }
Exemplo n.º 7
0
    private void OnEnable()
    {
        if (!Application.isPlaying && !string.IsNullOrEmpty(path))
        {
            var texture = BsaFileReader.LoadTexture("textures\\" + path) as Texture2D;

            if (texture == null)
            {
                return;
            }

            var image = GetComponent <Image>();
            sprite       = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);
            image.sprite = sprite;
        }
    }
Exemplo n.º 8
0
    private void Start()
    {
        if (!Application.isPlaying)
        {
            return;
        }

        gameObject.name = path;

        var texture = BsaFileReader.LoadTexture("textures\\" + path) as Texture2D;

        var image  = GetComponent <Image>();
        var sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);

        image.sprite = sprite;

        Destroy(this);
    }
Exemplo n.º 9
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);
    }
Exemplo n.º 10
0
    public void Create(WeatherType weatherType, Material material)
    {
        var section = $"Weather {weatherType}";

        // Create the gradients
        skyGradient     = GetGradient(section, "Sky");
        fogGradient     = GetGradient(section, "Fog");
        ambientGradient = GetGradient(section, "Ambient");
        sunGradient     = GetGradient(section, "Sun");

        // Sky needs alpha keys for fading to night sky too
        skyGradient.alphaKeys = new GradientAlphaKey[]
        {
            new GradientAlphaKey(1, 19f / 24f),
            new GradientAlphaKey(0, 21f / 24f),
            new GradientAlphaKey(0, 4f / 24f),
            new GradientAlphaKey(1, 6f / 24f)
        };

        // Based on the following settings, plus sunrise/sunset times
        //Stars Post - Sunset Start = 1
        //Stars Pre-Sunrise Finish = 2
        //Stars Fading Duration = 2

        // Initializing some settings
        cloudTexture         = BsaFileReader.LoadTexture("textures/" + IniManager.GetString(section, "Cloud Texture")) as Texture2D;
        material.mainTexture = cloudTexture;

        RenderSettings.sun.transform.eulerAngles = new Vector3(90, 270, 0);
        RenderSettings.sun.shadows = LightShadows.Soft;

        RenderSettings.ambientMode = AmbientMode.Flat;

        RenderSettings.fog     = true;
        RenderSettings.fogMode = FogMode.Linear;

        RenderSettings.fogEndDistance   = Camera.main.farClipPlane;
        RenderSettings.fogStartDistance = RenderSettings.fogEndDistance * (1 - IniManager.GetFloat(section, $"Land Fog Day Depth"));
    }
Exemplo n.º 11
0
    private void Start()
    {
        gameObject.name = path;
        var texture = BsaFileReader.LoadTexture(path) as Texture2D;
        var image   = GetComponent <Image>();
        var sprite  = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);

        image.sprite = sprite;

        var button      = GetComponent <Button>();
        var overTexture = BsaFileReader.LoadTexture(overPath) as Texture2D;
        var overSprite  = Sprite.Create(overTexture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);

        var pressedTexture = BsaFileReader.LoadTexture(pressedPath) as Texture2D;
        var pressedSprite  = Sprite.Create(pressedTexture, new Rect(0, 0, texture.width, texture.height), Vector2.zero);

        var spriteState = button.spriteState;

        spriteState.highlightedSprite = overSprite;
        spriteState.pressedSprite     = pressedSprite;

        button.spriteState = spriteState;
    }
Exemplo n.º 12
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);
    }
Exemplo n.º 13
0
        //public static MagicEffectRecord GetMagicEffectRecord(MagicEffectType key)
        //{
        //	MagicEffectRecord record;
        //	if (Records.TryGetValue(key, out record))
        //	{
        //		return record;
        //	}

        //	RecordHeader header;
        //	if (!Record.MagicEffectOffsets.TryGetValue(key, out header))
        //	{
        //		throw new KeyNotFoundException(key.ToString());
        //	}

        //	var previousPosition = EsmFileReader.reader.Position;
        //	EsmFileReader.reader.Position = header.DataOffset;
        //	var dataEndPos = header.DataOffset + header.DataSize;
        //	var data = CreateInstance<MagicEffectRecord>();
        //	(data as IRecordData).Initialize(EsmFileReader.reader, header);
        //	EsmFileReader.reader.Position = previousPosition;
        //	return data;
        //}

        public override void Initialize(System.IO.BinaryReader reader, RecordHeader header)
        {
            while (reader.BaseStream.Position < header.DataEndPos)
            {
                var type = (SubRecordType)reader.ReadInt32();
                var size = reader.ReadInt32();

                switch (type)
                {
                case SubRecordType.Index:
                    index = (MagicEffectType)reader.ReadInt32();
                    name  = index.ToString();
                    break;

                case SubRecordType.MagicEffectData:
                    magicEffectData = new MagicEffectData(reader);
                    break;

                case SubRecordType.ItemTexture:
                {
                    var texture = BsaFileReader.LoadTexture("icons/" + reader.ReadString(size)) as Texture2D;
                    var rect    = new Rect(0, 0, texture.width, texture.height);
                    var pivot   = new Vector2(0.5f, 0.5f);
                    itemTexture = Sprite.Create(texture, rect, pivot);
                    break;
                }

                case SubRecordType.ParticleTexture:
                {
                    var texture = BsaFileReader.LoadTexture("textures/" + reader.ReadString(size)) as Texture2D;
                    var rect    = new Rect(0, 0, texture.width, texture.height);
                    var pivot   = new Vector2(0.5f, 0.5f);
                    particleTexture = Sprite.Create(texture, rect, pivot);
                    break;
                }

                case SubRecordType.MagicCastVisual:
                    castVisual = reader.ReadString(size);
                    break;

                case SubRecordType.MagicBoltVisual:
                    boltVisual = reader.ReadString(size);
                    break;

                case SubRecordType.MagicHitVisual:
                    hitVisual = reader.ReadString(size);
                    break;

                case SubRecordType.MagicAreaVisual:
                    areaVisual = reader.ReadString(size);
                    break;

                case SubRecordType.Description:
                    description = reader.ReadString(size);
                    break;

                case SubRecordType.MagicCastSound:
                    castSound = reader.ReadString(size);
                    break;

                case SubRecordType.MagicBoltsound:
                    boltSound = reader.ReadString(size);
                    break;

                case SubRecordType.MagicHitSound:
                    hitSound = reader.ReadString(size);
                    break;

                case SubRecordType.MagicAreaSound:
                    areaSound = reader.ReadString(size);
                    break;
                }
            }

            records.Add(index, this);
        }
Exemplo n.º 14
0
    private void Awake()
    {
        textures = new Texture2D[32];
        for (var i = 0; i < textures.Length; i++)
        {
            var path    = $"textures/water/water{i:00}.dds";
            var texture = BsaFileReader.LoadTexture(path);
            textures[i] = texture as Texture2D;
        }


        CellManager.OnFinishedLoadingCells += SetupWater;

        //Camera.main.depthTextureMode = DepthTextureMode.Depth;
        //Shader.EnableKeyword("DEPTH_TEXTURE_ENABLED");

        meshFilter   = GetComponent <MeshFilter>();
        meshRenderer = GetComponent <MeshRenderer>();

        var vertices  = new Vector3[resolution * resolution];
        var texcoords = new Vector2[resolution * resolution];
        var indices   = new int[resolution * resolution * 6];

        for (int x = 0; x < resolution; x++)
        {
            for (int y = 0; y < resolution; y++)
            {
                Vector2 uv = new Vector3(x / (resolution - 1.0f), y / (resolution - 1.0f));

                texcoords[x + y * resolution] = uv;
                vertices[x + y * resolution]  = new Vector3(uv.x, uv.y, 0.0f);
            }
        }

        int num = 0;

        for (int x = 0; x < resolution - 1; x++)
        {
            for (int y = 0; y < resolution - 1; y++)
            {
                indices[num++] = x + y * resolution;
                indices[num++] = x + (y + 1) * resolution;
                indices[num++] = (x + 1) + y * resolution;

                indices[num++] = x + (y + 1) * resolution;
                indices[num++] = (x + 1) + (y + 1) * resolution;
                indices[num++] = (x + 1) + y * resolution;
            }
        }

        var bigNumber = 1e6f;
        var mesh      = new Mesh()
        {
            vertices  = vertices,
            uv        = texcoords,
            triangles = indices
        };

        mesh.bounds = new Bounds(Vector3.zero, new Vector3(bigNumber, 20.0f, bigNumber));
        mesh.MarkDynamic();
        meshFilter.sharedMesh = mesh;
    }
Exemplo n.º 15
0
        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));
        }