Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TETrainingDummy.cs
Go to the documentation of this file.
2using System.IO;
5
7
9{
11
12 private static bool playerBoxFilled;
13
14 private static byte _myEntityID;
15
16 public int npc;
17
18 public override void RegisterTileEntityID(int assignedID)
19 {
20 _myEntityID = (byte)assignedID;
21 TileEntity._UpdateStart += ClearBoxes;
22 }
23
24 public override void NetPlaceEntityAttempt(int x, int y)
25 {
26 NetPlaceEntity(x, y);
27 }
28
29 public static void NetPlaceEntity(int x, int y)
30 {
31 Place(x, y);
32 }
33
34 public override TileEntity GenerateInstance()
35 {
36 return new TETrainingDummy();
37 }
38
39 public override bool IsTileValidForEntity(int x, int y)
40 {
41 return ValidTile(x, y);
42 }
43
44 public static void ClearBoxes()
45 {
46 playerBox.Clear();
47 playerBoxFilled = false;
48 }
49
50 public override void Update()
51 {
52 Rectangle value = new Rectangle(0, 0, 32, 48);
53 value.Inflate(1600, 1600);
54 int x = value.X;
55 int y = value.Y;
56 if (npc != -1)
57 {
58 if (!Main.npc[npc].active || Main.npc[npc].type != 488 || Main.npc[npc].ai[0] != (float)Position.X || Main.npc[npc].ai[1] != (float)Position.Y)
59 {
60 Deactivate();
61 }
62 return;
63 }
65 value.X = Position.X * 16 + x;
66 value.Y = Position.Y * 16 + y;
67 bool flag = false;
69 {
70 if (item.Value.Intersects(value))
71 {
72 flag = true;
73 break;
74 }
75 }
76 if (flag)
77 {
78 Activate();
79 }
80 }
81
82 private static void FillPlayerHitboxes()
83 {
85 {
86 return;
87 }
88 for (int i = 0; i < 255; i++)
89 {
90 if (Main.player[i].active)
91 {
92 playerBox[i] = Main.player[i].getRect();
93 }
94 }
95 playerBoxFilled = true;
96 }
97
98 public static bool ValidTile(int x, int y)
99 {
100 if (!Main.tile[x, y].active() || Main.tile[x, y].type != 378 || Main.tile[x, y].frameY != 0 || Main.tile[x, y].frameX % 36 != 0)
101 {
102 return false;
103 }
104 return true;
105 }
106
108 {
109 npc = -1;
110 }
111
112 public static int Place(int x, int y)
113 {
115 tETrainingDummy.Position = new Point16(x, y);
116 tETrainingDummy.ID = TileEntity.AssignNewID();
117 tETrainingDummy.type = _myEntityID;
119 {
122 }
123 return tETrainingDummy.ID;
124 }
125
126 public static int Hook_AfterPlacement(int x, int y, int type = 378, int style = 0, int direction = 1, int alternate = 0)
127 {
128 if (Main.netMode == 1)
129 {
130 NetMessage.SendTileSquare(Main.myPlayer, x - 1, y - 2, 2, 3);
131 NetMessage.SendData(87, -1, -1, null, x - 1, y - 2, (int)_myEntityID);
132 return -1;
133 }
134 return Place(x - 1, y - 2);
135 }
136
137 public static void Kill(int x, int y)
138 {
139 if (TileEntity.ByPosition.TryGetValue(new Point16(x, y), out var value) && value.type == _myEntityID)
140 {
142 {
143 TileEntity.ByID.Remove(value.ID);
144 TileEntity.ByPosition.Remove(new Point16(x, y));
145 }
146 }
147 }
148
149 public static int Find(int x, int y)
150 {
151 if (TileEntity.ByPosition.TryGetValue(new Point16(x, y), out var value) && value.type == _myEntityID)
152 {
153 return value.ID;
154 }
155 return -1;
156 }
157
158 public override void WriteExtraData(BinaryWriter writer, bool networkSend)
159 {
160 writer.Write((short)npc);
161 }
162
163 public override void ReadExtraData(BinaryReader reader, bool networkSend)
164 {
165 npc = reader.ReadInt16();
166 }
167
168 public void Activate()
169 {
170 int num = NPC.NewNPC(new EntitySource_TileEntity(this), Position.X * 16 + 16, Position.Y * 16 + 48, 488, 100);
171 Main.npc[num].ai[0] = Position.X;
172 Main.npc[num].ai[1] = Position.Y;
173 Main.npc[num].netUpdate = true;
174 npc = num;
175 if (Main.netMode != 1)
176 {
177 NetMessage.SendData(86, -1, -1, null, ID, Position.X, Position.Y);
178 }
179 }
180
181 public void Deactivate()
182 {
183 if (npc != -1)
184 {
185 Main.npc[npc].active = false;
186 }
187 npc = -1;
188 if (Main.netMode != 1)
189 {
190 NetMessage.SendData(86, -1, -1, null, ID, Position.X, Position.Y);
191 }
192 }
193
194 public override string ToString()
195 {
196 return Position.X + "x " + Position.Y + "y npc: " + npc;
197 }
198}
virtual short ReadInt16()
static Dictionary< int, TileEntity > ByID
Definition TileEntity.cs:18
static Dictionary< Point16, TileEntity > ByPosition
Definition TileEntity.cs:20
override void WriteExtraData(BinaryWriter writer, bool networkSend)
static int Hook_AfterPlacement(int x, int y, int type=378, int style=0, int direction=1, int alternate=0)
override void ReadExtraData(BinaryReader reader, bool networkSend)
static Dictionary< int, Rectangle > playerBox
static int myPlayer
Definition Main.cs:1801
static int netMode
Definition Main.cs:2095
static Tile[,] tile
Definition Main.cs:1675
static NPC[] npc
Definition Main.cs:1685
static Player[] player
Definition Main.cs:1803
static int NewNPC(IEntitySource source, int X, int Y, int Type, int Start=0, float ai0=0f, float ai1=0f, float ai2=0f, float ai3=0f, int Target=255)
Definition NPC.cs:77654
static void SendData(int msgType, int remoteClient=-1, int ignoreClient=-1, NetworkText text=null, int number=0, float number2=0f, float number3=0f, float number4=0f, int number5=0, int number6=0, int number7=0)
Definition NetMessage.cs:88
static void SendTileSquare(int whoAmi, int tileX, int tileY, int xSize, int ySize, TileChangeType changeType=TileChangeType.None)