mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-14 19:29:36 +01:00
You can now pick up crowbars which spawn randomly on the map. All models scaled properly. Some other crap too probably.
This commit is contained in:
@@ -14,6 +14,7 @@ namespace SS3D.Modules.Items
|
||||
private Map.Map map;
|
||||
private OgreManager mEngine;
|
||||
private Network.NetworkManager networkManager;
|
||||
private Mobs.MobManager mobManager;
|
||||
private Dictionary<ushort, Item> itemDict; // ItemID, Item
|
||||
private List<ushort> itemsToMove;
|
||||
private List<ushort> itemsToStop;
|
||||
@@ -22,11 +23,12 @@ namespace SS3D.Modules.Items
|
||||
private double itemUpdateTime = 20;
|
||||
private double serverUpdateTime = 100;
|
||||
|
||||
public ItemManager(OgreManager _mEngine, Map.Map _map, Network.NetworkManager _networkManager)
|
||||
public ItemManager(OgreManager _mEngine, Map.Map _map, Network.NetworkManager _networkManager, Mobs.MobManager _mobManager)
|
||||
{
|
||||
mEngine = _mEngine;
|
||||
map = _map;
|
||||
networkManager = _networkManager;
|
||||
mobManager = _mobManager;
|
||||
itemDict = new Dictionary<ushort, Item>();
|
||||
itemAssemblyName = typeof(SS3D_shared.Item).Assembly.ToString();
|
||||
itemsToMove = new List<ushort>();
|
||||
@@ -44,6 +46,9 @@ namespace SS3D.Modules.Items
|
||||
case ItemMessage.InterpolationPacket:
|
||||
HandleInterpolationPacket(message);
|
||||
break;
|
||||
case ItemMessage.PickUpItem:
|
||||
HandlePickupItem(message);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -71,7 +76,7 @@ namespace SS3D.Modules.Items
|
||||
{
|
||||
foreach (Item item in itemDict.Values)
|
||||
{
|
||||
mEngine.SceneMgr.DestroyEntity(item.Entity);
|
||||
//mEngine.SceneMgr.DestroyEntity(item.Entity);
|
||||
mEngine.SceneMgr.DestroySceneNode(item.Node);
|
||||
}
|
||||
itemDict = null;
|
||||
@@ -156,5 +161,29 @@ namespace SS3D.Modules.Items
|
||||
mEngine.mNetworkMgr.SendMessage(message, NetDeliveryMethod.ReliableOrdered);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void ClickItem(Item item)
|
||||
{
|
||||
NetOutgoingMessage message = networkManager.netClient.CreateMessage();
|
||||
message.Write((byte)NetMessage.ItemMessage);
|
||||
message.Write((byte)ItemMessage.ClickItem);
|
||||
message.Write(item.itemID);
|
||||
networkManager.SendMessage(message, NetDeliveryMethod.Unreliable);
|
||||
}
|
||||
|
||||
private void HandlePickupItem(NetIncomingMessage message)
|
||||
{
|
||||
ushort mobID = message.ReadUInt16();
|
||||
ushort itemID = message.ReadUInt16();
|
||||
|
||||
itemDict[itemID].Entity.DetachFromParent();
|
||||
Mob mob = mobManager.GetMob(mobID);
|
||||
|
||||
mob.Entity.AttachObjectToBone("RHand", itemDict[itemID].Entity);
|
||||
|
||||
mob.heldItem = itemDict[itemID];
|
||||
itemDict[itemID].holder = mob;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,6 +280,11 @@ namespace SS3D.Modules.Mobs
|
||||
}
|
||||
#endregion
|
||||
|
||||
public Mob GetMob(ushort mobID)
|
||||
{
|
||||
return mobDict[mobID];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace SS3D.States
|
||||
mEngine.Camera.Position = new Mogre.Vector3(0, 300, 0);
|
||||
mEngine.Camera.LookAt(new Mogre.Vector3(160,64,160));
|
||||
|
||||
itemManager = new ItemManager(mEngine, map, mEngine.mNetworkMgr);
|
||||
itemManager = new ItemManager(mEngine, map, mEngine.mNetworkMgr, null);
|
||||
|
||||
if (!mEngine.mNetworkMgr.isConnected)
|
||||
{
|
||||
|
||||
@@ -62,9 +62,9 @@ namespace SS3D.States
|
||||
mEngine.mMiyagiSystem.GUIManager.DisposeAllGUIs();
|
||||
|
||||
map = new Map(mEngine);
|
||||
itemManager = new ItemManager(mEngine, map, mEngine.mNetworkMgr);
|
||||
mobManager = new MobManager(mEngine, map, mEngine.mNetworkMgr);
|
||||
|
||||
mobManager = new MobManager(mEngine, map, mEngine.mNetworkMgr);
|
||||
itemManager = new ItemManager(mEngine, map, mEngine.mNetworkMgr, mobManager);
|
||||
SetUp();
|
||||
|
||||
mEngine.mNetworkMgr.MessageArrived += new NetworkMsgHandler(mNetworkMgr_MessageArrived);
|
||||
@@ -271,6 +271,19 @@ namespace SS3D.States
|
||||
mEngine.Camera.ParentNode.ResetOrientation();
|
||||
}
|
||||
}
|
||||
|
||||
if (button == MOIS.MouseButtonID.MB_Left)
|
||||
{
|
||||
Mogre.Vector3 worldPos;
|
||||
Point mousePos = mEngine.mMiyagiSystem.InputManager.MouseLocation;
|
||||
Mogre.Vector2 mousePosAbs = new Vector2((float)mousePos.X / (float)mEngine.Window.Width, (float)mousePos.Y / (float)mEngine.Window.Height);
|
||||
AtomBaseClass atom = HelperClasses.AtomUtil.PickAtScreenPosition(mEngine, mousePosAbs, out worldPos);
|
||||
|
||||
if (atom != null && atom.AtomType == AtomType.Item)
|
||||
{
|
||||
itemManager.ClickItem((Item)atom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void MouseMove(MOIS.MouseEvent mouseState)
|
||||
|
||||
@@ -18,5 +18,7 @@ namespace SS3D_shared
|
||||
public float runSpeed = 2.0f;
|
||||
|
||||
public float speed = 0.0f;
|
||||
|
||||
public Item heldItem; // Just a temporary storage spot, for now.
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ namespace SS3D_shared
|
||||
Node = sceneManager.RootSceneNode.CreateChildSceneNode(entityName);
|
||||
Entity = sceneManager.CreateEntity(entityName, "male.mesh");
|
||||
Entity.UserObject = (AtomBaseClass)this;
|
||||
Node.Scale(15f, 15f, 15f);
|
||||
Node.Position = position;
|
||||
Node.AttachObject(Entity);
|
||||
interpolationPacket = new List<InterpolationPacket>();
|
||||
|
||||
@@ -20,6 +20,8 @@ public enum ItemMessage
|
||||
{
|
||||
CreateItem = 0,
|
||||
InterpolationPacket,
|
||||
ClickItem,
|
||||
PickUpItem,
|
||||
UseItem // etc.
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,8 @@ namespace SS3D_shared
|
||||
Node = sceneManager.RootSceneNode.CreateChildSceneNode(entityName);
|
||||
Entity = sceneManager.CreateEntity(entityName, meshName);
|
||||
Entity.UserObject = (AtomBaseClass)this;
|
||||
Node.Scale(0.1f, 0.1f, 0.1f);
|
||||
|
||||
//Node.Scale(0.1f, 0.1f, 0.1f);
|
||||
Node.Position = position;
|
||||
Node.AttachObject(Entity);
|
||||
interpolationPacket = new List<InterpolationPacket>();
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace SS3D_shared
|
||||
public List<InterpolationPacket> interpolationPacket;
|
||||
public DateTime lastUpdate;
|
||||
public ItemType ItemType = ItemType.None;
|
||||
public Mob holder; // Just temporary holder for now.
|
||||
|
||||
public Item()
|
||||
{
|
||||
|
||||
@@ -13,6 +13,7 @@ namespace SS3d_server.Modules.Items
|
||||
{
|
||||
private Map.Map map;
|
||||
private SS3DNetserver netServer;
|
||||
private Mobs.MobManager mobManager;
|
||||
private Dictionary<ushort, Item> itemDict; // ItemID, Item
|
||||
private List<ushort> itemsToSend;
|
||||
ushort lastID = 0;
|
||||
@@ -22,10 +23,11 @@ namespace SS3d_server.Modules.Items
|
||||
private float fallSpeed = 5.0f; // Just a constant now (not acceleration) for testing.
|
||||
|
||||
|
||||
public ItemManager(SS3DNetserver _netServer, Map.Map _map)
|
||||
public ItemManager(SS3DNetserver _netServer, Map.Map _map, Mobs.MobManager _mobManager)
|
||||
{
|
||||
netServer = _netServer;
|
||||
map = _map;
|
||||
mobManager = _mobManager;
|
||||
itemDict = new Dictionary<ushort, Item>();
|
||||
itemAssemblyName = typeof(Item).Assembly.ToString();
|
||||
itemsToSend = new List<ushort>();
|
||||
@@ -79,6 +81,9 @@ namespace SS3d_server.Modules.Items
|
||||
case ItemMessage.CreateItem:
|
||||
HandleCreateItem(message);
|
||||
break;
|
||||
case ItemMessage.ClickItem:
|
||||
HandleClickItem(message);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -102,6 +107,33 @@ namespace SS3d_server.Modules.Items
|
||||
SendCreateItem(lastID);
|
||||
}
|
||||
|
||||
private void HandleClickItem(NetIncomingMessage message)
|
||||
{
|
||||
ushort itemID = message.ReadUInt16();
|
||||
ushort mobID = netServer.clientList[message.SenderConnection].mobID;
|
||||
|
||||
if (itemDict[itemID].holder == null && mobManager.mobDict[mobID].heldItem == null)
|
||||
{
|
||||
itemDict[itemID].holder = mobManager.mobDict[mobID];
|
||||
mobManager.mobDict[mobID].heldItem = itemDict[itemID];
|
||||
SendPickupItem(itemID, mobID);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void CreateItem(Type type, Vector3 pos)
|
||||
{
|
||||
object newItem = Activator.CreateInstance(type);
|
||||
lastID++;
|
||||
|
||||
itemDict[lastID] = (Item)newItem;
|
||||
itemDict[lastID].serverInfo.position = pos;
|
||||
itemDict[lastID].itemID = lastID;
|
||||
|
||||
SendCreateItem(lastID);
|
||||
}
|
||||
|
||||
// Message size ~288 bits (about 0.036kb).
|
||||
// This means on map load if we had 40 players, and 500 items,
|
||||
// to send every item to every player at round start would be
|
||||
@@ -169,6 +201,26 @@ namespace SS3d_server.Modules.Items
|
||||
netServer.SendMessageToAll(message);
|
||||
}
|
||||
|
||||
private void SendPickupItem(ushort itemID, ushort mobID)
|
||||
{
|
||||
NetOutgoingMessage message = netServer.netServer.CreateMessage();
|
||||
message.Write((byte)NetMessage.ItemMessage);
|
||||
message.Write((byte)ItemMessage.PickUpItem);
|
||||
message.Write(mobID);
|
||||
message.Write(itemID);
|
||||
netServer.SendMessageToAll(message);
|
||||
}
|
||||
|
||||
private void SendPickupItem(ushort itemID, ushort mobID, NetConnection netConnection)
|
||||
{
|
||||
NetOutgoingMessage message = netServer.netServer.CreateMessage();
|
||||
message.Write((byte)NetMessage.ItemMessage);
|
||||
message.Write((byte)ItemMessage.PickUpItem);
|
||||
message.Write(mobID);
|
||||
message.Write(itemID);
|
||||
netServer.SendMessageTo(message, netConnection);
|
||||
}
|
||||
|
||||
// A new player is joining so lets send them everything we know!
|
||||
// Each module should probably have one of these.
|
||||
public void NewPlayer(NetConnection netConnection)
|
||||
@@ -180,6 +232,10 @@ namespace SS3d_server.Modules.Items
|
||||
continue;
|
||||
}
|
||||
SendCreateItem(item.itemID, netConnection);
|
||||
if (item.holder != null)
|
||||
{
|
||||
SendPickupItem(item.itemID, item.holder.mobID, netConnection);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace SS3d_server.Modules.Map
|
||||
private int mapWidth;
|
||||
private int mapHeight;
|
||||
private string[,] nameArray;
|
||||
private int tileSpacing = 16;
|
||||
public int tileSpacing = 16;
|
||||
private int wallHeight = 40; // This must be the same as defined in the MeshManager.
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace SS3d_server.Modules.Mobs
|
||||
{
|
||||
private Map.Map map;
|
||||
private SS3DNetserver netServer;
|
||||
private Dictionary<ushort, Mob> mobDict; // mobID, mob
|
||||
public Dictionary<ushort, Mob> mobDict; // mobID, mob
|
||||
ushort lastID = 0;
|
||||
private string mobAssemblyName;
|
||||
private DateTime lastmobUpdateSent = DateTime.Now;
|
||||
|
||||
@@ -42,8 +42,8 @@ namespace SS3d_server
|
||||
map = new Map();
|
||||
map.InitMap(serverMapName);
|
||||
|
||||
itemManager = new ItemManager(this, map);
|
||||
mobManager = new MobManager(this, map);
|
||||
itemManager = new ItemManager(this, map, mobManager);
|
||||
chatManager = new ChatManager(this, mobManager);
|
||||
|
||||
}
|
||||
@@ -58,6 +58,7 @@ namespace SS3d_server
|
||||
netConfig.Port = serverPort;
|
||||
netServer = new NetServer(netConfig);
|
||||
netServer.Start();
|
||||
AddRandomCrowbars();
|
||||
active = true;
|
||||
return false;
|
||||
}
|
||||
@@ -309,9 +310,9 @@ namespace SS3d_server
|
||||
netServer.SendMessage(mapMessage, connection, NetDeliveryMethod.ReliableOrdered);
|
||||
Console.WriteLine(connection.RemoteEndpoint.Address.ToString() + ": Sending map finished with message size: " + mapMessage.LengthBytes + " bytes");
|
||||
|
||||
// Lets also send them all the items.
|
||||
itemManager.NewPlayer(connection);
|
||||
// Lets also send them all the items and mobs.
|
||||
mobManager.NewPlayer(connection);
|
||||
itemManager.NewPlayer(connection);
|
||||
}
|
||||
|
||||
public void HandleChangeTile(NetIncomingMessage msg)
|
||||
@@ -448,5 +449,19 @@ namespace SS3d_server
|
||||
Console.WriteLine("Sending to one with size: " + message.LengthBytes + " bytes");
|
||||
netServer.SendMessage(message, connection, NetDeliveryMethod.ReliableOrdered);
|
||||
}
|
||||
|
||||
public void AddRandomCrowbars()
|
||||
{
|
||||
Crowbar c = new Crowbar();
|
||||
Type type = c.GetType();
|
||||
|
||||
Random r = new Random();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
SS3D_shared.HelperClasses.Vector3 pos = new SS3D_shared.HelperClasses.Vector3(r.NextDouble() * map.GetMapWidth() * map.tileSpacing, 60, r.NextDouble() * map.GetMapHeight() * map.tileSpacing);
|
||||
itemManager.CreateItem(type, pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user