Пример #1
0
 public ModelInstance(ModelSpawn spawn, WorldModel model) : base(spawn)
 {
     iModel    = model;
     iInvRot   = Matrix3.fromEulerAnglesZYX(MathF.PI * iRot.Y / 180.0f, MathF.PI * iRot.X / 180.0f, MathF.PI * iRot.Z / 180.0f).inverse();
     iInvScale = 1.0f / iScale;
 }
Пример #2
0
 public void SetModel(WorldModel model)
 {
     _model = model;
 }
Пример #3
0
        public bool LoadMapTile(uint tileX, uint tileY, VMapManager2 vm)
        {
            if (_treeValues == null)
            {
                Console.WriteLine("StaticMapTree.LoadMapTile() : tree has not been initialized [{tileX}, {tileY}]");
                return(false);
            }

            string tilefile = _basePath + GetTileFileName(_mapId, tileX, tileY);

            if (File.Exists(tilefile))
            {
                using BinaryReader binaryReader = new(File.Open(tilefile, FileMode.Open, FileAccess.Read, FileShare.Read));
                if (binaryReader.ReadStringFromChars(8) != SharedConst.VMAP_MAGIC)
                {
                    return(false);
                }

                uint numSpawns = binaryReader.ReadUInt32();
                for (uint i = 0; i < numSpawns; ++i)
                {
                    // read model spawns
                    var result = ModelSpawn.ReadFromFile(binaryReader, out ModelSpawn spawn);
                    if (result)
                    {
                        // acquire model instance
                        WorldModel model = vm.AcquireModelInstance(_basePath, spawn.name);
                        if (model == null)
                        {
                            Console.WriteLine($"StaticMapTree.LoadMapTile() : could not acquire WorldModel pointer [{tileX}, {tileY}]");
                        }

                        // update tree
                        if (_spawnIndices.ContainsKey(spawn.ID))
                        {
                            uint referencedVal = _spawnIndices[spawn.ID];
                            if (!_loadedSpawns.ContainsKey(referencedVal))
                            {
                                if (referencedVal > _nTreeValues)
                                {
                                    Console.WriteLine($"StaticMapTree.LoadMapTile() : invalid tree element ({referencedVal}/{_nTreeValues}) referenced in tile {tilefile}");
                                    continue;
                                }

                                _treeValues[referencedVal]   = new ModelInstance(spawn, model);
                                _loadedSpawns[referencedVal] = 1;
                            }
                            else
                            {
                                ++_loadedSpawns[referencedVal];
                            }
                        }
                    }
                }
                _loadedTiles[PackTileID(tileX, tileY)] = true;
            }
            else
            {
                _loadedTiles[PackTileID(tileX, tileY)] = false;
            }

            //TC_METRIC_EVENT("map_events", "LoadMapTile", "Map: " + std::to_string(iMapID) + " TileX: " + std::to_string(tileX) + " TileY: " + std::to_string(tileY));
            return(true);
        }