private void send_spawned_objects_to_player(Player player) { foreach (var kv in objects) { if (kv.Key >= startobject_high_edge) //Is a spawned object { var ev = new Event3D { ObjectNotification = new Event3D_ObjectNotification { Id = kv.Key, SpawnId = kv.Value.spawn_id, Spawn = false, Transform = ArenaServiceConv.ToArenaTransform(kv.Value.rb) } }; send_to_all_players(ev); } } }
/// <summary> /// Single threaded. /// </summary> /// <param name="spawnable_idx"></param> /// <returns></returns> protected KeyValuePair <int, RigidBody> SpawnObject(int spawnable_idx, JVector?pos = null, JVector?vel = null, JQuaternion?ori = null) { var rb = new RigidBody(spawnable_rigid_bodies[spawnable_idx].Shape); if (pos.HasValue) { rb.Position = pos.Value; } if (vel.HasValue) { rb.LinearVelocity = vel.Value; } if (ori.HasValue) { rb.Orientation = JMatrix.CreateFromQuaternion(ori.Value); } for (;;) { var id = random.Next(startobject_high_edge, int.MaxValue); if (!objects.ContainsKey(id)) { add_to_world(id, spawnable_idx, rb); var ev = new Event3D { ObjectNotification = new Event3D_ObjectNotification { Id = id, SpawnId = spawnable_idx, Spawn = true, Transform = ArenaServiceConv.ToArenaTransform(rb) } }; send_to_all_players(ev); return(new KeyValuePair <int, RigidBody>(id, rb)); } } }