1using System.Globalization;
65 if (projectile ==
null) {
73 loader.OnProjectileAdded(
this, ref projectile,
null);
80 if (projectile.
Owner !=
null
98 projectile.InitializeData(
105 projectile.Initialize(value, position, velocity, angularVelocity, owner);
108 catch (Exception ex) {
109 Log.
Error($
"Projectile create error: {ex}");
119 return projectile2 as T;
121 catch (Exception ex) {
122 Log.
Error($
"Projectile add error: {ex}");
134 firePosition = position;
136 Ray3 ray =
new(position + v * 5f, -v);
138 boundingBox.Min -=
new Vector3(0.4f);
139 boundingBox.Max +=
new Vector3(0.4f);
142 if (num2.Value == 0f) {
146 firePosition = position + v * (5f - num2.Value + 0.1f);
172 if (projectile ==
null) {
176 for (
int i = 0; i < blockBehaviors.Length; i++) {
183 projectile.TrailParticleSystem = particleSystem;
184 projectile.TrailOffset = offset;
192 projectile.TrailParticleSystem =
null;
203 projectile.
Draw(camera, drawOrder);
205 catch (Exception e) {
207 Log.
Error($
"Projectile draw error: {e}");
208 projectile.LogDrawError =
false;
218 if (projectile !=
null) {
227 catch (Exception ex) {
228 Log.
Error(
"Projectile update error: ");
230 projectile.ToRemove =
true;
237 item.TrailParticleSystem.IsStopped =
true;
264 string className = item.GetValue(
"Class", typeof(
Projectile).FullName);
266#pragma warning disable IL2072
268#pragma warning restore IL2072
269 if (projectile ==
null) {
280 projectile.
Load(item);
284 loader.OnProjectileAdded(
this, ref projectile, item);
290 catch (Exception ex) {
291 Log.
Error(
"Projectile Loaded Error");
299 valuesDictionary.SetValue(
"Projectiles", valuesDictionary2);
304 projectile.
Save(
this, valuesDictionary3);
305 valuesDictionary2.SetValue(num.ToString(CultureInfo.InvariantCulture), valuesDictionary3);
308 catch (Exception ex) {
309 Log.
Error($
"Projectile Save Error: {ex}");
323 [Obsolete(
"SubsystemProjectiles不再提供射弹更新,请转移到Projectile.Update()中")]
333 [Obsolete(
"SubsystemProjectiles不再提供射弹更新,请转移到Projectile.Update()中")]
346 matrix.Translation = position;
static void Error(object message)
static Type FindType(string typeName, bool skipSystemAssemblies, bool throwIfNotFound)
float ProjectileTipOffset
virtual bool IsCollidable_(int value)
Matrix ViewProjectionMatrix
virtual BoundingBox BoundingBox
ComponentBody ComponentBody
virtual void InitializeData(Func< Terrain > terrain, Func< DrawBlockEnvironmentData > drawBlockEnvironmentData, Func< float > calcVisibilityRange, Func< SubsystemSky.CalculateFogDelegate > calculateFog, Func< PrimitivesRenderer3D > primitivesRenderer)
virtual void Draw(Camera camera, int drawOrder)
virtual void Save(SubsystemProjectiles subsystemProjectiles, ValuesDictionary valuesDictionary)
override void Load(ValuesDictionary valuesDictionary)
在进入加载存档时执行
virtual void Update(float dt)
ITrailParticleSystem TrailParticleSystem
virtual void OnFiredAsProjectile(Projectile projectile)
SubsystemTerrain m_subsystemTerrain
static int[] m_drawOrders
SubsystemPickables m_subsystemPickables
SubsystemAudio m_subsystemAudio
virtual Projectile AddProjectile(int value, Vector3 position, Vector3 velocity, Vector3 angularVelocity, ComponentCreature owner)
virtual Projectile CreateProjectile(int value, Vector3 position, Vector3 velocity, Vector3 angularVelocity, ComponentCreature owner)
SubsystemParticles m_subsystemParticles
virtual void RemoveTrail(Projectile projectile)
SubsystemExplosions m_subsystemExplosions
virtual bool CanFireProjectile(int value, Vector3 position, Vector3 velocity, ComponentCreature owner, out Vector3 firePosition)
virtual bool IsWater(Vector3 position)
virtual T FireProjectile< T >(int value, Vector3 position, Vector3 velocity, Vector3 angularVelocity, ComponentCreature owner)
SubsystemBlockBehaviors m_subsystemBlockBehaviors
static void CalculateVelocityAlignMatrix(Block projectileBlock, Vector3 position, Vector3 velocity, out Matrix matrix)
DrawBlockEnvironmentData m_drawBlockEnvironmentData
SubsystemNoise m_subsystemNoise
override void Save(ValuesDictionary valuesDictionary)
virtual Action< Projectile > ProjectileRemoved
virtual Projectile FireProjectile(int value, Vector3 position, Vector3 velocity, Vector3 angularVelocity, ComponentCreature owner)
virtual void AddTrail(Projectile projectile, Vector3 offset, ITrailParticleSystem particleSystem)
SubsystemSoundMaterials m_subsystemSoundMaterials
virtual Action< Projectile > ProjectileAdded
virtual void MakeProjectileNoise(Projectile projectile)
PrimitivesRenderer3D m_primitivesRenderer
virtual void Draw(Camera camera, int drawOrder)
virtual void Update(float dt)
virtual void FireProjectileFast(Projectile projectile)
SubsystemFluidBlockBehavior m_subsystemFluidBlockBehavior
virtual T AddProjectile< T >(int value, Vector3 position, Vector3 velocity, Vector3 angularVelocity, ComponentCreature owner)
ReadOnlyList< Projectile > Projectiles
virtual bool IsMagma(Vector3 position)
List< Projectile > m_projectilesToRemove
SubsystemBodies m_subsystemBodies
override void Load(ValuesDictionary valuesDictionary)
const float BodyInflateAmount
SubsystemTime m_subsystemTime
SubsystemGameInfo m_subsystemGameInfo
virtual T CreateProjectile< T >(int value, Vector3 position, Vector3 velocity, Vector3 angularVelocity, ComponentCreature owner)
virtual Projectile AddProjectile(Projectile projectile)
SubsystemFireBlockBehavior m_subsystemFireBlockBehavior
SubsystemSky m_subsystemSky
List< Projectile > m_projectiles
static int ExtractContents(int value)
static int ToCell(float x)
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
static readonly Matrix Identity
float? Intersection(BoundingBox box)
static Vector3 Cross(Vector3 v1, Vector3 v2)
static Vector3 Normalize(Vector3 v)
static readonly Vector3 Zero
static readonly Vector3 UnitY