-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pickup.cs
135 lines (114 loc) · 4.89 KB
/
Pickup.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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace SpaceWars
{
class Pickup
{
private CircleCollision mCollisionCircle;
private Display mDisplay;
private GameWorld mGameWorld;
private const float mPickupRadius = 15.0f;
private DisplayObject mPickupDisplay;
public Pickup(Display pDisplay, GameWorld pGameWorld, string pAssetFile, Vector2 pPosition, Vector2 pOrigin, float pDepth, Rectangle pSrcRect, float pRotation = 0)
{
mDisplay = pDisplay;
mGameWorld = pGameWorld;
mPickupDisplay = new DisplayObject(pDisplay, pAssetFile, pPosition.X, pPosition.Y, (int)pOrigin.X, (int)pOrigin.Y, pDepth, pSrcRect.X, pSrcRect.Y, pSrcRect.Width, pSrcRect.Height, pRotation, false);
mCollisionCircle = new CircleCollision(pPosition.X, pPosition.Y, mPickupRadius);
mCollisionCircle.mIsPickup = true;
mCollisionCircle.mPickupOwner = this;
mGameWorld.CollisionShapes_Circle.Add(mCollisionCircle);
}
public virtual void Destroy()
{
if (mPickupDisplay != null)
{
mPickupDisplay.Hide();
mPickupDisplay.Destroy();
mPickupDisplay = null;
}
if(mCollisionCircle != null)
mGameWorld.CollisionShapes_Circle_ToRemove.Add(mCollisionCircle);
}
public virtual void PickUp(Ship pShipToPickup)
{
SoundEffectInstance mPickUpInstance = mGameWorld.aaDisplay.aaGame.mPickUpSound.CreateInstance();
mPickUpInstance.Volume = 0.8f;
mPickUpInstance.Play();
mGameWorld.aaDisplay.aaGame.mGameSoundFX.Add(mPickUpInstance);
}
}
class HealthPickup : Pickup
{
private const float mHealthAmount = 0.2f;
public HealthPickup(Display pDisplay, GameWorld pGameWorld, string pAssetFile, Vector2 pPosition, Vector2 pOrigin, float pDepth, Rectangle pSrcRect, float pRotation = 0)
: base(pDisplay, pGameWorld, pAssetFile, pPosition, pOrigin, pDepth, pSrcRect, pRotation)
{
}
public override void PickUp(Ship pShipToPickup)
{
base.PickUp(pShipToPickup);
pShipToPickup.aHull += (mHealthAmount * pShipToPickup.mKit.HULL);
pShipToPickup.aHull = Math.Min(pShipToPickup.aHull, pShipToPickup.mKit.HULL);
}
}
class DualShotPickup : Pickup
{
public DualShotPickup(Display pDisplay, GameWorld pGameWorld, string pAssetFile, Vector2 pPosition, Vector2 pOrigin, float pDepth, Rectangle pSrcRect, float pRotation = 0)
: base(pDisplay, pGameWorld, pAssetFile, pPosition, pOrigin, pDepth, pSrcRect, pRotation)
{
}
public override void PickUp(Ship pShipToPickup)
{
base.PickUp(pShipToPickup);
pShipToPickup.FireBullet = new Ability_ShootTier2(pShipToPickup);
if (pShipToPickup.mMySatellite != null)
{
pShipToPickup.mMySatellite.FireBullet = new Ability_ShootTier2(pShipToPickup.mMySatellite);
}
}
}
class TriShotPickup : Pickup
{
public TriShotPickup(Display pDisplay, GameWorld pGameWorld, string pAssetFile, Vector2 pPosition, Vector2 pOrigin, float pDepth, Rectangle pSrcRect, float pRotation = 0)
: base(pDisplay, pGameWorld, pAssetFile, pPosition, pOrigin, pDepth, pSrcRect, pRotation)
{
}
public override void PickUp(Ship pShipToPickup)
{
base.PickUp(pShipToPickup);
pShipToPickup.FireBullet = new Ability_ShootTier3(pShipToPickup);
if (pShipToPickup.mMySatellite != null)
{
pShipToPickup.mMySatellite.FireBullet = new Ability_ShootTier3(pShipToPickup.mMySatellite);
}
}
}
class QuadShotPickup : Pickup
{
public QuadShotPickup(Display pDisplay, GameWorld pGameWorld, string pAssetFile, Vector2 pPosition, Vector2 pOrigin, float pDepth, Rectangle pSrcRect, float pRotation = 0)
: base(pDisplay, pGameWorld, pAssetFile, pPosition, pOrigin, pDepth, pSrcRect, pRotation)
{
}
public override void PickUp(Ship pShipToPickup)
{
base.PickUp(pShipToPickup);
pShipToPickup.FireBullet = new Ability_ShootTier4(pShipToPickup);
if (pShipToPickup.mMySatellite != null)
{
pShipToPickup.mMySatellite.FireBullet = new Ability_ShootTier4(pShipToPickup.mMySatellite);
}
}
}
}