public Vehicle(string filename, IDriver driver) { Driver = driver; Driver.Vehicle = this; Config = new VehicleFile(filename); if (driver is PlayerDriver) { if (Config.WindscreenMaterial != "none") Config.Funks.Add(new WindscreenFunk(Config.WindscreenMaterial, this)); } _model = new VehicleModel(Config, false); Audio = new VehicleAudio(this); Chassis = new VehicleChassis(this); CActor actor2 = _model.GetActor(Path.GetFileNameWithoutExtension(_model.ModelName)); if (actor2 != null) { _deformableModel = (CDeformableModel)actor2.Model; _deformableModel._actor = Chassis.Actor; _deformableModel._carFile = Config; } _crushSection = Config.CrushSections[1]; CMaterial crashMat = ResourceCache.GetMaterial(Config.CrashMaterialFiles[0]); _vehicleBitsEmitter = new ParticleEmitter(new VehicleBitsParticleSystem(crashMat), 3, Vector3.Zero); _vehicleBitsEmitter.DumpsPerSecond = 0.7f; DamageSmokeEmitter = new ParticleEmitter(new DamageSmokeParticleSystem(Color.Gray), 5, Vector3.Zero); DamageSmokeEmitter.Enabled = false; _flames = new PixmapBillboard(new Vector2(0.7f, 0.25f), "flames.pix"); SkidMarkBuffer = new SkidMarkBuffer(this, 150); }
private void LoadModel() { try { var carfile = new VehicleFile(GameVars.BasePath + "cars\\" + _info.FileName); _model = new VehicleModel(carfile, true); } catch (Exception ex) { _loadException = "Error: " + ex.Message; } }
public VehicleModel(VehicleFile file, bool forDisplayOnly) { Config = file; if (file.DrivenWheelRefs.Count == 0 || file.NonDrivenWheelRefs.Count == 0) throw new Exception("No wheel refs specified"); foreach (string pixFileName in file.PixFiles) { PixFile pixFile = new PixFile(pixFileName); ResourceCache.Add(pixFile); } foreach (string matFileName in file.MaterialFiles) { MatFile matFile = new MatFile(matFileName); ResourceCache.Add(matFile); } foreach (string matFileName in file.CrashMaterialFiles) { MatFile matFile = new MatFile(matFileName); ResourceCache.Add(matFile); } ResourceCache.ResolveMaterials(); _grooves = new List<BaseGroove>(); foreach (BaseGroove g in file.Grooves) if (!g.IsWheelActor) _grooves.Add(g); ActFile actFile = new ActFile(file.ActorFile); _actors = actFile.Hierarchy; DatFile modelFile = new DatFile(_actors.Root.ModelName, !forDisplayOnly); ModelName = _actors.Root.ModelName; _actors.AttachModels(modelFile.Models); _actors.ResolveTransforms(!forDisplayOnly, _grooves); foreach (BaseGroove g in _grooves) g.SetActor(_actors.GetByName(g.ActorName)); // link the funks and materials foreach (BaseFunk f in file.Funks) f.Resolve(); Vector3 tireWidth = new Vector3(0.034f, 0, 0) * GameVars.Scale; foreach (int id in file.DrivenWheelRefs) { BaseGroove g = file.Grooves.Find(a => a.Id == id); if (g == null) continue; CActor actor = _actors.GetByName(g.ActorName); CWheelActor ca = new CWheelActor(actor, true, false); ca.Position = actor.Matrix.Translation + (ca.IsLeft ? -1 * tireWidth : tireWidth); file.WheelActors.Add(ca); } foreach (int id in file.NonDrivenWheelRefs) { BaseGroove g = file.Grooves.Find(a => a.Id == id); CActor actor = _actors.GetByName(g.ActorName); if (actor == null) continue; //BUSTER.TXT does some weird shit for cockpit view of the front wheels CWheelActor ca = new CWheelActor(actor, false, true); ca.Position = actor.Matrix.Translation + (ca.IsLeft ? -1 * tireWidth : tireWidth); file.WheelActors.Add(ca); } if (forDisplayOnly) _actors.RenderWheelsSeparately = false; }