void QuerySelectedMatter() { m_SelectedMatter = null; foreach (KeyValuePair <int, VCMatterInfo> kvp in VCConfig.s_Matters) { if (m_MatterUI.selection.ToLower() == kvp.Value.Name.ToLower()) { m_SelectedMatter = kvp.Value; break; } } }
private static void LoadMatters() { s_Matters = new Dictionary <int, VCMatterInfo> (); #if PLANET_EXPLORERS SqliteDataReader reader = LocalDatabase.Instance.ExecuteQuery("SELECT * FROM vc_material ORDER BY cast(sort as int) ASC"); while (reader.Read()) { VCMatterInfo matter = new VCMatterInfo(); matter.ItemIndex = Convert.ToInt32(reader.GetString(reader.GetOrdinal("id"))); matter.Order = Convert.ToInt32(reader.GetString(reader.GetOrdinal("sort"))); matter.ItemId = Convert.ToInt32(reader.GetString(reader.GetOrdinal("itemid"))); // matter.Name = reader.GetString(reader.GetOrdinal("englishname")); matter.Attack = Convert.ToSingle(reader.GetString(reader.GetOrdinal("attack"))); matter.Defence = Convert.ToSingle(reader.GetString(reader.GetOrdinal("defence"))); matter.Durability = Convert.ToSingle(reader.GetString(reader.GetOrdinal("durability"))); matter.Hp = Convert.ToSingle(reader.GetString(reader.GetOrdinal("hp"))); matter.SellPrice = Convert.ToSingle(reader.GetString(reader.GetOrdinal("value"))); matter.Density = Convert.ToSingle(reader.GetString(reader.GetOrdinal("density"))); matter.Elasticity = Convert.ToSingle(reader.GetString(reader.GetOrdinal("elasticity"))); matter.DefaultBumpStrength = Convert.ToSingle(reader.GetString(reader.GetOrdinal("bumpstrength"))); matter.DefaultSpecularStrength = Convert.ToSingle(reader.GetString(reader.GetOrdinal("specularstrength"))); matter.DefaultSpecularPower = Convert.ToSingle(reader.GetString(reader.GetOrdinal("specularpower"))); matter.DefaultTile = Convert.ToSingle(reader.GetString(reader.GetOrdinal("tile"))); matter.DefaultDiffuseRes = reader.GetString(reader.GetOrdinal("diffusemap")); matter.DefaultBumpRes = reader.GetString(reader.GetOrdinal("bumpmap")); List <string> parts = null; parts = VCUtils.ExplodeString(reader.GetString(reader.GetOrdinal("specularcolor")), ';'); matter.DefaultSpecularColor.r = (byte)(Convert.ToInt32(parts[0])); matter.DefaultSpecularColor.g = (byte)(Convert.ToInt32(parts[1])); matter.DefaultSpecularColor.b = (byte)(Convert.ToInt32(parts[2])); matter.DefaultSpecularColor.a = (byte)(255); parts.Clear(); parts = VCUtils.ExplodeString(reader.GetString(reader.GetOrdinal("emissivecolor")), ';'); matter.DefaultEmissiveColor.r = (byte)(Convert.ToInt32(parts[0])); matter.DefaultEmissiveColor.g = (byte)(Convert.ToInt32(parts[1])); matter.DefaultEmissiveColor.b = (byte)(Convert.ToInt32(parts[2])); matter.DefaultEmissiveColor.a = (byte)(255); parts.Clear(); s_Matters.Add(matter.ItemIndex, matter); } #endif }
// Send some default materials if user's material count is 0 private static void SendDefaultMaterials() { foreach (KeyValuePair <int, VCMatterInfo> kvp in VCConfig.s_Matters) { VCMatterInfo matter = kvp.Value; VCMaterial vcmat = new VCMaterial(); vcmat.m_Name = "Default".ToLocalizationString() + " " + matter.Name; vcmat.m_MatterId = matter.ItemIndex; vcmat.m_UseDefault = true; try { byte[] buffer = vcmat.Export(); ulong guid = CRC64.Compute(buffer); string sguid = guid.ToString("X").PadLeft(16, '0'); FileStream fs = new FileStream(VCConfig.s_MaterialPath + sguid + VCConfig.s_MaterialFileExt, FileMode.Create, FileAccess.ReadWrite); fs.Write(buffer, 0, buffer.Length); fs.Close(); vcmat.Import(buffer); } catch (Exception e) { vcmat.Destroy(); Debug.LogError("Save material [" + vcmat.m_Name + "] failed ! \r\n" + e.ToString()); continue; } if (s_Materials.ContainsKey(vcmat.m_Guid)) { s_Materials[vcmat.m_Guid].Destroy(); s_Materials[vcmat.m_Guid] = vcmat; } else { s_Materials.Add(vcmat.m_Guid, vcmat); } } }
// I/O // From byte buffer public void Import(byte[] buffer) { // Generate a ulong GUID m_Guid = CRC64.Compute(buffer); // Read the buffer using (MemoryStream ms = new MemoryStream(buffer)) { BinaryReader r = new BinaryReader(ms); // Read version int version = r.ReadInt32(); // Version control switch (version) { case 0x1000: { // Read name & game mat item index m_Name = r.ReadString(); m_MatterId = r.ReadInt32(); // Find mat item config VCMatterInfo mc = null; if (VCConfig.s_Matters != null && VCConfig.s_Matters.ContainsKey(m_MatterId)) { mc = VCConfig.s_Matters[m_MatterId]; } else { Debug.LogError("VCConfig.s_Matters was corrupt."); break; } // Fetch item id m_ItemId = mc.ItemId; m_UseDefault = r.ReadBoolean(); // Use default set if (m_UseDefault) { // Load properties m_BumpStrength = mc.DefaultBumpStrength; m_SpecularColor = mc.DefaultSpecularColor; m_SpecularStrength = mc.DefaultSpecularStrength; m_SpecularPower = mc.DefaultSpecularPower; m_EmissiveColor = mc.DefaultEmissiveColor; m_Tile = mc.DefaultTile; // Load texure from resource UnityEngine.Object temp = null; temp = Resources.Load(mc.DefaultDiffuseRes); if (temp != null) { m_DiffuseTex = Texture2D.Instantiate(temp) as Texture2D; } if (m_DiffuseTex == null) { m_DiffuseTex = new Texture2D(4, 4, TextureFormat.ARGB32, false); } m_DiffuseData = m_DiffuseTex.EncodeToPNG(); temp = Resources.Load(mc.DefaultBumpRes); if (temp != null) { m_BumpTex = Texture2D.Instantiate(temp) as Texture2D; } if (m_BumpTex == null) { m_BumpTex = new Texture2D(4, 4, TextureFormat.ARGB32, false); } m_BumpData = m_BumpTex.EncodeToPNG(); } // User customize else { // Load properties m_BumpStrength = r.ReadSingle(); m_SpecularColor.r = r.ReadByte(); m_SpecularColor.g = r.ReadByte(); m_SpecularColor.b = r.ReadByte(); m_SpecularColor.a = r.ReadByte(); m_SpecularStrength = r.ReadSingle(); m_SpecularPower = r.ReadSingle(); m_EmissiveColor.r = r.ReadByte(); m_EmissiveColor.g = r.ReadByte(); m_EmissiveColor.b = r.ReadByte(); m_EmissiveColor.a = r.ReadByte(); // Load texture data and create texture from the data, // then resize to TEX_RESOLUTION and update the byte data m_Tile = r.ReadSingle(); int l = 0; l = r.ReadInt32(); m_DiffuseData = r.ReadBytes(l); m_DiffuseTex = new Texture2D(2, 2, TextureFormat.ARGB32, false); m_DiffuseTex.LoadImage(m_DiffuseData); m_DiffuseData = m_DiffuseTex.EncodeToPNG(); l = r.ReadInt32(); m_BumpData = r.ReadBytes(l); m_BumpTex = new Texture2D(2, 2, TextureFormat.ARGB32, false); m_BumpTex.LoadImage(m_BumpData); m_BumpData = m_BumpTex.EncodeToPNG(); } break; } default: break; } r.Close(); ms.Close(); } }