This repository has been archived by the owner on Nov 24, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIcePlayer.cs
98 lines (91 loc) · 3.89 KB
/
IcePlayer.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
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Terraria;
using Terraria.DataStructures;
using Terraria.ModLoader;
namespace IceKracken
{
class IcePlayer : ModPlayer
{
public int DoT { get; set; }
public int Shake { get; set; } = 0;
public int panDown;
public int ScreenMoveTime = 0;
public Vector2 ScreenMoveTarget = new Vector2(0, 0);
public Vector2 ScreenMovePan = new Vector2(0, 0);
private int ScreenMoveTimer = 0;
public int PlatformTimer { get; set; }
public override void SetupStartInventory(IList<Item> items, bool MediumcoreDeath)
{
Item i = new Item();
i.SetDefaults(ModContent.ItemType<Items.StartBag>());
items.Add(i);
}
public override void PreUpdate()
{
if (PlatformTimer > 0) PlatformTimer--;
}
public override void UpdateBadLifeRegen()
{
if (DoT > 0)
{
player.lifeRegen = 0;
player.lifeRegenTime = 0;
player.lifeRegen -= DoT * 2;
Main.musicFade[Main.curMusic] = 0.05f;
}
}
public override void ResetEffects()
{
DoT = 0;
}
public override bool PreKill(double damage, int hitDirection, bool pvp, ref bool playSound, ref bool genGore, ref PlayerDeathReason damageSource)
{
if (player.HasBuff(ModContent.BuffType<Buffs.PrismaticDrown>())) damageSource = PlayerDeathReason.ByCustomReason(player.name + " fell into the drink...");
return true;
}
public override void ModifyScreenPosition()
{
if (ScreenMoveTime > 0 && ScreenMoveTarget != Vector2.Zero)
{
Vector2 off = new Vector2(Main.screenWidth, Main.screenHeight) / -2;
if (ScreenMoveTimer <= 30) //go out
{
Main.screenPosition = Vector2.SmoothStep(Main.LocalPlayer.Center + off, ScreenMoveTarget + off, ScreenMoveTimer / 30f);
}
else if (ScreenMoveTimer >= ScreenMoveTime - 30) //go in
{
Main.screenPosition = Vector2.SmoothStep((ScreenMovePan == Vector2.Zero ? ScreenMoveTarget : ScreenMovePan) + off, Main.LocalPlayer.Center + off, (ScreenMoveTimer - (ScreenMoveTime - 30)) / 30f);
}
else
{
if (ScreenMovePan == Vector2.Zero) Main.screenPosition = ScreenMoveTarget + off; //stay on target
else if (ScreenMoveTimer <= ScreenMoveTime - 300) Main.screenPosition = Vector2.SmoothStep(ScreenMoveTarget + off, ScreenMovePan + off, ScreenMoveTimer / (float)(ScreenMoveTime - 300));
else Main.screenPosition = ScreenMovePan + off;
}
if (ScreenMoveTimer == ScreenMoveTime) { ScreenMoveTime = 0; ScreenMoveTimer = 0; ScreenMoveTarget = Vector2.Zero; ScreenMovePan = Vector2.Zero; }
ScreenMoveTimer++;
}
if(Main.tile[(int)player.Center.X / 16, (int)player.Center.Y / 16].wall == ModContent.WallType<BrickWall>() &&
Main.npc.Any(n => n.active && n.modNPC is Boss.MainBody && n.ai[0] == (int)Boss.MainBody.AIStates.SecondPhase && n.ai[1] > 300) && panDown < 150) //the worlds most ungodly check ever
{
panDown++;
}
else if (panDown > 0)
{
panDown--;
}
Main.screenPosition += new Vector2(0, panDown);
if (Shake > 0)
{
Main.screenPosition.Y += Main.rand.Next(-Shake, Shake);
Main.screenPosition.X += Main.rand.Next(-Shake, Shake);
if (Shake > 0) { Shake--; }
}
}
}
}