// 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; }
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); }
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"); }
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); }
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); }
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; } }
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); }
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); }
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")); }
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; }
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 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); }
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; }
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)); }