blob: a633bef1ffb0d8eba1f198bb536d859ba84fb114 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
using System;
using System.Collections;
using UnityEngine;
public class Asteroid : PoolableBehavior
{
public Vector3 TargetPosition { get; internal set; }
public Sprite[] AsteroidImages;
public Sprite[] BrokenImages;
private int imgIdx;
public FloatRange MoveSpeed = new FloatRange(2f, 5f);
public FloatRange RotateSpeed = new FloatRange(-10f, 10f);
public SpriteRenderer Explosion;
public void FixedUpdate()
{
base.transform.localRotation = Quaternion.Euler(0f, 0f, base.transform.localRotation.eulerAngles.z + this.RotateSpeed.Last * Time.fixedDeltaTime);
Vector3 a = this.TargetPosition - base.transform.localPosition;
if (a.sqrMagnitude > 0.05f)
{
a.Normalize();
base.transform.localPosition += a * this.MoveSpeed.Last * Time.fixedDeltaTime;
return;
}
this.OwnerPool.Reclaim(this);
}
public override void Reset()
{
base.enabled = true;
this.Explosion.enabled = false;
SpriteRenderer component = base.GetComponent<SpriteRenderer>();
this.imgIdx = this.AsteroidImages.RandomIdx<Sprite>();
component.sprite = this.AsteroidImages[this.imgIdx];
component.enabled = true;
ButtonBehavior component2 = base.GetComponent<ButtonBehavior>();
component2.enabled = true;
component2.OnClick.RemoveAllListeners();
base.transform.Rotate(0f, 0f, this.RotateSpeed.Next());
this.MoveSpeed.Next();
base.Reset();
}
public IEnumerator CoBreakApart()
{
base.enabled = false;
base.GetComponent<ButtonBehavior>().enabled = false;
this.Explosion.enabled = true;
yield return new WaitForLerp(0.1f, delegate(float t)
{
this.Explosion.transform.localScale = new Vector3(t, t, t);
});
yield return new WaitForSeconds(0.05f);
yield return new WaitForLerp(0.05f, delegate(float t)
{
this.Explosion.transform.localScale = new Vector3(1f - t, 1f - t, 1f - t);
});
SpriteRenderer rend = base.GetComponent<SpriteRenderer>();
yield return null;
rend.sprite = this.BrokenImages[this.imgIdx];
yield return new WaitForSeconds(0.2f);
this.OwnerPool.Reclaim(this);
yield break;
}
}
|