private void Awake() { rb = GetComponent <Rigidbody2D>(); magData = Resources.Load <MagnetData>("ScriptableObjects/MagnetData"); Assert.IsNotNull(transform.Find("Magnet"), "Magnet not attached"); mag = transform.Find("Magnet").GetComponent <Magnetizable>(); StartCoroutine(BecomeInvincibleForSeconds(2f)); }
public void setData(MagnetData e) { bInitialized = false; data = e; getModifiedData(); updateEnableStates(); bInitialized = true; }
//释放对象,清理内存 public void Clear() { _dash = null; _double = null; _magnet = null; _protect = null; _superMan = null; _startDash = null; _deadDash = null; _colliction = null; }
// Grabs MagnetData (ScriptableObject) and parents RigidBody2D (Required) private void Awake() { magnetData = Resources.Load <MagnetData>("ScriptableObjects/MagnetData"); magnetData.nonMagnetizedList.Add(this); rigidBody = transform.parent.GetComponent <Rigidbody2D>(); Assert.IsNotNull(rigidBody, "No RigidBody2D component was found on parent object."); Assert.IsTrue(gameObject.transform.childCount > 0); posMag = gameObject.transform.GetChild(0); if (gameObject.transform.childCount > 1) // Player has no negative magnet { negMag = gameObject.transform.GetChild(1); } }
private void addMagnetNodeToTree(int emitterIndex, int magnetIndex) { if (emitterIndex < 0 || emitterIndex >= mEffect.Emitters.Count) { return; } if (magnetIndex < 0 || magnetIndex >= mEffect.Emitters[emitterIndex].Magnets.Count) { return; } ParticleEmitter emitter = mEffect.Emitters[emitterIndex]; MagnetData magnet = mEffect.Emitters[emitterIndex].Magnets[magnetIndex]; TreeNode rootNode = treeView1.Nodes[0]; TreeNode emitterNode = rootNode.Nodes[emitterIndex]; addNode(emitterNode, magnet.Name, ParticleEditorPageEnum.eMagnet, 11); emitterNode.Expand(); }
void PasteOnSelectedMagnet() { TreeNode node = treeView1.SelectedNode; if (node == null) { return; } if ((ParticleEditorPageEnum)node.Tag != ParticleEditorPageEnum.eMagnet) { return; } if ((ParticleEditorPageEnum)node.Parent.Tag != ParticleEditorPageEnum.eEmitter) { return; } int emitterIndex = node.Parent.Index; if (emitterIndex < 0 || emitterIndex >= mEffect.Emitters.Count) { return; } int magnetIndex = node.Index - (int)ParticleEditorPageEnum.eEmitterPropertyTotal; if (magnetIndex < 0 || magnetIndex >= mEffect.Emitters[emitterIndex].Magnets.Count) { return; } MagnetData copiedNode = s_MagnetCopy.clone(); //copiedNode.Name += "_Copy"; mEffect.Emitters[emitterIndex].addMagnetAt(magnetIndex, copiedNode); }
void CopySelectedMagnet() { TreeNode node = treeView1.SelectedNode; if (node == null) { return; } if ((ParticleEditorPageEnum)node.Tag != ParticleEditorPageEnum.eMagnet) { return; } if ((ParticleEditorPageEnum)node.Parent.Tag != ParticleEditorPageEnum.eEmitter) { return; } int emitterIndex = node.Parent.Index; if (emitterIndex < 0 || emitterIndex >= mEffect.Emitters.Count) { return; } int magnetIndex = node.Index - (int)ParticleEditorPageEnum.eEmitterPropertyTotal; if (magnetIndex < 0 || magnetIndex >= mEffect.Emitters[emitterIndex].Magnets.Count) { return; } // clear copy s_MagnetCopy = null; s_MagnetCopy = mEffect.Emitters[emitterIndex].Magnets[magnetIndex].clone(); }
void EnumerateMagnets() { numMagnets = 0; if (Parent == null) { return; } foreach (Node node in Parent.Nodes) { ParticlesMagnet magnet = node as ParticlesMagnet; if (magnet != null) { if (numMagnets >= MaxMagnets) { break; } Matrix32 transform = magnet.CalcLocalToParentTransform(); Widget basicWidget = GetBasicWidget(); if (basicWidget != null) { for (Node n = Parent; n != basicWidget; n = n.Parent) { if (n.AsWidget != null) { transform *= n.AsWidget.CalcLocalToParentTransform(); } } } magnets[numMagnets++] = new MagnetData { Magnet = magnet, PrecalcTransitionMatrix = transform.CalcInversed(), PrecalcInvTransitionMatrix = transform }; } } }
void ApplyMagnetToParticle(Particle p, MagnetData magnetData, float delta) { ParticlesMagnet magnet = magnetData.Magnet; Vector2 targetPosition = p.RegularPosition; targetPosition = magnetData.PrecalcTransitionMatrix.TransformVector(targetPosition); switch (magnet.Shape) { case EmitterShape.Area: // Looking for point of magnet's edge, in the direction of particle is moving. if (targetPosition.X > 0 && targetPosition.X < magnet.Size.X && targetPosition.X > 0 && targetPosition.Y < magnet.Size.Y) { // Particle is got inside magnet, move it outside. float d0 = targetPosition.X; float d1 = targetPosition.Y; float d2 = magnet.Size.X - targetPosition.X; float d3 = magnet.Size.Y - targetPosition.Y; if (d0 < d1 && d0 < d2 && d0 < d3) { targetPosition.X = 0; } else if (d1 < d0 && d1 < d2 && d1 < d3) { targetPosition.Y = 0; } else if (d2 < d0 && d2 < d1 && d2 < d3) { targetPosition.X = magnet.Size.X; } else { targetPosition.Y = magnet.Size.Y; } } else { targetPosition.X = Mathf.Clamp(targetPosition.X, 0, magnet.Size.X); targetPosition.Y = Mathf.Clamp(targetPosition.Y, 0, magnet.Size.Y); } break; case EmitterShape.Ellipse: if (Math.Abs(magnet.Size.Y) > 1e-5) { Vector2 center = 0.5f * magnet.Size; float k = magnet.Size.X / magnet.Size.Y; targetPosition -= center; targetPosition.Y *= k; targetPosition = targetPosition.Normalized; targetPosition *= magnet.Size.X * 0.5f; targetPosition.Y /= k; targetPosition += center; } else { targetPosition = 0.5f * magnet.Size; } break; case EmitterShape.Line: targetPosition.Y = 0.5f * magnet.Size.Y; if (targetPosition.X < 0.0f) { targetPosition.X = 0.0f; } else if (targetPosition.X > magnet.Size.X) { targetPosition.X = magnet.Size.X; } break; case EmitterShape.Point: targetPosition = 0.5f * magnet.Size; break; } targetPosition = magnetData.PrecalcInvTransitionMatrix.TransformVector(targetPosition); Vector2 direction = targetPosition - p.RegularPosition; float squaredDistance = direction.SqrLength; direction = direction.Normalized; float magnetStrength = magnet.Strength; if (magnet.Attenuation > 0.0001f) { magnetStrength /= (float)Math.Pow(squaredDistance, magnet.Attenuation * 0.5f); } float t = magnetStrength * p.MagnetAmountCurrent * delta; if (t * t > squaredDistance) { t = (float)Math.Sqrt(squaredDistance); } p.RegularPosition += direction * t; }