topical media & game development
game-xna-intro-XnaShooter-Game-Item.cs / cs
// Project: XnaShooter, File: Item.cs
// Namespace: XnaShooter.Game, Class: Item
// Path: C:\code\XnaShooter\Game, Author: Abi
// Code lines: 167, Size of file: 4,73 KB
// Creation date: 27.12.2006 06:10
// Last modified: 27.12.2006 15:14
// Generated with Commenter by abi.exDream.com
#region Using directives
using System;
using System.Collections.Generic;
using System.Text;
using XnaShooter.Shaders;
using XnaShooter.Graphics;
using XnaShooter.Helpers;
using XnaShooter.GameScreens;
using XnaShooter.Game;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Graphics;
using XnaShooter.Sounds;
#endregion
namespace XnaShooter.Game
{
public class Item
{
#region Variables
<summary>
Item types
</summary>
public enum ItemTypes
{
Health,
Mg,
Gattling,
Plasma,
Rockets,
Emp,
} // enum ItemTypes
<summary>
Item type, either health or a weapon.
</summary>
public ItemTypes itemType;
<summary>
Position for this item. Will not move or anything, just collect them.
</summary>
public Vector2 position;
#endregion
#region Constructor
<summary>
Create item of specific type at specific location.
</summary>
<param name="setType">Set type
</param>
<param name="setPosition">Set position
</param>
public Item(ItemTypes setType, Vector2 setPosition)
{
itemType = setType;
position = setPosition;
} // Unit(setType, setPosition)
#endregion
#region Render
<summary>
Render unit, returns false if we are done with it.
Has to be removed then. Else it updates just position and AI.
</summary>
<returns>True if done, false otherwise
</returns>
public bool Render(Mission mission)
{
#region Skip if out of visible range
float distance = Mission.LookAtPosition.Y - position.Y;
const float MaxUnitDistance = 60;
// Remove unit if it is out of visible range!
if (distance > MaxUnitDistance)
return true;
#endregion
#region Render
float itemSize = Mission.ItemModelSize;
float itemRotation = 0;
Vector3 itemPos = new Vector3(position, Mission.AllShipsZHeight);
mission.AddModelToRender(
mission.itemModels[(int)itemType],
Matrix.CreateScale(itemSize) *
Matrix.CreateRotationZ(itemRotation) *
Matrix.CreateTranslation(itemPos));
// Add glow effect
EffectManager.AddEffect(itemPos + new Vector3(0, 0, 1.01f),
EffectManager.EffectType.LightInstant,
7.5f, 0, 0);
EffectManager.AddEffect(itemPos + new Vector3(0, 0, 1.02f),
EffectManager.EffectType.LightInstant,
5.0f, 0, 0);
#endregion
#region Collect
// Collect item and give to player if colliding!
Vector2 distVec =
new Vector2(Player.shipPos.X, Player.shipPos.Y) -
new Vector2(position.X, position.Y);
if (distVec.Length() < 5.0f)
{
if (itemType == ItemTypes.Health)
{
// Refresh health
Sound.Play(Sound.Sounds.Health);
Player.health = 1.0f;
} // if
else
{
Sound.Play(Sound.Sounds.NewWeapon);
if (itemType == ItemTypes.Mg)
Player.currentWeapon = Player.WeaponTypes.MG;
else if (itemType == ItemTypes.Plasma)
Player.currentWeapon = Player.WeaponTypes.Plasma;
else if (itemType == ItemTypes.Gattling)
Player.currentWeapon = Player.WeaponTypes.Gattling;
else if (itemType == ItemTypes.Rockets)
Player.currentWeapon = Player.WeaponTypes.Rockets;
else if (itemType == ItemTypes.Emp &&
Player.empBombs < 3)
Player.empBombs++;
} // else
Player.score += 500;
return true;
} // else
#endregion
// Don't remove unit from items list
return false;
} // Render()
#endregion
} // class Item
} // namespace XnaShooter.Game
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.