Пример #1
0
 public static bool IsSeat(EVCComponent type)
 {
     return
         (type == EVCComponent.cpVehicleCockpit ||
          type == EVCComponent.cpVtolCockpit ||
          type == EVCComponent.cpShipCockpit ||
          type == EVCComponent.cpSideSeat);
 }
Пример #2
0
    public static VCComponentData Create(EVCComponent type, byte[] buffer)
    {
        VCComponentData cdata = Create(type);

        if (cdata != null)
        {
            cdata.Import(buffer);
        }
        return(cdata);
    }
Пример #3
0
 T FindComponent <T>(EVCComponent evcComponent) where T : MonoBehaviour
 {
     foreach (VCComponentData cdata in m_IsoData.m_Components)
     {
         if (cdata.m_Type == evcComponent)
         {
             return(cdata.m_Entity.GetComponent <T>());
         }
     }
     return(null);
 }
Пример #4
0
    public void GetOff(Vector3 pos, EVCComponent seatType)
    {
        if (seatType != EVCComponent.cpSideSeat)
        {
            if (Driver != null && !Driver.hasOwnerAuth)
            {
                Driver._move.NetMoveTo(pos, Vector3.zero);
            }

            Driver = null;
        }
        else
        {
            GetOff(pos);
        }
    }
Пример #5
0
    public bool Import(byte[] buffer, VAOption options)
    {
        if (buffer == null)
        {
            return(false);
        }
        Reset(options);
        int min_iso_size = 48;

        if (buffer.Length < min_iso_size)
        {
            return(false);
        }

        using (MemoryStream ms_iso = new MemoryStream(buffer))
        {
            BinaryReader r = new BinaryReader(ms_iso);

            // Header
            string check_str = r.ReadString();                  // r, string
            if (check_str != "VCISO")
            {
                r.Close();
                return(false);
            }
            int l = 0;
            m_HeadInfo.Version  = r.ReadInt32();                // r, int
            m_HeadInfo.Category = (EVCCategory)(r.ReadInt32()); // r, int
            string author = "";
            if (m_HeadInfo.Version >= 0x02020000)
            {
                author = r.ReadString();
            }
            m_HeadInfo.Name = r.ReadString();                   // r, string
            m_HeadInfo.Desc = r.ReadString();                   // r, string
            string remarks = "";
            if (m_HeadInfo.Version >= 0x02020000)
            {
                remarks = r.ReadString();
            }
            m_HeadInfo.xSize = r.ReadInt32();    // r, int
            m_HeadInfo.ySize = r.ReadInt32();    // r, int
            m_HeadInfo.zSize = r.ReadInt32();    // r, int
            l = r.ReadInt32();                   // r, int
            m_HeadInfo.IconTex = r.ReadBytes(l); // r, byte[]
            //m_HeadInfo.EnsureIconTexValid();

            m_HeadInfo.Author  = "";
            m_HeadInfo.Remarks = "";
            if (m_HeadInfo.Version >= 0x02020000)
            {
                for (int c = 0; c < author.Length; ++c)
                {
                    m_HeadInfo.Author += (char)(author[c] ^ (char)(0xAC));
                }
                for (int c = 0; c < remarks.Length; ++c)
                {
                    m_HeadInfo.Remarks += (char)(remarks[c] ^ (char)(0xAC));
                }
            }

            switch (m_HeadInfo.Version)
            {
            case 0x02000000:
            case 0x02010000:
            case 0x02020000:
            case 0x02020001:
            {
                // Counts
                int mat_cnt = r.ReadInt32();                    // r, int
                int dcl_cnt = 0;
                if (m_HeadInfo.Version >= 0x02010000)
                {
                    dcl_cnt = r.ReadInt32();                    // r, int
                }
                int com_cnt = r.ReadInt32();                    // r, int
                int vxl_cnt = r.ReadInt32();                    // r, int
                int clr_cnt = r.ReadInt32();                    // r, int

                // Materials
                for (int i = 0; i < mat_cnt; ++i)
                {
                    ulong guid = r.ReadUInt64();                        // r, ulong;
                    if (guid != 0)
                    {
                        l = r.ReadInt32();                              // r, int
                        byte[] mat_buffer = r.ReadBytes(l);             // r, byte[]

                        // Option
                        // If for editor, find mats in VCEAssetMgr for the iso, or create mats in VCEAssetMgr.
                        if (m_Options.ForEditor)
                        {
                            //if ( VCEAssetMgr.s_Materials.ContainsKey(guid) )
                            //{
                            //    m_Materials[i] = VCEAssetMgr.s_Materials[guid];
                            //}
                            //else
                            //{
                            //    VAMaterial vcmat = new VAMaterial ();
                            //    vcmat.Import(mat_buffer);
                            //    VCEAssetMgr.s_TempMaterials.Add(guid, vcmat);
                            //    m_Materials[i] = vcmat;
                            //}
                        }
                        // If not for editor, these materials are belong to the iso.
                        else
                        {
                            m_Materials[i] = new VAMaterial();
                            m_Materials[i].Import(mat_buffer);
                        }
                    }
                }
                // Decals
                for (int i = 0; i < dcl_cnt; ++i)
                {
                    ulong guid = r.ReadUInt64();                        // r, ulong;
                    if (guid != 0)
                    {
                        l = r.ReadInt32();                              // r, int
                        byte[] dcl_buffer = r.ReadBytes(l);             // r, byte[]

                        // Option
                        // If for editor, find decals in VCEAssetMgr for the iso, or create decals in VCEAssetMgr.
                        if (m_Options.ForEditor)
                        {
                            if (VCEAssetMgr.s_Decals.ContainsKey(guid))
                            {
                                m_DecalAssets[i] = VCEAssetMgr.s_Decals[guid];
                            }
                            else
                            {
                                VCDecalAsset vcdcl = new VCDecalAsset();
                                vcdcl.Import(dcl_buffer);
                                VCEAssetMgr.s_TempDecals.Add(guid, vcdcl);
                                m_DecalAssets[i] = vcdcl;
                            }
                        }
                        // If not for editor, these decals are belong to the iso.
                        else
                        {
                            m_DecalAssets[i] = new VCDecalAsset();
                            m_DecalAssets[i].Import(dcl_buffer);
                        }
                    }
                }

                // Read compressed data
                //
                using (MemoryStream ms_zip = new MemoryStream())
                {
                    l = r.ReadInt32();                          // r, int
                    ms_zip.Write(r.ReadBytes(l), 0, l);         // r, byte[]	zip, byte[]

                    // Decompress data
                    //
                    using (MemoryStream ms_unzip = new MemoryStream())
                    {
                        ms_zip.Seek((long)(0), SeekOrigin.Begin);
                        IonicZlib.Decompress(ms_zip, ms_unzip);
                        ms_unzip.Seek((long)(0), SeekOrigin.Begin);
                        BinaryReader r_unzip = new BinaryReader(ms_unzip);

                        // Components
                        for (int i = 0; i < com_cnt; ++i)
                        {
                            l = r_unzip.ReadInt32();                                    // unzip, int
                            if (l > 0)
                            {
                                byte[]          com_buffer = r_unzip.ReadBytes(l);                              // unzip, byte[]
                                EVCComponent    com_type   = (EVCComponent)(r_unzip.ReadInt32());               // unzip, int
                                VCComponentData cdata      = VCComponentData.Create(com_type, com_buffer);
                                if (cdata != null)
                                {
                                    //cdata.m_CurrIso = this;
                                    m_Components.Add(cdata);
                                }
                            }
                        }

                        if (m_HeadInfo.Version >= 0x02020001)
                        {
                            ulong sig = r_unzip.ReadUInt64();
                            if (m_HeadInfo.HeadSignature != sig)
                            {
                                Debug.LogError("Check sig failed");
                                return(false);
                            }
                        }

                        // Voxels
                        for (int i = 0; i < vxl_cnt; ++i)
                        {
                            int    key = r_unzip.ReadInt32();                           // unzip, int
                            ushort val = r_unzip.ReadUInt16();                          // unzip, ushort
                            m_Voxels[key] = (VCVoxel)(val);
                        }

                        // Colors
                        for (int i = 0; i < clr_cnt; ++i)
                        {
                            int     key = r_unzip.ReadInt32();                          // unzip, int
                            Color32 val;
                            val.r = r_unzip.ReadByte();                                 // unzip, byte
                            val.g = r_unzip.ReadByte();                                 // unzip, byte
                            val.b = r_unzip.ReadByte();                                 // unzip, byte
                            val.a = r_unzip.ReadByte();                                 // unzip, byte
                            m_Colors.Add(key, val);
                        }
                        r_unzip.Close();
                    }
                }
                break;
            }

            default: return(false);
            }
            r.Close();
            return(true);
        }
    }
Пример #6
0
    public static VCComponentData Create(EVCComponent type)
    {
        // [VCCase] - How to create ComponentData with component type ?
        switch (type)
        {
        default:
        case EVCComponent.cpAbstract:
            return(null);

        case EVCComponent.cpVehicleFuelCell:
        case EVCComponent.cpVtolFuelCell:
        case EVCComponent.cpVtolRotor:
        case EVCComponent.cpHeadLight:
        case EVCComponent.cpCtrlTurret:
        case EVCComponent.cpMissileLauncher:
        case EVCComponent.cpShipPropeller:
        case EVCComponent.cpShipRudder:
        case EVCComponent.cpAirshipThruster:
        case EVCComponent.cpSubmarineBallastTank:
        case EVCComponent.cpRobotBattery:
        case EVCComponent.cpRobotController:
        case EVCComponent.cpRobotWeapon:
        case EVCComponent.cpAITurretWeapon:
            return(new VCFreePartData());

        case EVCComponent.cpSwordHilt:
        case EVCComponent.cpLgSwordHilt:
        case EVCComponent.cpBowGrip:
        case EVCComponent.cpAxeHilt:
        case EVCComponent.cpShieldHandle:
        case EVCComponent.cpGunMuzzle:
        case EVCComponent.cpVehicleCockpit:
        case EVCComponent.cpVehicleEngine:
        case EVCComponent.cpVtolCockpit:
        case EVCComponent.cpSideSeat:
        case EVCComponent.cpJetExhaust:
        case EVCComponent.cpShipCockpit:
        case EVCComponent.cpBed:
        case EVCComponent.cpHeadPivot:
        case EVCComponent.cpBodyPivot:
        case EVCComponent.cpArmAndLegPivot:
        case EVCComponent.cpHandAndFootPivot:
        case EVCComponent.cpDecorationPivot:
            return(new VCGeneralPartData());

        case EVCComponent.cpDbSwordHilt:
            return(new VCFixedHandPartData());

        case EVCComponent.cpGunHandle:
            return(new VCFixedPartData());

        case EVCComponent.cpFrontCannon:
            return(new VCAsymmetricGeneralPartData());

        case EVCComponent.cpLandingGear:
            return(new VCTriphaseFixedPartData());

        case EVCComponent.cpVehicleWheel:
            return(new VCQuadphaseFixedPartData());

        case EVCComponent.cpDecal:
            return(new VCDecalData());

        case EVCComponent.cpLight:
            return(new VCObjectLightData());

        case EVCComponent.cpPivot:
            return(new VCObjectPivotData());
        }
    }