public void Init(IAbsorbingEntity owner, AbsorberTraitData data, KrbGameEvents.AbsorptionEvents absorbEvents) { _data = data; _activeAbsorptionData = _data.NoAbsorption; _owner = owner; _absorbEvents = absorbEvents; }
protected override void DoInit(BaseEntityDependencies deps) { base.DoInit(deps); _absorbEvents = ((KrbGameEvents)deps.GameEvents).Absorption; _healthEvents = deps.GameEvents.Health; _healthEvents.HealthEvent += OnHealthEvent; _krbMonsterData = (KrbMonsterData)_monsterData; _absorptionData = _krbMonsterData.AbsorptionData; }
public void ResetAbsorption(bool manual) { _owner.FinishAbsorption(); _elapsed = -1.0f; _activeAbsorptionData = _data.NoAbsorption; if (manual) { _absorbEvents.SendAbsorptionCancelled(_owner); } else { _absorbEvents.SendAbsorptionExpired(_owner); } }
public bool TryAbsorb(IAbsorbableEntity target) { if (target.AbsorptionData == null || target.AbsorptionData == _data.NoAbsorption) { _absorbEvents.SendAbsorbFailed(_owner, false); return(false); } if (!IsAbsorbing && target.CanBeAbsorbedBy(_owner)) { _activeAbsorptionData = target.AbsorptionData; _owner.StartAbsorption(target); target.BeAbsorbed(_owner); _elapsed = 0.0f; _absorbEvents.SendAbsorptionHappened(target, _owner, _owner.Attributes); return(true); } if (IsAbsorbing) { _absorbEvents.SendAbsorbFailed(_owner, true); } return(false); }
public RhCommon_Scene(List <Rhino.DocObjects.RhinoObject> ObjRef, double Temp, double hr, double Pa, int Air_Choice, bool EdgeCorrection, bool IsAcoustic) : base(Temp, hr, Pa, Air_Choice, EdgeCorrection, IsAcoustic) { Vector3d NormalHolder = new Vector3d(); Plane PlaneHolder = new Plane(); Transform XHolder = new Transform(); Random RND = new Random(); ObjectList = new List <Rhino.DocObjects.ObjRef>(); for (int q = 0; q < ObjRef.Count; q++) { ObjectList.Add(new Rhino.DocObjects.ObjRef(ObjRef[q])); Rhino.Geometry.Brep BObj; if (ObjRef[q].ObjectType == Rhino.DocObjects.ObjectType.Brep) { BObj = ((Rhino.DocObjects.BrepObject)ObjRef[q]).BrepGeometry; } else { BObj = ((Rhino.DocObjects.ExtrusionObject)ObjRef[q]).ExtrusionGeometry.ToBrep(); } for (int j = 0; j < BObj.Faces.Count; j++) { Brep B_Temp = BObj.DuplicateSubBrep(new List <int>() { j }); BrepList.Add(B_Temp); string Mode = null; string AcousticsData = null; double[] Absorption = new double[8]; //double[,] Scattering = new double[8, 3]; //double[] Reflection = new double[8]; double[] phase = new double[8]; double[] Transparency = new double[8]; double[] Transmission = new double[8]; Mode = BObj.GetUserString("Acoustics_User"); double[] Scat = new double[8]; for (int oct = 0; oct < 8; oct++) { phase[oct] = 0; } if (Mode == "yes") { AcousticsData = BObj.GetUserString("Acoustics"); if (AcousticsData != "") { UI.PachydermAc_PlugIn.DecodeAcoustics(AcousticsData, ref Absorption, ref Scat, ref Transparency); } else { if (!Custom_Method) { Status = System.Windows.Forms.MessageBox.Show("A material is not specified correctly. Please assign absorption and scattering to all layers in the model.", "Materials Error", System.Windows.Forms.MessageBoxButtons.OK); Complete = false; return; } } } else { Rhino.DocObjects.Layer layer = Rhino.RhinoDoc.ActiveDoc.Layers[ObjRef[q].Attributes.LayerIndex]; string Method = layer.GetUserString("ABSType"); AcousticsData = layer.GetUserString("Acoustics"); if (Method == "Buildup") { List <AbsorptionModels.ABS_Layer> Layers = new List <AbsorptionModels.ABS_Layer>(); string[] Buildup = layer.GetUserString("Buildup").Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); foreach (string l in Buildup) { Layers.Add(AbsorptionModels.ABS_Layer.LayerFromCode(l)); } AbsorptionData.Add(new Smart_Material(false, Layers, 44100, Env_Prop.Rho(0), Env_Prop.Sound_Speed(0), 2)); } if (!string.IsNullOrEmpty(AcousticsData)) { UI.PachydermAc_PlugIn.DecodeAcoustics(AcousticsData, ref Absorption, ref Scat, ref Transparency); AbsorptionData.Add(new Basic_Material(Absorption, phase)); } else { if (!Custom_Method) { Status = System.Windows.Forms.MessageBox.Show("A material is not specified correctly. Please assign absorption and scattering to all layers in the model.", "Materials Error", System.Windows.Forms.MessageBoxButtons.OK); Complete = false; return; } } } for (int oct = 0; oct < 8; oct++) { //Reflection[oct] = (1 - Absorption[oct]); Transmission[oct] = Transparency[oct]; //Scattering[oct, 1] = Scat[oct]; //phase[oct] = 0; } //ReflectionData.Add(Reflection); ScatteringData.Add(new Lambert_Scattering(Scat, SplitRatio)); TransmissionData.Add(Transmission); //PhaseData.Add(phase); bool Trans = false; for (int t_oct = 0; t_oct < 8; t_oct++) { if (Transmission[t_oct] > 0) { Trans = true; break; } } Transmissive.Add(Trans); PlaneBoolean.Add(BObj.Faces[j].IsPlanar()); if (PlaneBoolean[PlaneBoolean.Count - 1]) { Vector3d Normal = new Vector3d(); Point3d Origin = new Point3d(); //Transform MirrorSingle = new Transform(); //Plane PlaneSingle = new Plane(); Origin = BObj.Faces[j].PointAt(0, 0); Normal = BObj.Faces[j].NormalAt(RND.NextDouble(), RND.NextDouble()); Mirror.Add(Transform.Mirror(Origin, Normal)); Plane.Add(new Plane(Origin, Normal)); PlanarNormal.Add(Normal); } else { PlanarNormal.Add(NormalHolder); Plane.Add(PlaneHolder); Mirror.Add(XHolder); } } } Valid = true; }
public RhCommon_Scene(List <Rhino.Geometry.Brep> ObjRef, double Temp, double hr, double Pa, int Air_Choice, bool EdgeCorrection, bool IsAcoustic) : base(Temp, hr, Pa, Air_Choice, EdgeCorrection, IsAcoustic) { Vector3d NormalHolder = new Vector3d(); Plane PlaneHolder = new Plane(); Transform XHolder = new Transform(); Random RND = new Random(); for (int q = 0; q < ObjRef.Count; q++) { //ObjectList.Add(new Rhino.DocObjects.ObjRef(ObjRef[q])); //Rhino.Geometry.Brep BObj; //if (ObjRef[q].ObjectType == Rhino.DocObjects.ObjectType.Brep) //{ // BObj = ((Rhino.DocObjects.BrepObject)ObjRef[q]).BrepGeometry; //} //else //{ // BObj = ((Rhino.DocObjects.ExtrusionObject)ObjRef[q]).ExtrusionGeometry.ToBrep(); //} for (int j = 0; j < ObjRef[q].Faces.Count; j++) { Brep B_Temp = ObjRef[q].DuplicateSubBrep(new List <int>() { j }); BrepList.Add(B_Temp); string Mode = null; double[] Absorption = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; double[,] Scattering = new double[8, 3] { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } }; // double[] Reflection = new double[8]{0, 0, 0, 0, 0, 0, 0, 0}; double[] Transparency = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; double[] Transmission = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; Mode = ObjRef[q].GetUserString("Acoustics_User"); double[] Scat = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; double[] phase = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; //ReflectionData.Add(Reflection); AbsorptionData.Add(new Basic_Material(Absorption, phase)); ScatteringData.Add(new Lambert_Scattering(Scat, SplitRatio)); TransmissionData.Add(Transmission); //PhaseData.Add(phase); Transmissive.Add(false); PlaneBoolean.Add(ObjRef[q].Faces[j].IsPlanar()); if (PlaneBoolean[PlaneBoolean.Count - 1]) { Vector3d Normal = new Vector3d(); Point3d Origin = new Point3d(); //Transform MirrorSingle = new Transform(); //Plane PlaneSingle = new Plane(); Origin = ObjRef[q].Faces[j].PointAt(0, 0); Normal = ObjRef[q].Faces[j].NormalAt(RND.NextDouble(), RND.NextDouble()); Mirror.Add(Transform.Mirror(Origin, Normal)); Plane.Add(new Plane(Origin, Normal)); PlanarNormal.Add(Normal); } else { PlanarNormal.Add(NormalHolder); Plane.Add(PlaneHolder); Mirror.Add(XHolder); } } } //SurfaceArray = SurfaceList.ToArray(); Valid = true; }