64 lines
2.2 KiB
C#
64 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Xml.Linq;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using FarseerPhysics;
|
|
using Barotrauma.Networking;
|
|
using Lidgren.Network;
|
|
|
|
namespace Barotrauma.Items.Components
|
|
{
|
|
partial class Turret : Powered, IDrawableComponent, IServerSerializable
|
|
{
|
|
public void Draw(SpriteBatch spriteBatch, bool editing = false)
|
|
{
|
|
Vector2 drawPos = new Vector2(item.Rect.X, item.Rect.Y);
|
|
if (item.Submarine != null) drawPos += item.Submarine.DrawPosition;
|
|
drawPos.Y = -drawPos.Y;
|
|
|
|
if (barrelSprite != null)
|
|
{
|
|
barrelSprite.Draw(spriteBatch,
|
|
drawPos + barrelPos, Color.White,
|
|
rotation + MathHelper.PiOver2, 1.0f,
|
|
SpriteEffects.None, item.Sprite.Depth + 0.01f);
|
|
}
|
|
|
|
if (!editing) return;
|
|
|
|
GUI.DrawLine(spriteBatch,
|
|
drawPos + barrelPos,
|
|
drawPos + barrelPos + new Vector2((float)Math.Cos(minRotation), (float)Math.Sin(minRotation)) * 60.0f,
|
|
Color.Green);
|
|
|
|
GUI.DrawLine(spriteBatch,
|
|
drawPos + barrelPos,
|
|
drawPos + barrelPos + new Vector2((float)Math.Cos(maxRotation), (float)Math.Sin(maxRotation)) * 60.0f,
|
|
Color.Green);
|
|
|
|
GUI.DrawLine(spriteBatch,
|
|
drawPos + barrelPos,
|
|
drawPos + barrelPos + new Vector2((float)Math.Cos((maxRotation + minRotation) / 2), (float)Math.Sin((maxRotation + minRotation) / 2)) * 60.0f,
|
|
Color.LightGreen);
|
|
|
|
}
|
|
|
|
public void ClientRead(ServerNetObject type, NetBuffer msg, float sendingTime)
|
|
{
|
|
UInt16 projectileID = msg.ReadUInt16();
|
|
Item projectile = Entity.FindEntityByID(projectileID) as Item;
|
|
|
|
if (projectile == null)
|
|
{
|
|
DebugConsole.ThrowError("Failed to launch a projectile - item with the ID \"" + projectileID + " not found");
|
|
return;
|
|
}
|
|
|
|
Launch(projectile);
|
|
PlaySound(ActionType.OnUse, item.WorldPosition);
|
|
}
|
|
}
|
|
}
|