Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ UpdateItem()

void Terraria.Item.UpdateItem ( int i)
inline

Definition at line 48345 of file Item.cs.

48346 {
48347 whoAmI = i;
48348 if (Main.timeItemSlotCannotBeReusedFor[i] > 0)
48349 {
48350 if (Main.netMode == 2)
48351 {
48352 Main.timeItemSlotCannotBeReusedFor[i]--;
48353 return;
48354 }
48355 Main.timeItemSlotCannotBeReusedFor[i] = 0;
48356 }
48357 if (!active)
48358 {
48359 return;
48360 }
48361 if (instanced)
48362 {
48363 if (Main.netMode == 2)
48364 {
48365 active = false;
48366 return;
48367 }
48368 keepTime = 6000;
48369 ownTime = 0;
48370 noGrabDelay = 0;
48371 playerIndexTheItemIsReservedFor = Main.myPlayer;
48372 }
48373 if (Main.netMode == 0)
48374 {
48375 playerIndexTheItemIsReservedFor = Main.myPlayer;
48376 }
48377 float gravity = 0.1f;
48378 float maxFallSpeed = 7f;
48379 if (Main.netMode == 1)
48380 {
48381 int num = (int)(position.X + (float)(width / 2)) / 16;
48382 int num2 = (int)(position.Y + (float)(height / 2)) / 16;
48383 if (num >= 0 && num2 >= 0 && num < Main.maxTilesX && num2 < Main.maxTilesY && Main.tile[num, num2] == null)
48384 {
48385 gravity = 0f;
48386 velocity.X = 0f;
48387 velocity.Y = 0f;
48388 }
48389 }
48390 Vector2 wetVelocity = velocity * 0.5f;
48391 if (shimmerWet)
48392 {
48393 gravity = 0.065f;
48394 maxFallSpeed = 4f;
48395 wetVelocity = velocity * 0.375f;
48396 }
48397 else if (honeyWet)
48398 {
48399 gravity = 0.05f;
48400 maxFallSpeed = 3f;
48401 wetVelocity = velocity * 0.25f;
48402 }
48403 else if (wet)
48404 {
48405 gravity = 0.08f;
48406 maxFallSpeed = 5f;
48407 }
48408 if (ownTime > 0)
48409 {
48410 ownTime--;
48411 }
48412 else
48413 {
48414 ownIgnore = -1;
48415 }
48416 if (keepTime > 0)
48417 {
48418 keepTime--;
48419 }
48420 if (!beingGrabbed)
48421 {
48422 if (shimmered)
48423 {
48424 if (Main.rand.Next(30) == 0)
48425 {
48426 int num3 = Dust.NewDust(position, width, height, 309);
48427 Main.dust[num3].position.X += Main.rand.Next(-8, 5);
48428 Main.dust[num3].position.Y += Main.rand.Next(-8, 5);
48429 Main.dust[num3].scale *= 1.1f;
48430 Main.dust[num3].velocity *= 0.3f;
48431 switch (Main.rand.Next(6))
48432 {
48433 case 0:
48434 Main.dust[num3].color = new Color(255, 255, 210);
48435 break;
48436 case 1:
48437 Main.dust[num3].color = new Color(190, 245, 255);
48438 break;
48439 case 2:
48440 Main.dust[num3].color = new Color(255, 150, 255);
48441 break;
48442 default:
48443 Main.dust[num3].color = new Color(190, 175, 255);
48444 break;
48445 }
48446 }
48447 Lighting.AddLight(base.Center, (1f - shimmerTime) * 0.8f, (1f - shimmerTime) * 0.8f, (1f - shimmerTime) * 0.8f);
48448 gravity = 0f;
48449 if (shimmerWet)
48450 {
48451 if (velocity.Y > -4f)
48452 {
48453 velocity.Y -= 0.05f;
48454 }
48455 }
48456 else
48457 {
48458 int num4 = 2;
48459 int num5 = (int)(base.Center.X / 16f);
48460 int num6 = (int)(base.Center.Y / 16f);
48461 bool flag = false;
48462 for (int j = num6; j < num6 + num4; j++)
48463 {
48464 if (WorldGen.InWorld(num5, j) && Main.tile[num5, j] != null && Main.tile[num5, j].shimmer() && Main.tile[num5, j].liquid > 0)
48465 {
48466 flag = true;
48467 break;
48468 }
48469 }
48470 if (flag)
48471 {
48472 if (velocity.Y > -4f)
48473 {
48474 velocity.Y -= 0.05f;
48475 }
48476 }
48477 else
48478 {
48479 velocity.Y *= 0.9f;
48480 }
48481 }
48482 }
48483 if (shimmerWet && !shimmered)
48484 {
48485 Shimmering();
48486 }
48487 else if (shimmerTime > 0f)
48488 {
48489 shimmerTime -= 0.01f;
48490 if (shimmerTime < 0f)
48491 {
48492 shimmerTime = 0f;
48493 }
48494 }
48495 if (shimmerTime == 0f)
48496 {
48498 }
48500 {
48502 }
48503 if (timeLeftInWhichTheItemCannotBeTakenByEnemies == 0 && Main.netMode != 2 && playerIndexTheItemIsReservedFor == Main.myPlayer)
48504 {
48506 if (Main.expertMode && IsACoin)
48507 {
48509 }
48510 }
48511 MoveInWorld(gravity, maxFallSpeed, ref wetVelocity, i);
48512 if (lavaWet)
48513 {
48514 CheckLavaDeath(i);
48515 }
48517 }
48518 else
48519 {
48520 beingGrabbed = false;
48521 }
48523 if (timeSinceItemSpawned < 2147483547)
48524 {
48527 }
48528 if (Main.netMode == 2 && playerIndexTheItemIsReservedFor != Main.myPlayer)
48529 {
48532 {
48534 NetMessage.SendData(39, playerIndexTheItemIsReservedFor, -1, null, i);
48536 }
48537 }
48538 if (wet)
48539 {
48541 }
48542 else
48543 {
48544 position += velocity;
48545 }
48546 if (noGrabDelay > 0)
48547 {
48548 noGrabDelay--;
48549 }
48550 }
bool honeyWet
Definition Entity.cs:34
bool shimmerWet
Definition Entity.cs:32
Vector2 velocity
Definition Entity.cs:16
Vector2 position
Definition Entity.cs:14
static int[] ItemSpawnDecaySpeed
Definition ItemID.cs:1030
int timeSinceTheItemHasBeenReservedForSomeone
Definition Item.cs:257
void CheckLavaDeath(int i)
Definition Item.cs:48637
void MoveInWorld(float gravity, float maxFallSpeed, ref Vector2 wetVelocity, int i)
Definition Item.cs:48716
void DespawnIfMeetingConditions(int i)
Definition Item.cs:48552
void Shimmering()
Definition Item.cs:48016
void TryCombiningIntoNearbyItems(int i)
Definition Item.cs:48608
bool IsACoin
Definition Item.cs:364
bool instanced
Definition Item.cs:123
int playerIndexTheItemIsReservedFor
Definition Item.cs:231
int ownTime
Definition Item.cs:127
int timeLeftInWhichTheItemCannotBeTakenByEnemies
Definition Item.cs:131
float shimmerTime
Definition Item.cs:324
int noGrabDelay
Definition Item.cs:83
int ownIgnore
Definition Item.cs:125
void GetPickedUpByMonsters_Special(int i)
Definition Item.cs:49018
void UpdateItem_VisualEffects()
Definition Item.cs:49220
bool shimmered
Definition Item.cs:322
int keepTime
Definition Item.cs:129
bool beingGrabbed
Definition Item.cs:85
void GetPickedUpByMonsters_Money(int i)
Definition Item.cs:49052
int timeSinceItemSpawned
Definition Item.cs:87

References Terraria.Entity.active, Terraria.Lighting.AddLight(), Terraria.Item.beingGrabbed, Terraria.Item.CheckLavaDeath(), Terraria.Item.DespawnIfMeetingConditions(), Terraria.Main.dust, Terraria.Main.expertMode, Terraria.Item.GetPickedUpByMonsters_Money(), Terraria.Item.GetPickedUpByMonsters_Special(), Terraria.Entity.height, Terraria.Entity.honeyWet, Terraria.Item.instanced, Terraria.WorldGen.InWorld(), Terraria.Item.IsACoin, Terraria.ID.ItemID.Sets.ItemSpawnDecaySpeed, Terraria.Item.keepTime, Terraria.Entity.lavaWet, Terraria.Main.maxTilesX, Terraria.Main.maxTilesY, Terraria.Item.MoveInWorld(), Terraria.Main.myPlayer, Terraria.Main.netMode, Terraria.Dust.NewDust(), Terraria.Item.noGrabDelay, Terraria.Item.ownIgnore, Terraria.Item.ownTime, Terraria.Item.playerIndexTheItemIsReservedFor, Terraria.Entity.position, Terraria.Main.rand, Terraria.NetMessage.SendData(), Terraria.Item.shimmered, Terraria.Item.Shimmering(), Terraria.Item.shimmerTime, Terraria.Entity.shimmerWet, Terraria.Main.tile, Terraria.Main.timeItemSlotCannotBeReusedFor, Terraria.Item.timeLeftInWhichTheItemCannotBeTakenByEnemies, Terraria.Item.timeSinceItemSpawned, Terraria.Item.timeSinceTheItemHasBeenReservedForSomeone, Terraria.Item.TryCombiningIntoNearbyItems(), Terraria.Item.type, Terraria.Item.UpdateItem_VisualEffects(), Terraria.Entity.velocity, Terraria.Entity.wet, Terraria.Entity.whoAmI, Terraria.Entity.width, Microsoft.Xna.Framework.Vector2.X, and Microsoft.Xna.Framework.Vector2.Y.