/
PrinceOfTheJammed.cs
150 lines (129 loc) · 5.07 KB
/
PrinceOfTheJammed.cs
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dungeonator;
using UnityEngine;
//using Alexandria.ItemAPI;
using Gungeon;
using Alexandria.DungeonAPI;
using System.Collections;
using Alexandria.ItemAPI;
namespace Items
{
class PrinceOfTheJammed : MonoBehaviour
{
public static void Init()
{
GameObject gameObject = SpriteBuilder.SpriteFromResource("Items/Enemies/Sprites/potj");
gameObject.AddAnimation("start", "Items/Enemies/Sprites/POTJ/Start", 8, Library.AnimationType.Idle, DirectionalAnimation.DirectionType.None, DirectionalAnimation.FlipType.None, tk2dSpriteAnimationClip.WrapMode.Once);
gameObject.AddAnimation("idle", "Items/Enemies/Sprites/POTJ/Idle", 10, Library.AnimationType.Idle, DirectionalAnimation.DirectionType.None, DirectionalAnimation.FlipType.None, tk2dSpriteAnimationClip.WrapMode.Loop);
gameObject.AddComponent<PrinceOfTheJammed>();
FakePrefab.MarkAsFakePrefab(gameObject);
gameObject.SetActive(false);
SpeculativeRigidbody specBody = gameObject.GetComponent<tk2dSprite>().SetUpSpeculativeRigidbody(new IntVector2(+3, +8), new IntVector2(16, 16));
specBody.PixelColliders.Clear();
specBody.PixelColliders.Add(new PixelCollider
{
ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
CollisionLayer = CollisionLayer.EnemyCollider,
IsTrigger = false,
BagleUseFirstFrameOnly = false,
SpecifyBagelFrame = string.Empty,
BagelColliderNumber = 0,
ManualOffsetX = 3,
ManualOffsetY = 8,
ManualWidth = 16,
ManualHeight = 16,
ManualDiameter = 0,
ManualLeftX = 0,
ManualLeftY = 0,
ManualRightX = 0,
ManualRightY = 0,
});
specBody.PixelColliders.Add(new PixelCollider
{
ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual,
CollisionLayer = CollisionLayer.EnemyHitBox,
IsTrigger = false,
BagleUseFirstFrameOnly = false,
SpecifyBagelFrame = string.Empty,
BagelColliderNumber = 0,
ManualOffsetX = 3,
ManualOffsetY = 8,
ManualWidth = 16,
ManualHeight = 16,
ManualDiameter = 0,
ManualLeftX = 0,
ManualLeftY = 0,
ManualRightX = 0,
ManualRightY = 0,
});
specBody.CollideWithTileMap = false;
specBody.CollideWithOthers = true;
PJPrefab = gameObject;
}
private void Start()
{
Rigidbody = base.gameObject.GetComponent<SpeculativeRigidbody>();
Rigidbody.OnPreRigidbodyCollision += DoCollision;
base.gameObject.GetComponent<tk2dSpriteAnimator>().Play("start");
base.gameObject.GetComponent<tk2dSpriteAnimator>().QueueAnimation("idle");
this.m_currentTargetPlayer = GameManager.Instance.GetRandomActivePlayer();
}
private void Update()
{
DoParticles();
DoMotion();
}
private void DoMotion()
{
Rigidbody.Velocity = Vector2.zero;
if (base.gameObject.GetComponent<tk2dSpriteAnimator>().IsPlaying("start"))
{
return;
}
if (this.m_currentTargetPlayer.healthHaver.IsDead || this.m_currentTargetPlayer.IsGhost)
{
this.m_currentTargetPlayer = GameManager.Instance.GetRandomActivePlayer();
}
Vector2 centerPosition = this.m_currentTargetPlayer.CenterPosition;
Vector2 vector = centerPosition - Rigidbody.UnitCenter;
float magnitude = vector.magnitude;
float d = Mathf.Lerp(4, 10, (magnitude - 10) / (50 - 10));
Rigidbody.Velocity = vector.normalized * d;
}
private void DoCollision(SpeculativeRigidbody myRigidbody, PixelCollider myPixelCollider, SpeculativeRigidbody otherRigidbody, PixelCollider otherPixelCollider)
{
PhysicsEngine.SkipCollision = true;
if (otherRigidbody.gameObject.GetComponent<PlayerController>())
{
otherRigidbody.gameObject.GetComponent<PlayerController>().healthHaver.ApplyDamage(0.5f, Vector2.zero, "Prince Of The Jammed", CoreDamageTypes.None, DamageCategory.Normal, false, null, false);
}
}
private void DoParticles()
{
if (GameManager.Options.ShaderQuality != GameOptions.GenericHighMedLowOption.LOW && GameManager.Options.ShaderQuality != GameOptions.GenericHighMedLowOption.VERY_LOW)
{
Vector3 vector = Rigidbody.UnitBottomLeft.ToVector3ZisY(0f);
Vector3 vector2 = Rigidbody.UnitTopRight.ToVector3ZisY(0f);
float num = (vector2.y - vector.y) * (vector2.x - vector.x);
float num2 = 40 * num;
int num3 = Mathf.CeilToInt(Mathf.Max(1f, num2 * BraveTime.DeltaTime));
int num4 = num3;
Vector3 minPosition = vector;
Vector3 maxPosition = vector2;
Vector3 up = Vector3.up;
float angleVariance = 120f;
float magnitudeVariance = 0.5f;
float? startLifetime = new float?(UnityEngine.Random.Range(1f, 1.65f));
GlobalSparksDoer.DoRandomParticleBurst(num4, minPosition, maxPosition, up, angleVariance, magnitudeVariance, null, startLifetime, null, GlobalSparksDoer.SparksType.BLACK_PHANTOM_SMOKE);
}
}
private static PrinceOfTheJammed m_instance;
private static SpeculativeRigidbody PJBody;
public static GameObject PJPrefab = new GameObject();
private SpeculativeRigidbody Rigidbody;
private PlayerController m_currentTargetPlayer;
}
}